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.
114 lines
4.0 KiB
C++
114 lines
4.0 KiB
C++
/*
|
|
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
|
|
* its licensors.
|
|
*
|
|
* For complete copyright and license terms please see the LICENSE at the root of this
|
|
* distribution (the "License"). All use of this software is governed by the License,
|
|
* or, if provided, by the license below or the license accompanying this file. Do not
|
|
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
*
|
|
*/
|
|
|
|
#include "MotionSetNameHandler.h"
|
|
#include <Integration/Assets/MotionSetAsset.h>
|
|
#include <Integration/System/SystemCommon.h>
|
|
#include <EMotionFX/Source/MotionSet.h>
|
|
|
|
namespace EMotionFX
|
|
{
|
|
AZ_CLASS_ALLOCATOR_IMPL(MotionSetNameHandler, EditorAllocator, 0)
|
|
|
|
AZ::u32 MotionSetNameHandler::GetHandlerName() const
|
|
{
|
|
return AZ_CRC("MotionSetName", 0xcf534ea6);
|
|
}
|
|
|
|
|
|
QWidget* MotionSetNameHandler::CreateGUI(QWidget* parent)
|
|
{
|
|
QComboBox* picker = new QComboBox(parent);
|
|
|
|
connect(picker, &QComboBox::currentTextChanged, this, [picker]()
|
|
{
|
|
EBUS_EVENT(AzToolsFramework::PropertyEditorGUIMessages::Bus, RequestWrite, picker);
|
|
});
|
|
|
|
return picker;
|
|
}
|
|
|
|
|
|
void MotionSetNameHandler::ConsumeAttribute(QComboBox* GUI, AZ::u32 attrib, AzToolsFramework::PropertyAttributeReader* attrValue, [[maybe_unused]] const char* debugName)
|
|
{
|
|
if (attrib == AZ::Edit::Attributes::ReadOnly)
|
|
{
|
|
bool value;
|
|
if (attrValue->Read<bool>(value))
|
|
{
|
|
GUI->setEnabled(!value);
|
|
}
|
|
}
|
|
else if (attrib == AZ_CRC("MotionSetAsset", 0xd4e88984))
|
|
{
|
|
AZ::Data::Asset<Integration::MotionSetAsset>* value;
|
|
if (attrValue->Read<AZ::Data::Asset<Integration::MotionSetAsset>*>(value))
|
|
{
|
|
m_motionSetAsset = value;
|
|
}
|
|
else
|
|
{
|
|
// emit a warning!
|
|
AZ_WarningOnce("MotionSetNameHandler", false, "Failed to read 'MotionSetAsset' attribute from property '%s' into MotionSetNameHandler", debugName);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void MotionSetNameHandler::WriteGUIValuesIntoProperty(size_t index, QComboBox* GUI, property_t& instance, AzToolsFramework::InstanceDataNode* node)
|
|
{
|
|
AZ_UNUSED(index);
|
|
AZ_UNUSED(node);
|
|
const QString& currentText = GUI->currentText();
|
|
instance = AZStd::string(currentText.toUtf8().data(), currentText.length());
|
|
}
|
|
|
|
|
|
bool MotionSetNameHandler::ReadValuesIntoGUI(size_t index, QComboBox* GUI, const property_t& instance, AzToolsFramework::InstanceDataNode* node)
|
|
{
|
|
AZ_UNUSED(index);
|
|
AZ_UNUSED(node);
|
|
QSignalBlocker signalBlocker(GUI);
|
|
GUI->clear();
|
|
if (m_motionSetAsset && m_motionSetAsset->Get() && m_motionSetAsset->Get()->m_emfxMotionSet)
|
|
{
|
|
const AZStd::unique_ptr<EMotionFX::MotionSet>& emfxMotionSet = m_motionSetAsset->Get()->m_emfxMotionSet;
|
|
AZStd::vector<const MotionSet*> motionSets;
|
|
const bool isOwnedByRutime = emfxMotionSet->GetIsOwnedByRuntime();
|
|
emfxMotionSet->RecursiveGetMotionSets(motionSets, isOwnedByRutime);
|
|
|
|
for (const EMotionFX::MotionSet* motionSet : motionSets)
|
|
{
|
|
GUI->addItem(motionSet->GetName());
|
|
}
|
|
if (!instance.empty())
|
|
{
|
|
GUI->setCurrentText(instance.c_str());
|
|
}
|
|
else
|
|
{
|
|
// Choose the root motion set
|
|
GUI->setCurrentText(emfxMotionSet->GetName());
|
|
}
|
|
}
|
|
else if (!GUI->isEnabled() && !instance.empty())
|
|
{
|
|
// When the game is running, the handler is disabled but we still want to show the value
|
|
GUI->addItem(instance.c_str());
|
|
GUI->setCurrentText(instance.c_str());
|
|
}
|
|
return true;
|
|
}
|
|
} // namespace EMotionFX
|
|
|
|
#include <Source/Editor/PropertyWidgets/moc_MotionSetNameHandler.cpp>
|