Updated AnimNode registration in LyShine and Maestro to register to a member variable map (#6786)

* Updated the Maestro MovieSystem and LyShine AnimationSystem to register
Anim Nodes and Anim Params into a member variable map

Previously the registration was occuring in a global variable map inside
of Movie.cpp and UiAnimationSystem.cpp

Rolled back the changes to update the CUiAnimNode and CAnimParamType to
use the stateless allocator in their m_name string member.
This was only needed because those types were used in global memory.

Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>

* Updated the AZStd::hash specializations for basic_string and
basic_fixed_string to be transparent.

This allows hashing of types that aren't basic_string or
basic_fixed_string using the hash specializations for those types
without needing to create an instance of those types.

Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>

* Adding call to disable saving of the UserSettings.xml in the DisplaySettingsPythonBindingsFixture to avoid race condition running the test in parallel

Signed-off-by: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com>
This commit is contained in:
lumberyard-employee-dm
2022-01-14 11:32:29 -06:00
committed by GitHub
parent 4392c8963c
commit b62d130475
13 changed files with 227 additions and 237 deletions
@@ -35,6 +35,11 @@ namespace DisplaySettingsPythonBindingsUnitTests
m_app.Start(appDesc);
m_app.RegisterComponentDescriptor(AzToolsFramework::DisplaySettingsPythonFuncsHandler::CreateDescriptor());
// Without this, the user settings component would attempt to save on finalize/shutdown. Since the file is
// shared across the whole engine, if multiple tests are run in parallel, the saving could cause a crash
// in the unit tests.
AZ::UserSettingsComponentRequestBus::Broadcast(&AZ::UserSettingsComponentRequests::DisableSaveOnFinalize);
}
void TearDown() override
@@ -1760,7 +1760,8 @@ namespace AZStd
template<class Element, size_t MaxElementCount, class Traits>
struct hash<basic_fixed_string<Element, MaxElementCount, Traits>>
{
inline constexpr size_t operator()(const basic_fixed_string<Element, MaxElementCount, Traits>& value) const
using is_transparent = void;
inline constexpr size_t operator()(const basic_string_view<Element, Traits>& value) const
{
return hash_string(value.begin(), value.length());
}
@@ -2071,9 +2071,8 @@ namespace AZStd
template<class Element, class Traits, class Allocator>
struct hash< basic_string< Element, Traits, Allocator> >
{
typedef basic_string< Element, Traits, Allocator> argument_type;
typedef AZStd::size_t result_type;
inline result_type operator()(const argument_type& value) const
using is_transparent = void;
inline constexpr size_t operator()(const basic_string_view<Element, Traits>& value) const
{
return hash_string(value.begin(), value.length());
}
+2 -3
View File
@@ -13,7 +13,6 @@
#include <AzCore/Math/Crc.h>
#include <AzCore/Math/Quaternion.h>
#include <AzCore/Serialization/SerializeContext.h>
#include <AzCore/std/allocator_stateless.h>
#include <Range.h>
#include <AnimKey.h>
@@ -184,7 +183,7 @@ public:
private:
AnimParamType m_type;
AZStd::basic_string<char, AZStd::char_traits<char>, AZStd::stateless_allocator> m_name;
AZStd::string m_name;
};
namespace AZStd
@@ -620,7 +619,7 @@ public:
, valueType(_valueType)
, flags(_flags) {};
AZStd::basic_string<char, AZStd::char_traits<char>, AZStd::stateless_allocator> name; // parameter name.
AZStd::string name; // parameter name.
CAnimParamType paramType; // parameter id.
AnimValueType valueType; // value type, defines type of track to use for animating this parameter.
ESupportedParamFlags flags; // combination of flags from ESupportedParamFlags.
@@ -79,7 +79,7 @@ namespace GraphCanvas
private:
AZStd::string m_value;
AZStd::hash<AZStd::string>::result_type m_hash;
size_t m_hash;
friend class BasicSelectorEventHandler;
};
@@ -13,7 +13,6 @@
#include <LyShine/Animation/IUiAnimation.h>
#include "UiAnimationSystem.h"
#include <AzCore/std/allocator_stateless.h>
/*!
@@ -40,7 +39,7 @@ public:
, valueType(_valueType)
, flags(_flags) {};
AZStd::basic_string<char, AZStd::char_traits<char>, AZStd::stateless_allocator> name; // parameter name.
AZStd::string name; // parameter name.
CUiAnimParamType paramType; // parameter id.
EUiAnimValue valueType; // value type, defines type of track to use for animating this parameter.
ESupportedParamFlags flags; // combination of flags from ESupportedParamFlags.
@@ -14,77 +14,59 @@
#include "UiAnimSerialize.h"
#include <AzCore/Component/ComponentApplicationBus.h>
#include <AzCore/std/allocator_stateless.h>
#include <AzCore/std/containers/map.h>
#include <AzCore/std/containers/unordered_map.h>
#include <StlUtils.h>
#include <ISystem.h>
#include <ILog.h>
#include <IConsole.h>
//////////////////////////////////////////////////////////////////////////
namespace
{
using UiAnimParamSystemString = AZStd::basic_string<char, AZStd::char_traits<char>, AZStd::stateless_allocator>;
template <typename KeyType, typename MappedType, typename Compare = AZStd::less<KeyType>>
using UiAnimSystemOrderedMap = AZStd::map<KeyType, MappedType, Compare, AZStd::stateless_allocator>;
template <typename KeyType, typename MappedType, typename Hasher = AZStd::hash<KeyType>, typename EqualKey = AZStd::equal_to<KeyType>>
using UiAnimSystemUnorderedMap = AZStd::unordered_map<KeyType, MappedType, Hasher, EqualKey, AZStd::stateless_allocator>;
}
// Serialization for anim nodes & param types
#define REGISTER_NODE_TYPE(name) assert(!g_animNodeEnumToStringMap.contains(eUiAnimNodeType_ ## name)); \
g_animNodeEnumToStringMap[eUiAnimNodeType_ ## name] = AZ_STRINGIZE(name); \
g_animNodeStringToEnumMap[UiAnimParamSystemString(AZ_STRINGIZE(name))] = eUiAnimNodeType_ ## name;
#define REGISTER_NODE_TYPE(name) assert(!m_animNodeEnumToStringMap.contains(eUiAnimNodeType_ ## name)); \
m_animNodeEnumToStringMap[eUiAnimNodeType_ ## name] = AZ_STRINGIZE(name); \
m_animNodeStringToEnumMap[UiAnimParamSystemString(AZ_STRINGIZE(name))] = eUiAnimNodeType_ ## name;
#define REGISTER_PARAM_TYPE(name) assert(!g_animParamEnumToStringMap.contains(eUiAnimParamType_ ## name)); \
g_animParamEnumToStringMap[eUiAnimParamType_ ## name] = AZ_STRINGIZE(name); \
g_animParamStringToEnumMap[UiAnimParamSystemString(AZ_STRINGIZE(name))] = eUiAnimParamType_ ## name;
#define REGISTER_PARAM_TYPE(name) assert(!m_animParamEnumToStringMap.contains(eUiAnimParamType_ ## name)); \
m_animParamEnumToStringMap[eUiAnimParamType_ ## name] = AZ_STRINGIZE(name); \
m_animParamStringToEnumMap[UiAnimParamSystemString(AZ_STRINGIZE(name))] = eUiAnimParamType_ ## name;
namespace
// If you get an assert in this function, it means two node types have the same enum value.
void UiAnimationSystem::RegisterNodeTypes()
{
UiAnimSystemUnorderedMap<int, UiAnimParamSystemString> g_animNodeEnumToStringMap;
UiAnimSystemOrderedMap<UiAnimParamSystemString, EUiAnimNodeType, stl::less_stricmp<UiAnimParamSystemString>> g_animNodeStringToEnumMap;
REGISTER_NODE_TYPE(Entity)
REGISTER_NODE_TYPE(Director)
REGISTER_NODE_TYPE(Camera)
REGISTER_NODE_TYPE(CVar)
REGISTER_NODE_TYPE(ScriptVar)
REGISTER_NODE_TYPE(Material)
REGISTER_NODE_TYPE(Event)
REGISTER_NODE_TYPE(Group)
REGISTER_NODE_TYPE(Layer)
REGISTER_NODE_TYPE(Comment)
REGISTER_NODE_TYPE(RadialBlur)
REGISTER_NODE_TYPE(ColorCorrection)
REGISTER_NODE_TYPE(DepthOfField)
REGISTER_NODE_TYPE(ScreenFader)
REGISTER_NODE_TYPE(Light)
REGISTER_NODE_TYPE(HDRSetup)
REGISTER_NODE_TYPE(ShadowSetup)
REGISTER_NODE_TYPE(Alembic)
REGISTER_NODE_TYPE(GeomCache)
REGISTER_NODE_TYPE(Environment)
REGISTER_NODE_TYPE(ScreenDropsSetup)
REGISTER_NODE_TYPE(AzEntity)
}
UiAnimSystemUnorderedMap<int, UiAnimParamSystemString> g_animParamEnumToStringMap;
UiAnimSystemOrderedMap<UiAnimParamSystemString, EUiAnimParamType, stl::less_stricmp<UiAnimParamSystemString>> g_animParamStringToEnumMap;
// If you get an assert in this function, it means two node types have the same enum value.
void RegisterNodeTypes()
{
REGISTER_NODE_TYPE(Entity)
REGISTER_NODE_TYPE(Director)
REGISTER_NODE_TYPE(Camera)
REGISTER_NODE_TYPE(CVar)
REGISTER_NODE_TYPE(ScriptVar)
REGISTER_NODE_TYPE(Material)
REGISTER_NODE_TYPE(Event)
REGISTER_NODE_TYPE(Group)
REGISTER_NODE_TYPE(Layer)
REGISTER_NODE_TYPE(Comment)
REGISTER_NODE_TYPE(RadialBlur)
REGISTER_NODE_TYPE(ColorCorrection)
REGISTER_NODE_TYPE(DepthOfField)
REGISTER_NODE_TYPE(ScreenFader)
REGISTER_NODE_TYPE(Light)
REGISTER_NODE_TYPE(HDRSetup)
REGISTER_NODE_TYPE(ShadowSetup)
REGISTER_NODE_TYPE(Alembic)
REGISTER_NODE_TYPE(GeomCache)
REGISTER_NODE_TYPE(Environment)
REGISTER_NODE_TYPE(ScreenDropsSetup)
REGISTER_NODE_TYPE(AzEntity)
}
// If you get an assert in this function, it means two param types have the same enum value.
void RegisterParamTypes()
{
REGISTER_PARAM_TYPE(Event)
REGISTER_PARAM_TYPE(Float)
REGISTER_PARAM_TYPE(TrackEvent)
REGISTER_PARAM_TYPE(AzComponentField)
}
// If you get an assert in this function, it means two param types have the same enum value.
void UiAnimationSystem::RegisterParamTypes()
{
REGISTER_PARAM_TYPE(Event)
REGISTER_PARAM_TYPE(Float)
REGISTER_PARAM_TYPE(TrackEvent)
REGISTER_PARAM_TYPE(AzComponentField)
}
//////////////////////////////////////////////////////////////////////////
@@ -98,6 +80,10 @@ UiAnimationSystem::UiAnimationSystem()
m_lastUpdateTime = AZ::Time::ZeroTimeUs;
m_nextSequenceId = 1;
DoNodeStaticInitialisation();
RegisterNodeTypes();
RegisterParamTypes();
}
//////////////////////////////////////////////////////////////////////////
@@ -1173,16 +1159,16 @@ void UiAnimationSystem::SerializeNodeType(EUiAnimNodeType& animNodeType, XmlNode
XmlString nodeTypeString;
if (xmlNode->getAttr(kType, nodeTypeString))
{
assert(g_animNodeStringToEnumMap.find(nodeTypeString.c_str()) != g_animNodeStringToEnumMap.end());
animNodeType = stl::find_in_map(g_animNodeStringToEnumMap, nodeTypeString.c_str(), eUiAnimNodeType_Invalid);
assert(m_animNodeStringToEnumMap.contains(nodeTypeString.c_str()));
animNodeType = stl::find_in_map(m_animNodeStringToEnumMap, nodeTypeString.c_str(), eUiAnimNodeType_Invalid);
}
}
}
else
{
const char* pTypeString = "Invalid";
assert(g_animNodeEnumToStringMap.find(animNodeType) != g_animNodeEnumToStringMap.end());
pTypeString = g_animNodeEnumToStringMap[animNodeType].c_str();
assert(m_animNodeEnumToStringMap.find(animNodeType) != m_animNodeEnumToStringMap.end());
pTypeString = m_animNodeEnumToStringMap[animNodeType].c_str();
xmlNode->setAttr(kType, pTypeString);
}
}
@@ -1242,8 +1228,8 @@ void UiAnimationSystem::SerializeParamType(CUiAnimParamType& animParamType, XmlN
}
else
{
assert(g_animParamStringToEnumMap.find(paramTypeString.c_str()) != g_animParamStringToEnumMap.end());
animParamType.m_type = stl::find_in_map(g_animParamStringToEnumMap, paramTypeString.c_str(), eUiAnimParamType_Invalid);
assert(m_animParamStringToEnumMap.contains(paramTypeString.c_str()));
animParamType.m_type = stl::find_in_map(m_animParamStringToEnumMap, paramTypeString.c_str(), eUiAnimParamType_Invalid);
}
}
}
@@ -1265,8 +1251,8 @@ void UiAnimationSystem::SerializeParamType(CUiAnimParamType& animParamType, XmlN
}
else
{
assert(g_animParamEnumToStringMap.find(animParamType.m_type) != g_animParamEnumToStringMap.end());
pTypeString = g_animParamEnumToStringMap[animParamType.m_type].c_str();
assert(m_animParamEnumToStringMap.find(animParamType.m_type) != m_animParamEnumToStringMap.end());
pTypeString = m_animParamEnumToStringMap[animParamType.m_type].c_str();
}
xmlNode->setAttr(kParamType, pTypeString);
@@ -1332,9 +1318,9 @@ const char* UiAnimationSystem::GetParamTypeName(const CUiAnimParamType& animPara
}
else
{
if (g_animParamEnumToStringMap.find(animParamType.m_type) != g_animParamEnumToStringMap.end())
if (m_animParamEnumToStringMap.find(animParamType.m_type) != m_animParamEnumToStringMap.end())
{
return g_animParamEnumToStringMap[animParamType.m_type].c_str();
return m_animParamEnumToStringMap[animParamType.m_type].c_str();
}
}
@@ -1346,15 +1332,6 @@ void UiAnimationSystem::OnCameraCut()
{
}
//////////////////////////////////////////////////////////////////////////
void UiAnimationSystem::StaticInitialize()
{
DoNodeStaticInitialisation();
RegisterNodeTypes();
RegisterParamTypes();
}
//////////////////////////////////////////////////////////////////////////
void UiAnimationSystem::Reflect(AZ::SerializeContext* serializeContext)
{
@@ -1380,13 +1357,13 @@ void UiAnimationSystem::Reflect(AZ::SerializeContext* serializeContext)
//////////////////////////////////////////////////////////////////////////
EUiAnimNodeType UiAnimationSystem::GetNodeTypeFromString(const char* pString) const
{
return stl::find_in_map(g_animNodeStringToEnumMap, pString, eUiAnimNodeType_Invalid);
return stl::find_in_map(m_animNodeStringToEnumMap, pString, eUiAnimNodeType_Invalid);
}
//////////////////////////////////////////////////////////////////////////
CUiAnimParamType UiAnimationSystem::GetParamTypeFromString(const char* pString) const
{
const EUiAnimParamType paramType = stl::find_in_map(g_animParamStringToEnumMap, pString, eUiAnimParamType_Invalid);
const EUiAnimParamType paramType = stl::find_in_map(m_animParamStringToEnumMap, pString, eUiAnimParamType_Invalid);
if (paramType != eUiAnimParamType_Invalid)
{
@@ -14,6 +14,8 @@
#include <AzCore/std/containers/map.h>
#include <AzCore/Time/ITime.h>
#include <CryCommon/StlUtils.h>
struct PlayingUIAnimSequence
{
//! Sequence playing
@@ -134,12 +136,10 @@ public:
void SerializeParamType(CUiAnimParamType& animParamType, XmlNodeRef& xmlNode, bool bLoading, const uint version) override;
void SerializeParamData(UiAnimParamData& animParamData, XmlNodeRef& xmlNode, bool bLoading) override;
static const char* GetParamTypeName(const CUiAnimParamType& animParamType);
const char* GetParamTypeName(const CUiAnimParamType& animParamType);
void OnCameraCut();
static void StaticInitialize();
static void Reflect(AZ::SerializeContext* serializeContext);
void NotifyTrackEventListeners(const char* eventName, const char* valueName, IUiAnimSequence* pSequence) override;
@@ -187,5 +187,21 @@ private:
// A sequence which turned on the early animation update last time
uint32 m_nextSequenceId;
using UiAnimParamSystemString = AZStd::string;
template <typename KeyType, typename MappedType, typename Compare = stl::less_stricmp<KeyType>>
using UiAnimSystemOrderedMap = AZStd::map<KeyType, MappedType, Compare>;
template <typename KeyType, typename MappedType, typename Hasher = AZStd::hash<KeyType>, typename EqualKey = AZStd::equal_to<>>
using UiAnimSystemUnorderedMap = AZStd::unordered_map<KeyType, MappedType, Hasher, EqualKey>;
UiAnimSystemUnorderedMap<int, UiAnimParamSystemString> m_animNodeEnumToStringMap;
UiAnimSystemOrderedMap<UiAnimParamSystemString, EUiAnimNodeType> m_animNodeStringToEnumMap;
UiAnimSystemUnorderedMap<int, UiAnimParamSystemString> m_animParamEnumToStringMap;
UiAnimSystemOrderedMap<UiAnimParamSystemString, EUiAnimParamType> m_animParamStringToEnumMap;
void RegisterNodeTypes();
void RegisterParamTypes();
void ShowPlayedSequencesDebug();
};
-2
View File
@@ -156,8 +156,6 @@ CLyShine::CLyShine([[maybe_unused]] ISystem* system)
UiElementComponent::Initialize();
UiCanvasComponent::Initialize();
UiAnimationSystem::StaticInitialize();
AzFramework::InputChannelEventListener::Connect();
AzFramework::InputTextEventListener::Connect();
UiCursorBus::Handler::BusConnect();
@@ -8,7 +8,6 @@
#include <AzCore/Serialization/SerializeContext.h>
#include <AzCore/std/allocator_stateless.h>
#include "AnimPostFXNode.h"
#include "AnimSplineTrack.h"
#include "CompoundSplineTrack.h"
@@ -39,7 +38,7 @@ public:
virtual void GetDefault(bool& val) const = 0;
virtual void GetDefault(Vec4& val) const = 0;
AZStd::basic_string<char, AZStd::char_traits<char>, AZStd::stateless_allocator> m_name;
AZStd::string m_name;
protected:
virtual ~CControlParamBase(){}
+119 -140
View File
@@ -7,7 +7,6 @@
*/
#include <AzCore/Component/Entity.h>
#include <AzCore/std/allocator_stateless.h>
#include <AzCore/std/containers/map.h>
#include <AzCore/std/containers/unordered_map.h>
#include <AzCore/Time/ITime.h>
@@ -28,7 +27,6 @@
#include "LayerNode.h"
#include "ShadowsSetupNode.h"
#include <StlUtils.h>
#include <MathConversion.h>
#include <StaticInstance.h>
@@ -74,136 +72,117 @@ static SMovieSequenceAutoComplete s_movieSequenceAutoComplete;
#endif
//////////////////////////////////////////////////////////////////////////
namespace
{
using AnimParamSystemString = AZStd::basic_string<char, AZStd::char_traits<char>, AZStd::stateless_allocator>;
// Serialization for anim nodes & param types
#define REGISTER_NODE_TYPE(name) assert(!m_animNodeEnumToStringMap.contains(AnimNodeType::name)); \
m_animNodeEnumToStringMap[AnimNodeType::name] = AZ_STRINGIZE(name); \
m_animNodeStringToEnumMap[AnimParamSystemString(AZ_STRINGIZE(name))] = AnimNodeType::name;
template <typename KeyType, typename MappedType, typename Compare = AZStd::less<KeyType>>
using AnimSystemOrderedMap = AZStd::map<KeyType, MappedType, Compare, AZStd::stateless_allocator>;
template <typename KeyType, typename MappedType, typename Hasher = AZStd::hash<KeyType>, typename EqualKey = AZStd::equal_to<KeyType>>
using AnimSystemUnorderedMap = AZStd::unordered_map<KeyType, MappedType, Hasher, EqualKey, AZStd::stateless_allocator>;
#define REGISTER_PARAM_TYPE(name) assert(!m_animParamEnumToStringMap.contains(AnimParamType::name)); \
m_animParamEnumToStringMap[AnimParamType::name] = AZ_STRINGIZE(name); \
m_animParamStringToEnumMap[AnimParamSystemString(AZ_STRINGIZE(name))] = AnimParamType::name;
// If you get an assert in this function, it means two node types have the same enum value.
void CMovieSystem::RegisterNodeTypes()
{
REGISTER_NODE_TYPE(Entity)
REGISTER_NODE_TYPE(Director)
REGISTER_NODE_TYPE(Camera)
REGISTER_NODE_TYPE(CVar)
REGISTER_NODE_TYPE(ScriptVar)
REGISTER_NODE_TYPE(Material)
REGISTER_NODE_TYPE(Event)
REGISTER_NODE_TYPE(Group)
REGISTER_NODE_TYPE(Layer)
REGISTER_NODE_TYPE(Comment)
REGISTER_NODE_TYPE(RadialBlur)
REGISTER_NODE_TYPE(ColorCorrection)
REGISTER_NODE_TYPE(DepthOfField)
REGISTER_NODE_TYPE(ScreenFader)
REGISTER_NODE_TYPE(Light)
REGISTER_NODE_TYPE(ShadowSetup)
REGISTER_NODE_TYPE(Alembic)
REGISTER_NODE_TYPE(GeomCache)
REGISTER_NODE_TYPE(Environment)
REGISTER_NODE_TYPE(AzEntity)
REGISTER_NODE_TYPE(Component)
}
// Serialization for anim nodes & param types
#define REGISTER_NODE_TYPE(name) assert(!g_animNodeEnumToStringMap.contains(AnimNodeType::name)); \
g_animNodeEnumToStringMap[AnimNodeType::name] = AZ_STRINGIZE(name); \
g_animNodeStringToEnumMap[AnimParamSystemString(AZ_STRINGIZE(name))] = AnimNodeType::name;
#define REGISTER_PARAM_TYPE(name) assert(!g_animParamEnumToStringMap.contains(AnimParamType::name)); \
g_animParamEnumToStringMap[AnimParamType::name] = AZ_STRINGIZE(name); \
g_animParamStringToEnumMap[AnimParamSystemString(AZ_STRINGIZE(name))] = AnimParamType::name;
namespace
// If you get an assert in this function, it means two param types have the same enum value.
void CMovieSystem::RegisterParamTypes()
{
AnimSystemUnorderedMap<AnimNodeType, AnimParamSystemString> g_animNodeEnumToStringMap;
AnimSystemOrderedMap<AnimParamSystemString, AnimNodeType, stl::less_stricmp<AnimParamSystemString>> g_animNodeStringToEnumMap;
AnimSystemUnorderedMap<AnimParamType, AnimParamSystemString> g_animParamEnumToStringMap;
AnimSystemOrderedMap<AnimParamSystemString, AnimParamType, stl::less_stricmp<AnimParamSystemString>> g_animParamStringToEnumMap;
// If you get an assert in this function, it means two node types have the same enum value.
void RegisterNodeTypes()
{
REGISTER_NODE_TYPE(Entity)
REGISTER_NODE_TYPE(Director)
REGISTER_NODE_TYPE(Camera)
REGISTER_NODE_TYPE(CVar)
REGISTER_NODE_TYPE(ScriptVar)
REGISTER_NODE_TYPE(Material)
REGISTER_NODE_TYPE(Event)
REGISTER_NODE_TYPE(Group)
REGISTER_NODE_TYPE(Layer)
REGISTER_NODE_TYPE(Comment)
REGISTER_NODE_TYPE(RadialBlur)
REGISTER_NODE_TYPE(ColorCorrection)
REGISTER_NODE_TYPE(DepthOfField)
REGISTER_NODE_TYPE(ScreenFader)
REGISTER_NODE_TYPE(Light)
REGISTER_NODE_TYPE(ShadowSetup)
REGISTER_NODE_TYPE(Alembic)
REGISTER_NODE_TYPE(GeomCache)
REGISTER_NODE_TYPE(Environment)
REGISTER_NODE_TYPE(AzEntity)
REGISTER_NODE_TYPE(Component)
}
// If you get an assert in this function, it means two param types have the same enum value.
void RegisterParamTypes()
{
REGISTER_PARAM_TYPE(FOV)
REGISTER_PARAM_TYPE(Position)
REGISTER_PARAM_TYPE(Rotation)
REGISTER_PARAM_TYPE(Scale)
REGISTER_PARAM_TYPE(Event)
REGISTER_PARAM_TYPE(Visibility)
REGISTER_PARAM_TYPE(Camera)
REGISTER_PARAM_TYPE(Animation)
REGISTER_PARAM_TYPE(Sound)
REGISTER_PARAM_TYPE(Sequence)
REGISTER_PARAM_TYPE(Console)
REGISTER_PARAM_TYPE(Music) ///@deprecated in 1.11, left in for legacy serialization
REGISTER_PARAM_TYPE(Float)
REGISTER_PARAM_TYPE(LookAt)
REGISTER_PARAM_TYPE(TrackEvent)
REGISTER_PARAM_TYPE(ShakeAmplitudeA)
REGISTER_PARAM_TYPE(ShakeAmplitudeB)
REGISTER_PARAM_TYPE(ShakeFrequencyA)
REGISTER_PARAM_TYPE(ShakeFrequencyB)
REGISTER_PARAM_TYPE(ShakeMultiplier)
REGISTER_PARAM_TYPE(ShakeNoise)
REGISTER_PARAM_TYPE(ShakeWorking)
REGISTER_PARAM_TYPE(ShakeAmpAMult)
REGISTER_PARAM_TYPE(ShakeAmpBMult)
REGISTER_PARAM_TYPE(ShakeFreqAMult)
REGISTER_PARAM_TYPE(ShakeFreqBMult)
REGISTER_PARAM_TYPE(DepthOfField)
REGISTER_PARAM_TYPE(FocusDistance)
REGISTER_PARAM_TYPE(FocusRange)
REGISTER_PARAM_TYPE(BlurAmount)
REGISTER_PARAM_TYPE(Capture)
REGISTER_PARAM_TYPE(TransformNoise)
REGISTER_PARAM_TYPE(TimeWarp)
REGISTER_PARAM_TYPE(FixedTimeStep)
REGISTER_PARAM_TYPE(NearZ)
REGISTER_PARAM_TYPE(Goto)
REGISTER_PARAM_TYPE(PositionX)
REGISTER_PARAM_TYPE(PositionY)
REGISTER_PARAM_TYPE(PositionZ)
REGISTER_PARAM_TYPE(RotationX)
REGISTER_PARAM_TYPE(RotationY)
REGISTER_PARAM_TYPE(RotationZ)
REGISTER_PARAM_TYPE(ScaleX)
REGISTER_PARAM_TYPE(ScaleY)
REGISTER_PARAM_TYPE(ScaleZ)
REGISTER_PARAM_TYPE(ColorR)
REGISTER_PARAM_TYPE(ColorG)
REGISTER_PARAM_TYPE(ColorB)
REGISTER_PARAM_TYPE(CommentText)
REGISTER_PARAM_TYPE(ScreenFader)
REGISTER_PARAM_TYPE(LightDiffuse)
REGISTER_PARAM_TYPE(LightRadius)
REGISTER_PARAM_TYPE(LightDiffuseMult)
REGISTER_PARAM_TYPE(LightHDRDynamic)
REGISTER_PARAM_TYPE(LightSpecularMult)
REGISTER_PARAM_TYPE(LightSpecPercentage)
REGISTER_PARAM_TYPE(MaterialDiffuse)
REGISTER_PARAM_TYPE(MaterialSpecular)
REGISTER_PARAM_TYPE(MaterialEmissive)
REGISTER_PARAM_TYPE(MaterialEmissiveIntensity)
REGISTER_PARAM_TYPE(MaterialOpacity)
REGISTER_PARAM_TYPE(MaterialSmoothness)
REGISTER_PARAM_TYPE(TimeRanges)
REGISTER_PARAM_TYPE(Physics)
REGISTER_PARAM_TYPE(GSMCache)
REGISTER_PARAM_TYPE(ShutterSpeed)
REGISTER_PARAM_TYPE(Physicalize)
REGISTER_PARAM_TYPE(PhysicsDriven)
REGISTER_PARAM_TYPE(SunLongitude)
REGISTER_PARAM_TYPE(SunLatitude)
REGISTER_PARAM_TYPE(MoonLongitude)
REGISTER_PARAM_TYPE(MoonLatitude)
REGISTER_PARAM_TYPE(ProceduralEyes)
}
REGISTER_PARAM_TYPE(FOV)
REGISTER_PARAM_TYPE(Position)
REGISTER_PARAM_TYPE(Rotation)
REGISTER_PARAM_TYPE(Scale)
REGISTER_PARAM_TYPE(Event)
REGISTER_PARAM_TYPE(Visibility)
REGISTER_PARAM_TYPE(Camera)
REGISTER_PARAM_TYPE(Animation)
REGISTER_PARAM_TYPE(Sound)
REGISTER_PARAM_TYPE(Sequence)
REGISTER_PARAM_TYPE(Console)
REGISTER_PARAM_TYPE(Music) ///@deprecated in 1.11, left in for legacy serialization
REGISTER_PARAM_TYPE(Float)
REGISTER_PARAM_TYPE(LookAt)
REGISTER_PARAM_TYPE(TrackEvent)
REGISTER_PARAM_TYPE(ShakeAmplitudeA)
REGISTER_PARAM_TYPE(ShakeAmplitudeB)
REGISTER_PARAM_TYPE(ShakeFrequencyA)
REGISTER_PARAM_TYPE(ShakeFrequencyB)
REGISTER_PARAM_TYPE(ShakeMultiplier)
REGISTER_PARAM_TYPE(ShakeNoise)
REGISTER_PARAM_TYPE(ShakeWorking)
REGISTER_PARAM_TYPE(ShakeAmpAMult)
REGISTER_PARAM_TYPE(ShakeAmpBMult)
REGISTER_PARAM_TYPE(ShakeFreqAMult)
REGISTER_PARAM_TYPE(ShakeFreqBMult)
REGISTER_PARAM_TYPE(DepthOfField)
REGISTER_PARAM_TYPE(FocusDistance)
REGISTER_PARAM_TYPE(FocusRange)
REGISTER_PARAM_TYPE(BlurAmount)
REGISTER_PARAM_TYPE(Capture)
REGISTER_PARAM_TYPE(TransformNoise)
REGISTER_PARAM_TYPE(TimeWarp)
REGISTER_PARAM_TYPE(FixedTimeStep)
REGISTER_PARAM_TYPE(NearZ)
REGISTER_PARAM_TYPE(Goto)
REGISTER_PARAM_TYPE(PositionX)
REGISTER_PARAM_TYPE(PositionY)
REGISTER_PARAM_TYPE(PositionZ)
REGISTER_PARAM_TYPE(RotationX)
REGISTER_PARAM_TYPE(RotationY)
REGISTER_PARAM_TYPE(RotationZ)
REGISTER_PARAM_TYPE(ScaleX)
REGISTER_PARAM_TYPE(ScaleY)
REGISTER_PARAM_TYPE(ScaleZ)
REGISTER_PARAM_TYPE(ColorR)
REGISTER_PARAM_TYPE(ColorG)
REGISTER_PARAM_TYPE(ColorB)
REGISTER_PARAM_TYPE(CommentText)
REGISTER_PARAM_TYPE(ScreenFader)
REGISTER_PARAM_TYPE(LightDiffuse)
REGISTER_PARAM_TYPE(LightRadius)
REGISTER_PARAM_TYPE(LightDiffuseMult)
REGISTER_PARAM_TYPE(LightHDRDynamic)
REGISTER_PARAM_TYPE(LightSpecularMult)
REGISTER_PARAM_TYPE(LightSpecPercentage)
REGISTER_PARAM_TYPE(MaterialDiffuse)
REGISTER_PARAM_TYPE(MaterialSpecular)
REGISTER_PARAM_TYPE(MaterialEmissive)
REGISTER_PARAM_TYPE(MaterialEmissiveIntensity)
REGISTER_PARAM_TYPE(MaterialOpacity)
REGISTER_PARAM_TYPE(MaterialSmoothness)
REGISTER_PARAM_TYPE(TimeRanges)
REGISTER_PARAM_TYPE(Physics)
REGISTER_PARAM_TYPE(GSMCache)
REGISTER_PARAM_TYPE(ShutterSpeed)
REGISTER_PARAM_TYPE(Physicalize)
REGISTER_PARAM_TYPE(PhysicsDriven)
REGISTER_PARAM_TYPE(SunLongitude)
REGISTER_PARAM_TYPE(SunLatitude)
REGISTER_PARAM_TYPE(MoonLongitude)
REGISTER_PARAM_TYPE(MoonLatitude)
REGISTER_PARAM_TYPE(ProceduralEyes)
}
namespace Internal
@@ -1666,16 +1645,16 @@ void CMovieSystem::SerializeNodeType(AnimNodeType& animNodeType, XmlNodeRef& xml
XmlString nodeTypeString;
if (xmlNode->getAttr(kType, nodeTypeString))
{
assert(g_animNodeStringToEnumMap.find(nodeTypeString.c_str()) != g_animNodeStringToEnumMap.end());
animNodeType = stl::find_in_map(g_animNodeStringToEnumMap, nodeTypeString.c_str(), AnimNodeType::Invalid);
assert(m_animNodeStringToEnumMap.find(nodeTypeString.c_str()) != m_animNodeStringToEnumMap.end());
animNodeType = stl::find_in_map(m_animNodeStringToEnumMap, nodeTypeString.c_str(), AnimNodeType::Invalid);
}
}
}
else
{
const char* pTypeString = "Invalid";
assert(g_animNodeEnumToStringMap.find(animNodeType) != g_animNodeEnumToStringMap.end());
pTypeString = g_animNodeEnumToStringMap[animNodeType].c_str();
assert(m_animNodeEnumToStringMap.find(animNodeType) != m_animNodeEnumToStringMap.end());
pTypeString = m_animNodeEnumToStringMap[animNodeType].c_str();
xmlNode->setAttr(kType, pTypeString);
}
}
@@ -1744,8 +1723,8 @@ void CMovieSystem::LoadParamTypeFromXml(CAnimParamType& animParamType, const Xml
animParamType.m_name = virtualPropertyValue;
}
assert(g_animParamStringToEnumMap.find(paramTypeString.c_str()) != g_animParamStringToEnumMap.end());
animParamType.m_type = stl::find_in_map(g_animParamStringToEnumMap, paramTypeString.c_str(), AnimParamType::Invalid);
assert(m_animParamStringToEnumMap.find(paramTypeString.c_str()) != m_animParamStringToEnumMap.end());
animParamType.m_type = stl::find_in_map(m_animParamStringToEnumMap, paramTypeString.c_str(), AnimParamType::Invalid);
}
}
}
@@ -1775,8 +1754,8 @@ void CMovieSystem::SaveParamTypeToXml(const CAnimParamType& animParamType, XmlNo
xmlNode->setAttr(CAnimParamTypeXmlNames::kVirtualPropertyName, animParamType.m_name.c_str());
}
assert(g_animParamEnumToStringMap.find(animParamType.m_type) != g_animParamEnumToStringMap.end());
pTypeString = g_animParamEnumToStringMap[animParamType.m_type].c_str();
assert(m_animParamEnumToStringMap.find(animParamType.m_type) != m_animParamEnumToStringMap.end());
pTypeString = m_animParamEnumToStringMap[animParamType.m_type].c_str();
}
xmlNode->setAttr(kParamType, pTypeString);
@@ -1809,9 +1788,9 @@ const char* CMovieSystem::GetParamTypeName(const CAnimParamType& animParamType)
}
else
{
if (g_animParamEnumToStringMap.find(animParamType.m_type) != g_animParamEnumToStringMap.end())
if (m_animParamEnumToStringMap.contains(animParamType.m_type))
{
return g_animParamEnumToStringMap[animParamType.m_type].c_str();
return m_animParamEnumToStringMap[animParamType.m_type].c_str();
}
}
@@ -1973,13 +1952,13 @@ void CLightAnimWrapper::RemoveCachedLightAnim(const char* name)
//////////////////////////////////////////////////////////////////////////
AnimNodeType CMovieSystem::GetNodeTypeFromString(const char* pString) const
{
return stl::find_in_map(g_animNodeStringToEnumMap, pString, AnimNodeType::Invalid);
return stl::find_in_map(m_animNodeStringToEnumMap, pString, AnimNodeType::Invalid);
}
//////////////////////////////////////////////////////////////////////////
CAnimParamType CMovieSystem::GetParamTypeFromString(const char* pString) const
{
const AnimParamType paramType = stl::find_in_map(g_animParamStringToEnumMap, pString, AnimParamType::Invalid);
const AnimParamType paramType = stl::find_in_map(m_animParamStringToEnumMap, pString, AnimParamType::Invalid);
if (paramType != AnimParamType::Invalid)
{
+19 -1
View File
@@ -18,6 +18,7 @@
#include <CryCommon/TimeValue.h>
#include <CryCommon/StaticInstance.h>
#include <CryCommon/StlUtils.h>
#include "IMovieSystem.h"
#include "IShader.h"
@@ -192,7 +193,7 @@ public:
void SaveParamTypeToXml(const CAnimParamType& animParamType, XmlNodeRef& xmlNode) override;
void SerializeParamType(CAnimParamType& animParamType, XmlNodeRef& xmlNode, bool bLoading, const uint version) override;
static const char* GetParamTypeName(const CAnimParamType& animParamType);
const char* GetParamTypeName(const CAnimParamType& animParamType);
void OnCameraCut();
@@ -290,6 +291,23 @@ private:
void ShowPlayedSequencesDebug();
using AnimParamSystemString = AZStd::string;
template <typename KeyType, typename MappedType, typename Compare = stl::less_stricmp<KeyType>>
using AnimSystemOrderedMap = AZStd::map<KeyType, MappedType, Compare>;
template <typename KeyType, typename MappedType, typename Hasher = AZStd::hash<KeyType>, typename EqualKey = AZStd::equal_to<>>
using AnimSystemUnorderedMap = AZStd::unordered_map<KeyType, MappedType, Hasher, EqualKey>;
AnimSystemUnorderedMap<AnimNodeType, AnimParamSystemString> m_animNodeEnumToStringMap;
AnimSystemOrderedMap<AnimParamSystemString, AnimNodeType> m_animNodeStringToEnumMap;
AnimSystemUnorderedMap<AnimParamType, AnimParamSystemString> m_animParamEnumToStringMap;
AnimSystemOrderedMap<AnimParamSystemString, AnimParamType> m_animParamStringToEnumMap;
void RegisterNodeTypes();
void RegisterParamTypes();
public:
static float m_mov_cameraPrecacheTime;
#if !defined(_RELEASE)
@@ -33,7 +33,7 @@ namespace TextureAtlasNamespace
struct hash_case_insensitive : public AZStd::hash<AZStd::string>
{
AZ_TYPE_INFO(hash_case_insensitive, "{FE0F4349-D80D-4286-8874-733966A32B29}");
inline result_type operator()(const AZStd::string& value) const
inline size_t operator()(const AZStd::string& value) const
{
AZStd::string lowerStr = value;
AZStd::to_lower(lowerStr.begin(), lowerStr.end());