d6b268e84e
* Sever dependency on legacy resource selector host Audio resource selectors (browse dialogs) no longer need to be registered with the legacy IResourceSelectorHost system. Set up a new EBus specifically to handle browse button presses and directly invokes the dialog. Signed-off-by: amzn-phist <52085794+amzn-phist@users.noreply.github.com> * Hook up legacy audio control selector to new EBus Remaining use of legacy audio selectors (trackview) need to be able to bypass ResourceSelectorHost now. Signed-off-by: amzn-phist <52085794+amzn-phist@users.noreply.github.com> * Removes ResourceSelectorHost and legacy selectors This removes various Variable types that were tied to resource selectors, such as GeomCache, Model, Animation, File. Removes the ResourceSelectorHost completely. The two things that still appeared to have selectors in TrackView are Audio Controls and Texture. Fixed the audio control selector to work via EBus and the Texture selector didn't seem to work at all, but left it in as it was. Signed-off-by: amzn-phist <52085794+amzn-phist@users.noreply.github.com> * Make the default audio selector return old value Signed-off-by: amzn-phist <52085794+amzn-phist@users.noreply.github.com> * Fix some signed/unsigned comparison warnings Signed-off-by: amzn-phist <52085794+amzn-phist@users.noreply.github.com> * Remove deleted function from Editor Mock Signed-off-by: amzn-phist <52085794+amzn-phist@users.noreply.github.com> * Change audio selector api to use string_view Per feedback. Signed-off-by: amzn-phist <52085794+amzn-phist@users.noreply.github.com>
308 lines
12 KiB
C++
308 lines
12 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 "EditorDefs.h"
|
|
|
|
#include "ReflectedVar.h"
|
|
|
|
// AzCore
|
|
#include <AzCore/Serialization/EditContext.h>
|
|
|
|
|
|
bool ReflectedVarInit::s_reflectionDone = false;
|
|
|
|
void ReflectedVarInit::setupReflection(AZ::SerializeContext* serializeContext)
|
|
{
|
|
if (!serializeContext)
|
|
return;
|
|
|
|
if (s_reflectionDone)
|
|
return;
|
|
|
|
s_reflectionDone = true;
|
|
|
|
serializeContext->Class< CReflectedVar>()
|
|
->Version(1)
|
|
->Field("description", &CReflectedVar::m_description)
|
|
->Field("varName", &CReflectedVar::m_varName);
|
|
|
|
serializeContext->Class <CReflectedVarResource, CReflectedVar >()
|
|
->Version(1)
|
|
->Field("path", &CReflectedVarResource::m_path)
|
|
->Field("propertyType", &CReflectedVarResource::m_propertyType)
|
|
;
|
|
|
|
serializeContext->Class< CReflectedVarColor, CReflectedVar>()
|
|
->Version(1)
|
|
->Field("color", &CReflectedVarColor::m_color);
|
|
|
|
serializeContext->Class< CReflectedVarUser, CReflectedVar>()
|
|
->Version(1)
|
|
->Field("value", &CReflectedVarUser::m_value)
|
|
->Field("enableEdit", &CReflectedVarUser::m_enableEdit)
|
|
->Field("title", &CReflectedVarUser::m_dialogTitle)
|
|
->Field("useTree", &CReflectedVarUser::m_useTree)
|
|
->Field("treeSeparator", &CReflectedVarUser::m_treeSeparator)
|
|
->Field("itemNames", &CReflectedVarUser::m_itemNames)
|
|
->Field("itemDescriptions", &CReflectedVarUser::m_itemDescriptions);
|
|
|
|
serializeContext->Class <CReflectedVarSpline, CReflectedVar >()
|
|
->Version(1)
|
|
->Field("spline", &CReflectedVarSpline::m_spline)
|
|
->Field("propertyType", &CReflectedVarSpline::m_propertyType)
|
|
;
|
|
|
|
serializeContext->Class< CPropertyContainer, CReflectedVar>()
|
|
->Version(1)
|
|
->Field("properties", &CPropertyContainer::m_properties);
|
|
|
|
serializeContext->Class <CReflectedVarMotion, CReflectedVar >()
|
|
->Version(1)
|
|
->Field("motion", &CReflectedVarMotion::m_motion)
|
|
->Field("assetId", &CReflectedVarMotion::m_assetId)
|
|
;
|
|
|
|
AZ::EditContext* ec = serializeContext->GetEditContext();
|
|
if (ec)
|
|
{
|
|
ec->Class< CReflectedVarResource >("VarResource", "Resource")
|
|
->ClassElement(AZ::Edit::ClassElements::EditorData, "")
|
|
->Attribute(AZ::Edit::Attributes::NameLabelOverride, &CReflectedVarResource::varName)
|
|
->Attribute(AZ::Edit::Attributes::DescriptionTextOverride, &CReflectedVarResource::description)
|
|
;
|
|
|
|
ec->Class< CReflectedVarUser >("VarUser", "")
|
|
->ClassElement(AZ::Edit::ClassElements::EditorData, "")
|
|
->Attribute(AZ::Edit::Attributes::NameLabelOverride, &CReflectedVarUser::varName)
|
|
->Attribute(AZ::Edit::Attributes::Handler, AZ_CRC("ePropertyUser", 0x65b972c0))
|
|
;
|
|
|
|
ec->Class< CReflectedVarColor >("VarColor", "")
|
|
->ClassElement(AZ::Edit::ClassElements::EditorData, "")
|
|
->Attribute(AZ::Edit::Attributes::Visibility, AZ_CRC("PropertyVisibility_ShowChildrenOnly", 0xef428f20))
|
|
->DataElement(AZ::Edit::UIHandlers::Color, &CReflectedVarColor::m_color, "Color", "")
|
|
->Attribute(AZ::Edit::Attributes::NameLabelOverride, &CReflectedVarColor::varName)
|
|
->Attribute(AZ::Edit::Attributes::DescriptionTextOverride, &CReflectedVarColor::description)
|
|
;
|
|
|
|
ec->Class< CReflectedVarSpline >("VarSpline", "")
|
|
->ClassElement(AZ::Edit::ClassElements::EditorData, "")
|
|
->Attribute(AZ::Edit::Attributes::NameLabelOverride, &CReflectedVarSpline::varName)
|
|
->Attribute(AZ::Edit::Attributes::Handler, &CReflectedVarSpline::handler)
|
|
;
|
|
|
|
ec->Class< CPropertyContainer >("PropertyContainer", "")
|
|
->ClassElement(AZ::Edit::ClassElements::EditorData, "")
|
|
->Attribute(AZ::Edit::Attributes::Visibility, AZ_CRC("PropertyVisibility_ShowChildrenOnly", 0xef428f20))
|
|
->DataElement(AZ::Edit::UIHandlers::Default, &CPropertyContainer::m_properties, "Properties", "")
|
|
->Attribute(AZ::Edit::Attributes::ContainerCanBeModified, false)
|
|
->Attribute(AZ::Edit::Attributes::NameLabelOverride, &CPropertyContainer::varName)
|
|
->Attribute(AZ::Edit::Attributes::DescriptionTextOverride, &CPropertyContainer::description)
|
|
->Attribute(AZ::Edit::Attributes::Visibility, &CPropertyContainer::GetVisibility)
|
|
->Attribute(AZ::Edit::Attributes::AutoExpand, &CPropertyContainer::m_autoExpand)
|
|
->Attribute(AZ::Edit::Attributes::ValueText, &CPropertyContainer::m_valueText) //will be ignored if blank
|
|
;
|
|
|
|
ec->Class< CReflectedVarMotion >("VarMotion", "Motion")
|
|
->ClassElement(AZ::Edit::ClassElements::EditorData, "")
|
|
->Attribute(AZ::Edit::Attributes::NameLabelOverride, &CReflectedVarMotion::varName)
|
|
->Attribute(AZ::Edit::Attributes::DescriptionTextOverride, &CReflectedVarMotion::description)
|
|
;
|
|
}
|
|
CReflectedVarString::reflect(serializeContext);
|
|
CReflectedVarBool::reflect(serializeContext);
|
|
CReflectedVarFloat::reflect(serializeContext);
|
|
CReflectedVarInt::reflect(serializeContext);
|
|
CReflectedVarVector2::reflect(serializeContext);
|
|
CReflectedVarVector3::reflect(serializeContext);
|
|
CReflectedVarVector4::reflect(serializeContext);
|
|
CReflectedVarAny<AZStd::vector<AZStd::string>>::reflect(serializeContext);
|
|
CReflectedVarEnum<int>::reflect(serializeContext);
|
|
CReflectedVarEnum<AZStd::string>::reflect(serializeContext);
|
|
CReflectedVarGenericProperty::reflect(serializeContext);
|
|
}
|
|
|
|
|
|
template<class T>
|
|
void CReflectedVarAny<T>::reflect(AZ::SerializeContext* serializeContext)
|
|
{
|
|
static bool reflected = false;
|
|
if (reflected)
|
|
return;
|
|
reflected = true;
|
|
|
|
serializeContext->Class< CReflectedVarAny<T>, CReflectedVar>()
|
|
->Version(1)
|
|
->Field("value", &CReflectedVarAny<T>::m_value);
|
|
|
|
AZ::EditContext* ec = serializeContext->GetEditContext();
|
|
if (ec)
|
|
{
|
|
ec->Class< CReflectedVarAny<T> >("VarAny", "")
|
|
->ClassElement(AZ::Edit::ClassElements::EditorData, "")
|
|
->Attribute(AZ::Edit::Attributes::Visibility, AZ_CRC("PropertyVisibility_ShowChildrenOnly", 0xef428f20))
|
|
->DataElement(AZ::Edit::UIHandlers::Default, &CReflectedVarAny<T>::m_value, "Value", "")
|
|
->Attribute(AZ::Edit::Attributes::NameLabelOverride, &CReflectedVarAny<T>::varName)
|
|
->Attribute(AZ::Edit::Attributes::DescriptionTextOverride, &CReflectedVarAny<T>::description)
|
|
;
|
|
}
|
|
}
|
|
|
|
|
|
template<class T, class R>
|
|
void CReflectedVarRanged<T, R>::reflect(AZ::SerializeContext* serializeContext)
|
|
{
|
|
static bool reflected = false;
|
|
if (reflected)
|
|
return;
|
|
reflected = true;
|
|
|
|
serializeContext->Class< CReflectedVarRanged<T, R>, CReflectedVar>()
|
|
->Version(1)
|
|
->Field("value", &CReflectedVarRanged<T, R>::m_value)
|
|
->Field("min", &CReflectedVarRanged<T, R>::m_minVal)
|
|
->Field("max", &CReflectedVarRanged<T, R>::m_maxVal)
|
|
->Field("step", &CReflectedVarRanged<T, R>::m_stepSize)
|
|
->Field("softMin", &CReflectedVarRanged<T, R>::m_softMinVal)
|
|
->Field("softMax", &CReflectedVarRanged<T, R>::m_softMaxVal)
|
|
;
|
|
|
|
AZ::EditContext* ec = serializeContext->GetEditContext();
|
|
if (ec)
|
|
{
|
|
ec->Class< CReflectedVarRanged<T, R> >("VarAny", "")
|
|
->ClassElement(AZ::Edit::ClassElements::EditorData, "")
|
|
->Attribute(AZ::Edit::Attributes::Visibility, AZ_CRC("PropertyVisibility_ShowChildrenOnly", 0xef428f20))
|
|
->DataElement(AZ::Edit::UIHandlers::Slider, &CReflectedVarRanged<T, R>::m_value, "Value", "")
|
|
->Attribute(AZ::Edit::Attributes::NameLabelOverride, &CReflectedVarRanged<T, R>::varName)
|
|
->Attribute(AZ::Edit::Attributes::DescriptionTextOverride, &CReflectedVarRanged<T, R>::description)
|
|
->Attribute(AZ::Edit::Attributes::Min, &CReflectedVarRanged<T, R>::minValue)
|
|
->Attribute(AZ::Edit::Attributes::Max, &CReflectedVarRanged<T, R>::maxValue)
|
|
->Attribute(AZ::Edit::Attributes::Step, &CReflectedVarRanged<T, R>::stepSize)
|
|
->Attribute(AZ::Edit::Attributes::SoftMin, &CReflectedVarRanged<T, R>::softMinVal)
|
|
->Attribute(AZ::Edit::Attributes::SoftMax, &CReflectedVarRanged<T, R>::softMaxVal)
|
|
;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
template<class T>
|
|
void CReflectedVarEnum<T>::reflect(AZ::SerializeContext* serializeContext)
|
|
{
|
|
static bool reflected = false;
|
|
if (reflected)
|
|
return;
|
|
reflected = true;
|
|
|
|
serializeContext->Class< CReflectedVarEnum<T>, CReflectedVar>()
|
|
->Version(1)
|
|
->Field("value", &CReflectedVarEnum<T>::m_value)
|
|
->Field("selectedName", &CReflectedVarEnum<T>::m_selectedEnumName)
|
|
->Field("availableValues", &CReflectedVarEnum<T>::m_enums)
|
|
;
|
|
|
|
AZ::EditContext* ec = serializeContext->GetEditContext();
|
|
if (ec)
|
|
{
|
|
ec->Class< CReflectedVarEnum<T> >("Enum Variable", "")
|
|
->ClassElement(AZ::Edit::ClassElements::EditorData, "")
|
|
->Attribute(AZ::Edit::Attributes::Visibility, AZ_CRC("PropertyVisibility_ShowChildrenOnly", 0xef428f20))
|
|
->DataElement(AZ::Edit::UIHandlers::ComboBox, &CReflectedVarEnum<T>::m_selectedEnumName, "Value", "")
|
|
->Attribute(AZ::Edit::Attributes::StringList, &CReflectedVarEnum<T>::GetEnums)
|
|
->Attribute(AZ::Edit::Attributes::ChangeNotify, &CReflectedVarEnum<T>::OnEnumChanged)
|
|
->Attribute(AZ::Edit::Attributes::NameLabelOverride, &CReflectedVarEnum<T>::varName)
|
|
->Attribute(AZ::Edit::Attributes::DescriptionTextOverride, &CReflectedVarEnum<T>::description)
|
|
;
|
|
}
|
|
}
|
|
|
|
|
|
void CReflectedVarGenericProperty::reflect(AZ::SerializeContext* serializeContext)
|
|
{
|
|
static bool reflected = false;
|
|
if (reflected)
|
|
return;
|
|
reflected = true;
|
|
|
|
serializeContext->Class< CReflectedVarGenericProperty, CReflectedVar>()
|
|
->Version(1)
|
|
->Field("value", &CReflectedVarGenericProperty::m_value)
|
|
->Field("propertyType", &CReflectedVarGenericProperty::m_propertyType)
|
|
;
|
|
|
|
AZ::EditContext* ec = serializeContext->GetEditContext();
|
|
if (ec)
|
|
{
|
|
ec->Class< CReflectedVarGenericProperty >("GenericProperty", "GenericProperty")
|
|
->ClassElement(AZ::Edit::ClassElements::EditorData, "")
|
|
->Attribute(AZ::Edit::Attributes::NameLabelOverride, &CReflectedVarGenericProperty::varName)
|
|
->Attribute(AZ::Edit::Attributes::DescriptionTextOverride, &CReflectedVarGenericProperty::description)
|
|
->Attribute(AZ::Edit::Attributes::Handler, &CReflectedVarGenericProperty::handler)
|
|
;
|
|
}
|
|
|
|
}
|
|
|
|
AZ::u32 CReflectedVarSpline::handler()
|
|
{
|
|
switch (m_propertyType)
|
|
{
|
|
case ePropertyFloatCurve:
|
|
return AZ_CRC("ePropertyFloatCurve", 0x7440ccce);
|
|
case ePropertyColorCurve:
|
|
return AZ_CRC("ePropertyColorCurve", 0xa30da4ec);
|
|
default:
|
|
AZ_Assert(false, "CReflectedVarSpline property type must be ePropertyFloatCurve or ePropertyColorCurve");
|
|
return AZ::Edit::UIHandlers::Default;
|
|
}
|
|
}
|
|
|
|
|
|
AZ::u32 CReflectedVarGenericProperty::handler()
|
|
{
|
|
switch (m_propertyType)
|
|
{
|
|
case ePropertyShader:
|
|
return AZ_CRC("ePropertyShader", 0xc40932f1);
|
|
case ePropertyEquip:
|
|
return AZ_CRC("ePropertyEquip", 0x66ffd290);
|
|
case ePropertyDeprecated0:
|
|
return AZ_CRC("ePropertyCustomAction", 0x4ffa5ba5);
|
|
case ePropertyGameToken:
|
|
return AZ_CRC("ePropertyGameToken", 0x34855b6f);
|
|
case ePropertyMissionObj:
|
|
return AZ_CRC("ePropertyMissionObj", 0x4a2d0dc8);
|
|
case ePropertySequence:
|
|
return AZ_CRC("ePropertySequence", 0xdd1c7d44);
|
|
case ePropertySequenceId:
|
|
return AZ_CRC("ePropertySequenceId", 0x05983dcc);
|
|
case ePropertyLocalString:
|
|
return AZ_CRC("ePropertyLocalString", 0x0cd9609a);
|
|
case ePropertyLightAnimation:
|
|
return AZ_CRC("ePropertyLightAnimation", 0x277097da);
|
|
case ePropertyParticleName:
|
|
return AZ_CRC("ePropertyParticleName", 0xf44c7133);
|
|
default:
|
|
AZ_Assert(false, "No property handlers defined for the property type");
|
|
return AZ_CRC("Default", 0xe35e00df);
|
|
}
|
|
}
|
|
|
|
|
|
void CPropertyContainer::AddProperty(CReflectedVar *property)
|
|
{
|
|
if (property)
|
|
m_properties.push_back(property);
|
|
}
|
|
|
|
void CPropertyContainer::Clear()
|
|
{
|
|
m_properties.clear();
|
|
}
|