You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
3.3 KiB
C++
103 lines
3.3 KiB
C++
/*
|
|
* Copyright (c) Contributors to the Open 3D Engine Project.
|
|
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0 OR MIT
|
|
*
|
|
*/
|
|
|
|
#include <AzToolsFramework/Prefab/PrefabFocusHandler.h>
|
|
|
|
#include <AzToolsFramework/Entity/PrefabEditorEntityOwnershipInterface.h>
|
|
#include <AzToolsFramework/Prefab/Instance/Instance.h>
|
|
#include <AzToolsFramework/Prefab/Instance/InstanceEntityMapperInterface.h>
|
|
|
|
namespace AzToolsFramework::Prefab
|
|
{
|
|
PrefabFocusHandler::PrefabFocusHandler()
|
|
{
|
|
m_instanceEntityMapperInterface = AZ::Interface<InstanceEntityMapperInterface>::Get();
|
|
AZ_Assert(
|
|
m_instanceEntityMapperInterface,
|
|
"Prefab - PrefabFocusHandler - "
|
|
"Instance Entity Mapper Interface could not be found. "
|
|
"Check that it is being correctly initialized.");
|
|
|
|
AZ::Interface<PrefabFocusInterface>::Register(this);
|
|
}
|
|
|
|
PrefabFocusHandler::~PrefabFocusHandler()
|
|
{
|
|
AZ::Interface<PrefabFocusInterface>::Unregister(this);
|
|
}
|
|
|
|
PrefabFocusOperationResult PrefabFocusHandler::FocusOnOwningPrefab(AZ::EntityId entityId)
|
|
{
|
|
InstanceOptionalReference focusedInstance;
|
|
|
|
if (entityId == AZ::EntityId())
|
|
{
|
|
PrefabEditorEntityOwnershipInterface* prefabEditorEntityOwnershipInterface =
|
|
AZ::Interface<PrefabEditorEntityOwnershipInterface>::Get();
|
|
|
|
if(!prefabEditorEntityOwnershipInterface)
|
|
{
|
|
return AZ::Failure(AZStd::string("Could not focus on root prefab instance - internal error "
|
|
"(PrefabEditorEntityOwnershipInterface unavailable)."));
|
|
}
|
|
|
|
focusedInstance = prefabEditorEntityOwnershipInterface->GetRootPrefabInstance();
|
|
}
|
|
else
|
|
{
|
|
focusedInstance = m_instanceEntityMapperInterface->FindOwningInstance(entityId);
|
|
}
|
|
|
|
if (!focusedInstance.has_value())
|
|
{
|
|
return AZ::Failure(AZStd::string(
|
|
"Prefab Focus Handler: Couldn't find owning instance of entityId provided."));
|
|
}
|
|
|
|
m_focusedInstance = focusedInstance;
|
|
m_focusedTemplateId = focusedInstance->get().GetTemplateId();
|
|
|
|
FocusModeInterface* focusModeInterface = AZ::Interface<FocusModeInterface>::Get();
|
|
if (focusModeInterface)
|
|
{
|
|
focusModeInterface->SetFocusRoot(focusedInstance->get().GetContainerEntityId());
|
|
}
|
|
|
|
return AZ::Success();
|
|
}
|
|
|
|
TemplateId PrefabFocusHandler::GetFocusedPrefabTemplateId()
|
|
{
|
|
return m_focusedTemplateId;
|
|
}
|
|
|
|
InstanceOptionalReference PrefabFocusHandler::GetFocusedPrefabInstance()
|
|
{
|
|
return m_focusedInstance;
|
|
}
|
|
|
|
bool PrefabFocusHandler::IsOwningPrefabBeingFocused(AZ::EntityId entityId)
|
|
{
|
|
if (!m_focusedInstance.has_value())
|
|
{
|
|
// PrefabFocusHandler has not been initialized yet.
|
|
return false;
|
|
}
|
|
|
|
if (entityId == AZ::EntityId())
|
|
{
|
|
return false;
|
|
}
|
|
|
|
InstanceOptionalReference instance = m_instanceEntityMapperInterface->FindOwningInstance(entityId);
|
|
|
|
return instance.has_value() && (&instance->get() == &m_focusedInstance->get());
|
|
}
|
|
|
|
} // namespace AzToolsFramework::Prefab
|