From 8884227fe6cdf0dd5235ac041e68247229d287cd Mon Sep 17 00:00:00 2001 From: Chris Burel Date: Mon, 24 May 2021 12:03:11 -0700 Subject: [PATCH] Remove MCore::Array This translates all usages of MCore::Array to AZStd::vector. It is designed to be as minimal of a change as possible (no changing to range-for loops or other C++11 stuff). We can decide to submit this wholesale, or submit it to a separate branch that we can then integrate individual files from once we're ready to do a specific class's transition. It does not completely solve the `uint32`->`size_t` transition. One important finding from doing this: `MCore::Array` uses a `memcpy` when it reallocates. `AZStd::vector` will use the contained type's copy or move constructor, per element. This is a significant change in behavior. If you have type, `SomeStruct` that defines a destructor, that type is copyable and not movable. So if you have a `MCore::Array`, and you call `Add(); Add(); Add()`, that reallocates 3 times, copying the contents using `memcpy`, and never invokes `SomeStruct`'s copy constructor or destructor. Translating that to `AZStd::vector` and calling `push_back(); push_back(); push_back();` will still reallocate 3 times, but it sees that `SomeStruct` is non-movable, and uses the copy constructor to make the copies, and then the destructor on the previous values. This call to the destructor wasn't there before, and can cause things to be deleted that weren't before. The solution to this is to make that struct be a move-only type. Where possible, this was done by changing that type to use `AZStd::unique_ptr` instead of a raw pointer, to get the proper move behavior. Where that is not possible (types that inherit from `MCore::MemoryObject`), a hand-written move constructor was created. In general: GetLength() becomes size() GetMaxLength() becomes capacity() GetIsEmpty() becomes empty() Reserve() becomes reserve() ReserveExact() becomes reserve() Resize() becomes resize() ResizeFast() becomes resize_no_construct() Add() becomes emplace_back() AddExact() becomes emplace_back() AddEmpty() becomes emplace_back() AddEmptyExact() becomes emplace_back() GetPtr() becomes data() GetItem() becomes at() Shrink() becomes shrink_to_fit() GetFirst() becomes front() GetLast() becomes back() Remove() becomes erase() RemoveFirst() becomes erase() RemoveLast() becomes pop_back() RemoveByValue() becomes if (const auto it = AZStd::find(...); it != end(container)) container.erase(it); Insert() becomes emplace() Swap() becomes swap() Clear(true) becomes clear(); shrink_to_fit() Clear() becomes clear(); shrink_to_fit() Clear(false) becomes clear() Swap() becomes swap() Find() becomes AZStd::find MoveElements() becomes AZStd::move SetMemoryCategory() is removed Signed-off-by: Chris Burel --- .../CommandSystem/Source/ActorCommands.h | 2 +- .../Source/AnimGraphNodeCommands.cpp | 4 +- .../Source/AnimGraphParameterCommands.cpp | 2 +- .../Source/AnimGraphParameterCommands.h | 2 +- .../Source/MotionEventCommands.cpp | 6 +- .../Source/MotionEventCommands.h | 2 +- .../Source/SelectionCommands.cpp | 6 +- .../CommandSystem/Source/SelectionCommands.h | 2 +- .../Exporters/ExporterLib/Exporter/Exporter.h | 5 +- .../ExporterLib/Exporter/MaterialExport.cpp | 10 +- .../ExporterLib/Exporter/NodeExport.cpp | 24 +- .../EMotionFX/Rendering/Common/RenderUtil.cpp | 22 +- .../EMotionFX/Rendering/Common/RenderUtil.h | 20 +- .../Rendering/OpenGL2/Source/GBuffer.cpp | 2 +- .../Rendering/OpenGL2/Source/GLActor.cpp | 33 +- .../Rendering/OpenGL2/Source/GLRenderUtil.cpp | 17 +- .../Rendering/OpenGL2/Source/GLRenderUtil.h | 4 +- .../Rendering/OpenGL2/Source/GLSLShader.cpp | 53 +- .../Rendering/OpenGL2/Source/GLSLShader.h | 18 +- .../OpenGL2/Source/GraphicsManager.cpp | 6 +- .../OpenGL2/Source/GraphicsManager.h | 2 +- .../Rendering/OpenGL2/Source/Material.h | 2 +- .../OpenGL2/Source/PostProcessShader.cpp | 2 +- .../Rendering/OpenGL2/Source/ShaderCache.cpp | 15 +- .../OpenGL2/Source/StandardMaterial.cpp | 12 +- .../OpenGL2/Source/StandardMaterial.h | 2 +- .../Rendering/OpenGL2/Source/TextureCache.cpp | 19 +- .../Rendering/OpenGL2/Source/TextureCache.h | 4 +- .../Rendering/OpenGL2/Source/glactor.h | 14 +- .../Rendering/OpenGL2/Source/shadercache.h | 4 +- .../EMotionFX/Code/EMotionFX/Source/Actor.cpp | 182 ++-- Gems/EMotionFX/Code/EMotionFX/Source/Actor.h | 59 +- .../Code/EMotionFX/Source/ActorInstance.cpp | 68 +- .../Code/EMotionFX/Source/ActorInstance.h | 14 +- .../Code/EMotionFX/Source/ActorManager.cpp | 43 +- .../Code/EMotionFX/Source/ActorManager.h | 12 +- .../Code/EMotionFX/Source/AnimGraph.cpp | 20 +- .../Code/EMotionFX/Source/AnimGraph.h | 8 +- .../Source/AnimGraphGameControllerSettings.h | 8 +- .../EMotionFX/Source/AnimGraphInstance.cpp | 44 +- .../Code/EMotionFX/Source/AnimGraphInstance.h | 6 +- .../Code/EMotionFX/Source/AnimGraphManager.h | 2 +- .../Code/EMotionFX/Source/AnimGraphNode.cpp | 12 +- .../Code/EMotionFX/Source/AnimGraphNode.h | 6 +- .../Code/EMotionFX/Source/AnimGraphObject.cpp | 4 +- .../Code/EMotionFX/Source/AnimGraphObject.h | 4 +- .../EMotionFX/Source/AnimGraphPosePool.cpp | 36 +- .../Code/EMotionFX/Source/AnimGraphPosePool.h | 12 +- .../Source/AnimGraphRefCountedDataPool.cpp | 38 +- .../Source/AnimGraphRefCountedDataPool.h | 12 +- .../Source/AnimGraphReferenceNode.cpp | 2 +- .../EMotionFX/Source/AnimGraphReferenceNode.h | 2 +- .../Source/AnimGraphStateMachine.cpp | 2 +- .../EMotionFX/Source/AnimGraphStateMachine.h | 2 +- .../Source/AnimGraphStateTransition.cpp | 4 +- .../Source/AnimGraphStateTransition.h | 2 +- .../EMotionFX/Source/DualQuatSkinDeformer.h | 2 +- .../EMotionFX/Source/EMotionFXManager.cpp | 13 +- .../Code/EMotionFX/Source/EMotionFXManager.h | 8 +- .../Code/EMotionFX/Source/EventManager.h | 2 +- .../Source/Importer/ChunkProcessors.cpp | 14 +- .../Source/Importer/ChunkProcessors.h | 4 +- .../EMotionFX/Source/Importer/Importer.cpp | 75 +- .../Code/EMotionFX/Source/Importer/Importer.h | 20 +- .../EMotionFX/Source/KeyTrackLinearDynamic.h | 11 +- .../Source/KeyTrackLinearDynamic.inl | 14 - Gems/EMotionFX/Code/EMotionFX/Source/Mesh.cpp | 112 ++- Gems/EMotionFX/Code/EMotionFX/Source/Mesh.h | 18 +- Gems/EMotionFX/Code/EMotionFX/Source/Mesh.inl | 8 +- .../EMotionFX/Source/MeshDeformerStack.cpp | 40 +- .../Code/EMotionFX/Source/MeshDeformerStack.h | 6 +- .../EMotionFX/Source/MorphMeshDeformer.cpp | 21 +- .../Code/EMotionFX/Source/MorphMeshDeformer.h | 4 +- .../Code/EMotionFX/Source/MorphSetup.cpp | 41 +- .../Code/EMotionFX/Source/MorphSetup.h | 6 +- .../EMotionFX/Source/MorphSetupInstance.cpp | 5 +- .../EMotionFX/Source/MorphSetupInstance.h | 6 +- .../Code/EMotionFX/Source/MorphTarget.cpp | 7 +- .../Code/EMotionFX/Source/MorphTarget.h | 5 - .../EMotionFX/Source/MorphTargetStandard.cpp | 25 +- .../EMotionFX/Source/MorphTargetStandard.h | 6 +- .../Code/EMotionFX/Source/MotionGroup.cpp | 277 ------ .../Code/EMotionFX/Source/MotionInstance.cpp | 4 +- .../Code/EMotionFX/Source/MotionInstance.h | 2 +- .../EMotionFX/Source/MotionInstancePool.cpp | 64 +- .../EMotionFX/Source/MotionInstancePool.h | 6 +- .../EMotionFX/Source/MotionLayerSystem.cpp | 43 +- .../Code/EMotionFX/Source/MotionLayerSystem.h | 4 +- .../Code/EMotionFX/Source/MotionManager.cpp | 57 +- .../Code/EMotionFX/Source/MotionManager.h | 10 +- .../Code/EMotionFX/Source/MotionQueue.cpp | 15 +- .../Code/EMotionFX/Source/MotionQueue.h | 6 +- .../Code/EMotionFX/Source/MotionSystem.cpp | 50 +- .../Code/EMotionFX/Source/MotionSystem.h | 8 +- .../EMotionFX/Source/MultiThreadScheduler.cpp | 33 +- .../EMotionFX/Source/MultiThreadScheduler.h | 14 +- Gems/EMotionFX/Code/EMotionFX/Source/Node.cpp | 49 +- Gems/EMotionFX/Code/EMotionFX/Source/Node.h | 12 +- .../Code/EMotionFX/Source/NodeMap.cpp | 28 +- .../EMotionFX/Code/EMotionFX/Source/NodeMap.h | 6 +- .../Code/EMotionFX/Source/Recorder.cpp | 121 ++- .../Code/EMotionFX/Source/Recorder.h | 109 +-- .../Source/RepositioningLayerPass.cpp | 1 - .../EMotionFX/Source/RepositioningLayerPass.h | 4 +- .../Code/EMotionFX/Source/Skeleton.cpp | 34 +- .../Code/EMotionFX/Source/Skeleton.h | 10 +- .../EMotionFX/Source/StandardMaterial.cpp | 31 +- .../Code/EMotionFX/Source/StandardMaterial.h | 4 +- .../Code/EMotionFX/Source/SubMesh.cpp | 19 +- .../EMotionFX/Code/EMotionFX/Source/SubMesh.h | 12 +- .../Code/EMotionFX/Source/ThreadData.h | 2 +- .../EMStudioSDK/Source/EMStudioManager.cpp | 9 +- .../EMStudioSDK/Source/EMStudioManager.h | 4 +- .../EMStudioSDK/Source/FileManager.h | 2 +- .../EMStudioSDK/Source/MainWindow.cpp | 15 +- .../EMStudioSDK/Source/MainWindow.h | 6 +- .../Source/NodeHierarchyWidget.cpp | 37 +- .../EMStudioSDK/Source/NodeHierarchyWidget.h | 11 +- .../Source/NodeSelectionWindow.cpp | 4 +- .../EMStudioSDK/Source/NodeSelectionWindow.h | 6 +- .../Source/NotificationWindowManager.cpp | 19 +- .../Source/NotificationWindowManager.h | 8 +- .../Source/RenderPlugin/RenderPlugin.cpp | 55 +- .../Source/RenderPlugin/RenderPlugin.h | 6 +- .../RenderPlugin/RenderUpdateCallback.cpp | 10 +- .../Source/RenderPlugin/RenderWidget.cpp | 22 +- .../Source/RenderPlugin/RenderWidget.h | 8 +- .../Source/AnimGraph/AnimGraphPlugin.cpp | 6 +- .../Source/AnimGraph/AnimGraphPlugin.h | 2 +- .../AnimGraph/BlendGraphWidgetCallback.cpp | 409 --------- .../AnimGraph/BlendGraphWidgetCallback.h | 53 -- .../AnimGraph/BlendNodeSelectionWindow.h | 2 +- .../Source/AnimGraph/BlendTreeVisualNode.cpp | 13 +- .../Source/AnimGraph/GameControllerWindow.cpp | 24 +- .../Source/AnimGraph/GameControllerWindow.h | 8 +- .../Source/AnimGraph/GraphNode.cpp | 64 +- .../Source/AnimGraph/GraphNode.h | 23 +- .../Source/AnimGraph/NodeGraph.cpp | 26 +- .../Source/AnimGraph/NodeGroupWindow.cpp | 43 +- .../Source/AnimGraph/NodeGroupWindow.h | 11 +- .../AnimGraph/ParameterSelectionWindow.h | 2 +- .../Source/AnimGraph/StateGraphNode.cpp | 5 +- .../Attachments/AttachmentNodesWindow.cpp | 10 +- .../Attachments/AttachmentNodesWindow.h | 2 +- .../Source/Attachments/AttachmentsWindow.cpp | 6 +- .../Source/Attachments/AttachmentsWindow.h | 2 +- .../Source/LogWindow/LogWindowCallback.cpp | 13 +- .../MotionSetManagementWindow.cpp | 4 +- .../MotionSetManagementWindow.h | 2 +- .../MotionWindow/MotionExtractionWindow.cpp | 4 +- .../MotionWindow/MotionExtractionWindow.h | 2 +- .../Source/NodeGroups/NodeGroupWidget.cpp | 20 +- .../Source/NodeGroups/NodeGroupWidget.h | 2 +- .../Source/NodeWindow/NodeWindowPlugin.cpp | 4 +- .../SceneManager/ActorPropertiesWindow.cpp | 24 - .../SceneManager/ActorPropertiesWindow.h | 1 - .../Source/SceneManager/MirrorSetupWindow.cpp | 2 +- .../Source/SceneManager/MirrorSetupWindow.h | 4 +- .../Source/TimeView/TimeViewPlugin.cpp | 54 +- .../Source/TimeView/TimeViewPlugin.h | 14 +- .../Source/TimeView/TrackDataHeaderWidget.h | 2 +- .../Source/TimeView/TrackDataWidget.cpp | 52 +- .../Source/TimeView/TrackDataWidget.h | 6 +- .../Source/TimeView/TrackHeaderWidget.cpp | 2 +- Gems/EMotionFX/Code/MCore/Source/Array.h | 799 ------------------ Gems/EMotionFX/Code/MCore/Source/Config.h | 19 +- Gems/EMotionFX/Code/MCore/Source/HashTable.h | 239 ------ .../EMotionFX/Code/MCore/Source/HashTable.inl | 338 -------- .../Code/MCore/Source/LogManager.cpp | 68 +- Gems/EMotionFX/Code/MCore/Source/LogManager.h | 12 +- .../Code/MCore/Source/MCoreCommandManager.h | 2 +- Gems/EMotionFX/Code/MCore/mcore_files.cmake | 3 - .../Code/MysticQt/Source/DialogStack.cpp | 126 ++- .../Code/MysticQt/Source/DialogStack.h | 33 +- .../Code/MysticQt/Source/MysticQtManager.cpp | 16 +- .../Code/MysticQt/Source/MysticQtManager.h | 4 +- .../Platform/Windows/platform_windows.cmake | 4 + .../Source/Editor/ActorJointBrowseEdit.cpp | 18 - .../Code/Source/Editor/ActorJointBrowseEdit.h | 3 - .../PropertyWidgets/ActorGoalNodeHandler.cpp | 10 +- .../Code/Source/Editor/SkeletonModel.cpp | 4 +- .../Tests/AnimGraphParameterCommandsTests.cpp | 1 - .../Code/Tests/BoolLogicNodeTests.cpp | 2 +- Gems/EMotionFX/Code/Tests/Mocks/AnimGraph.h | 2 +- .../Code/Tests/Mocks/AnimGraphInstance.h | 2 +- Gems/EMotionFX/Code/Tests/Mocks/Node.h | 2 +- .../EMotionFX/Code/Tests/SkeletalLODTests.cpp | 4 +- .../Code/Tests/UI/LODSkinnedMeshTests.cpp | 1 - .../Vector2ToVector3CompatibilityTests.cpp | 2 +- 189 files changed, 1489 insertions(+), 3798 deletions(-) delete mode 100644 Gems/EMotionFX/Code/EMotionFX/Source/MotionGroup.cpp delete mode 100644 Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/BlendGraphWidgetCallback.cpp delete mode 100644 Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/BlendGraphWidgetCallback.h delete mode 100644 Gems/EMotionFX/Code/MCore/Source/Array.h delete mode 100644 Gems/EMotionFX/Code/MCore/Source/HashTable.h delete mode 100644 Gems/EMotionFX/Code/MCore/Source/HashTable.inl diff --git a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ActorCommands.h b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ActorCommands.h index 75d92d5f27..eec9f7a5c5 100644 --- a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ActorCommands.h +++ b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/ActorCommands.h @@ -25,7 +25,7 @@ namespace CommandSystem AZStd::string mOldAttachmentNodes; AZStd::string mOldExcludedFromBoundsNodes; AZStd::string mOldName; - MCore::Array mOldMirrorSetup; + AZStd::vector mOldMirrorSetup; bool mOldDirtyFlag; void SetIsAttachmentNode(EMotionFX::Actor* actor, bool isAttachmentNode); diff --git a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/AnimGraphNodeCommands.cpp b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/AnimGraphNodeCommands.cpp index fe41312701..ed871fc03f 100644 --- a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/AnimGraphNodeCommands.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/AnimGraphNodeCommands.cpp @@ -1204,10 +1204,10 @@ namespace CommandSystem if (parentNode) { // Gather the number of nodes with the same type as the one we're trying to remove. - MCore::Array outNodes; + AZStd::vector outNodes; const AZ::TypeId nodeType = azrtti_typeid(node); parentNode->CollectChildNodesOfType(nodeType, &outNodes); - const uint32 numTypeNodes = outNodes.GetLength(); + const uint32 numTypeNodes = outNodes.size(); // Gather the number of already removed nodes with the same type as the one we're trying to remove. const size_t numTotalDeletedNodes = nodeList.size(); diff --git a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/AnimGraphParameterCommands.cpp b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/AnimGraphParameterCommands.cpp index 41a6a26b89..38a545465b 100644 --- a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/AnimGraphParameterCommands.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/AnimGraphParameterCommands.cpp @@ -865,7 +865,7 @@ namespace CommandSystem parameter->GetName().c_str(), parameterContents.c_str()); - if (insertAtIndex != MCORE_INVALIDINDEX32) + if (insertAtIndex != InvalidIndex32) { outResult += AZStd::string::format(" -index \"%i\"", insertAtIndex); } diff --git a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/AnimGraphParameterCommands.h b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/AnimGraphParameterCommands.h index b70e8d24d2..8b55130677 100644 --- a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/AnimGraphParameterCommands.h +++ b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/AnimGraphParameterCommands.h @@ -81,6 +81,6 @@ namespace CommandSystem COMMANDSYSTEM_API void ClearParametersCommand(EMotionFX::AnimGraph* animGraph, MCore::CommandGroup* commandGroup = nullptr); // Construct the create parameter command string using the the given information. - COMMANDSYSTEM_API void ConstructCreateParameterCommand(AZStd::string& outResult, EMotionFX::AnimGraph* animGraph, const EMotionFX::Parameter* parameter, uint32 insertAtIndex = MCORE_INVALIDINDEX32); + COMMANDSYSTEM_API void ConstructCreateParameterCommand(AZStd::string& outResult, EMotionFX::AnimGraph* animGraph, const EMotionFX::Parameter* parameter, uint32 insertAtIndex = InvalidIndex32); } // namespace CommandSystem diff --git a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/MotionEventCommands.cpp b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/MotionEventCommands.cpp index 8ee207713c..76ba6f37b7 100644 --- a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/MotionEventCommands.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/MotionEventCommands.cpp @@ -1178,7 +1178,7 @@ namespace CommandSystem // remove motion event - void CommandHelperRemoveMotionEvents(uint32 motionID, const char* trackName, const MCore::Array& eventNumbers, MCore::CommandGroup* commandGroup) + void CommandHelperRemoveMotionEvents(uint32 motionID, const char* trackName, const AZStd::vector& eventNumbers, MCore::CommandGroup* commandGroup) { // find the motion by id EMotionFX::Motion* motion = EMotionFX::GetMotionManager().FindMotionByID(motionID); @@ -1191,7 +1191,7 @@ namespace CommandSystem MCore::CommandGroup internalCommandGroup("Remove motion events"); // get the number of events to remove and iterate through them - const int32 numEvents = eventNumbers.GetLength(); + const int32 numEvents = eventNumbers.size(); for (int32 i = 0; i < numEvents; ++i) { // remove the events from back to front @@ -1221,7 +1221,7 @@ namespace CommandSystem // remove motion event - void CommandHelperRemoveMotionEvents(const char* trackName, const MCore::Array& eventNumbers, MCore::CommandGroup* commandGroup) + void CommandHelperRemoveMotionEvents(const char* trackName, const AZStd::vector& eventNumbers, MCore::CommandGroup* commandGroup) { EMotionFX::Motion* motion = GetCommandManager()->GetCurrentSelection().GetSingleMotion(); if (motion == nullptr) diff --git a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/MotionEventCommands.h b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/MotionEventCommands.h index 30caae2713..269a0322c0 100644 --- a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/MotionEventCommands.h +++ b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/MotionEventCommands.h @@ -222,6 +222,6 @@ namespace CommandSystem void COMMANDSYSTEM_API CommandHelperAddMotionEvent(const char* trackName, float startTime, float endTime, const EMotionFX::EventDataSet& eventDatas = EMotionFX::EventDataSet {}, MCore::CommandGroup* commandGroup = nullptr); void COMMANDSYSTEM_API CommandHelperRemoveMotionEvent(const char* trackName, uint32 eventNr, MCore::CommandGroup* commandGroup = nullptr); void COMMANDSYSTEM_API CommandHelperRemoveMotionEvent(uint32 motionID, const char* trackName, uint32 eventNr, MCore::CommandGroup* commandGroup = nullptr); - void COMMANDSYSTEM_API CommandHelperRemoveMotionEvents(const char* trackName, const MCore::Array& eventNumbers, MCore::CommandGroup* commandGroup = nullptr); + void COMMANDSYSTEM_API CommandHelperRemoveMotionEvents(const char* trackName, const AZStd::vector& eventNumbers, MCore::CommandGroup* commandGroup = nullptr); void COMMANDSYSTEM_API CommandHelperMotionEventTrackChanged(uint32 eventNr, float startTime, float endTime, const char* oldTrackName, const char* newTrackName); } // namespace CommandSystem diff --git a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/SelectionCommands.cpp b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/SelectionCommands.cpp index 7f0fcfa9d0..f6d03d2983 100644 --- a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/SelectionCommands.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/SelectionCommands.cpp @@ -33,10 +33,10 @@ namespace CommandSystem : MCore::Command(s_toggleLockSelectionCmdName, orgCommand) { } - void SelectActorInstancesUsingCommands(const MCore::Array& selectedActorInstances) + void SelectActorInstancesUsingCommands(const AZStd::vector& selectedActorInstances) { SelectionList& selection = GetCommandManager()->GetCurrentSelection(); - const uint32 numSelectedActorInstances = selectedActorInstances.GetLength(); + const uint32 numSelectedActorInstances = selectedActorInstances.size(); // check if the current selection is equal to the desired actor instances selection list bool nothingChanged = true; @@ -52,7 +52,7 @@ namespace CommandSystem for (uint32 i = 0; i < selection.GetNumSelectedActorInstances(); ++i) { EMotionFX::ActorInstance* actorInstance = selection.GetActorInstance(i); - if (selectedActorInstances.Find(actorInstance) == MCORE_INVALIDINDEX32) + if (AZStd::find(begin(selectedActorInstances), end(selectedActorInstances), actorInstance) == end(selectedActorInstances)) { nothingChanged = false; break; diff --git a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/SelectionCommands.h b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/SelectionCommands.h index d48bc3d3b6..0c1fad6588 100644 --- a/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/SelectionCommands.h +++ b/Gems/EMotionFX/Code/EMotionFX/CommandSystem/Source/SelectionCommands.h @@ -44,7 +44,7 @@ public: MCORE_DEFINECOMMAND_1_END // helper functions - void COMMANDSYSTEM_API SelectActorInstancesUsingCommands(const MCore::Array& selectedActorInstances); + void COMMANDSYSTEM_API SelectActorInstancesUsingCommands(const AZStd::vector& selectedActorInstances); bool COMMANDSYSTEM_API CheckIfHasMotionSelectionParameter(const MCore::CommandLine& parameters); bool COMMANDSYSTEM_API CheckIfHasAnimGraphSelectionParameter(const MCore::CommandLine& parameters); bool COMMANDSYSTEM_API CheckIfHasActorSelectionParameter(const MCore::CommandLine& parameters, bool ignoreInstanceParameters = false); diff --git a/Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/Exporter/Exporter.h b/Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/Exporter/Exporter.h index e302f3ffe2..09c0646509 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/Exporter/Exporter.h +++ b/Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/Exporter/Exporter.h @@ -11,7 +11,6 @@ #include #include #include -#include #include #include #include @@ -100,9 +99,9 @@ namespace ExporterLib // nodes void SaveNodes(MCore::Stream* file, EMotionFX::Actor* actor, MCore::Endian::EEndianType targetEndianType); void SaveNodeGroup(MCore::Stream* file, EMotionFX::NodeGroup* nodeGroup, MCore::Endian::EEndianType targetEndianType); - void SaveNodeGroups(MCore::Stream* file, const MCore::Array& nodeGroups, MCore::Endian::EEndianType targetEndianType); + void SaveNodeGroups(MCore::Stream* file, const AZStd::vector& nodeGroups, MCore::Endian::EEndianType targetEndianType); void SaveNodeGroups(MCore::Stream* file, EMotionFX::Actor* actor, MCore::Endian::EEndianType targetEndianType); - void SaveNodeMotionSources(MCore::Stream* file, EMotionFX::Actor* actor, MCore::Array* mirrorInfo, MCore::Endian::EEndianType targetEndianType); + void SaveNodeMotionSources(MCore::Stream* file, EMotionFX::Actor* actor, AZStd::vector* mirrorInfo, MCore::Endian::EEndianType targetEndianType); void SaveAttachmentNodes(MCore::Stream* file, EMotionFX::Actor* actor, MCore::Endian::EEndianType targetEndianType); void SaveAttachmentNodes(MCore::Stream* file, EMotionFX::Actor* actor, const AZStd::vector& attachmentNodes, MCore::Endian::EEndianType targetEndianType); diff --git a/Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/Exporter/MaterialExport.cpp b/Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/Exporter/MaterialExport.cpp index 4adee9af84..8bd005af6c 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/Exporter/MaterialExport.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/Exporter/MaterialExport.cpp @@ -199,10 +199,10 @@ namespace ExporterLib // save the given materials - void SaveMaterials(MCore::Stream* file, MCore::Array& materials, uint32 lodLevel, MCore::Endian::EEndianType targetEndianType) + void SaveMaterials(MCore::Stream* file, AZStd::vector& materials, uint32 lodLevel, MCore::Endian::EEndianType targetEndianType) { // get the number of materials - const uint32 numMaterials = materials.GetLength(); + const uint32 numMaterials = materials.size(); // chunk header EMotionFX::FileFormat::FileChunk chunkHeader; @@ -269,15 +269,15 @@ namespace ExporterLib const uint32 numMaterials = actor->GetNumMaterials(lodLevel); // create our materials array and reserve some elements - MCore::Array materials; - materials.Reserve(numMaterials); + AZStd::vector materials; + materials.reserve(numMaterials); // iterate through the materials for (uint32 j = 0; j < numMaterials; j++) { // get the base material EMotionFX::Material* baseMaterial = actor->GetMaterial(lodLevel, j); - materials.Add(baseMaterial); + materials.emplace_back(baseMaterial); } // save the materials diff --git a/Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/Exporter/NodeExport.cpp b/Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/Exporter/NodeExport.cpp index 79861be4b8..80efb54606 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/Exporter/NodeExport.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Exporters/ExporterLib/Exporter/NodeExport.cpp @@ -227,13 +227,13 @@ namespace ExporterLib } - void SaveNodeGroups(MCore::Stream* file, const MCore::Array& nodeGroups, MCore::Endian::EEndianType targetEndianType) + void SaveNodeGroups(MCore::Stream* file, const AZStd::vector& nodeGroups, MCore::Endian::EEndianType targetEndianType) { uint32 i; MCORE_ASSERT(file); // get the number of node groups - const uint32 numGroups = nodeGroups.GetLength(); + const uint32 numGroups = nodeGroups.size(); if (numGroups == 0) { @@ -286,13 +286,13 @@ namespace ExporterLib const uint32 numGroups = actor->GetNumNodeGroups(); // create the node group array and reserve some elements - MCore::Array nodeGroups; - nodeGroups.Reserve(numGroups); + AZStd::vector nodeGroups; + nodeGroups.reserve(numGroups); // iterate through the node groups and add them to the array for (uint32 i = 0; i < numGroups; ++i) { - nodeGroups.Add(actor->GetNodeGroup(i)); + nodeGroups.emplace_back(actor->GetNodeGroup(i)); } // save the node groups @@ -300,7 +300,7 @@ namespace ExporterLib } - void SaveNodeMotionSources(MCore::Stream* file, EMotionFX::Actor* actor, MCore::Array* nodeMirrorInfos, MCore::Endian::EEndianType targetEndianType) + void SaveNodeMotionSources(MCore::Stream* file, EMotionFX::Actor* actor, AZStd::vector* nodeMirrorInfos, MCore::Endian::EEndianType targetEndianType) { MCORE_ASSERT(file); @@ -311,7 +311,7 @@ namespace ExporterLib MCORE_ASSERT(nodeMirrorInfos); - const uint32 numNodes = nodeMirrorInfos->GetLength(); + const uint32 numNodes = nodeMirrorInfos->size(); // chunk information EMotionFX::FileFormat::FileChunk chunkHeader; @@ -342,7 +342,7 @@ namespace ExporterLib for (uint32 i = 0; i < numNodes; ++i) { // get the motion node source - uint16 nodeMotionSource = nodeMirrorInfos->GetItem(i).mSourceNode; + uint16 nodeMotionSource = nodeMirrorInfos->at(i).mSourceNode; //if (actor && nodeMotionSource != MCORE_INVALIDINDEX16) //LogInfo(" + '%s' (NodeNr=%i) -> '%s' (NodeNr=%i)", actor->GetNode( i )->GetName(), i, actor->GetNode( nodeMotionSource )->GetName(), nodeMotionSource); @@ -355,14 +355,14 @@ namespace ExporterLib // write all axes for (uint32 i = 0; i < numNodes; ++i) { - uint8 axis = static_cast(nodeMirrorInfos->GetItem(i).mAxis); + uint8 axis = static_cast(nodeMirrorInfos->at(i).mAxis); file->Write(&axis, sizeof(uint8)); } // write all flags for (uint32 i = 0; i < numNodes; ++i) { - uint8 flags = static_cast(nodeMirrorInfos->GetItem(i).mFlags); + uint8 flags = static_cast(nodeMirrorInfos->at(i).mFlags); file->Write(&flags, sizeof(uint8)); } } @@ -430,7 +430,7 @@ namespace ExporterLib MCore::LogInfo("============================================================"); // get all nodes that are affected by the skin - MCore::Array bones; + AZStd::vector bones; if (actor) { actor->ExtractBoneList(0, &bones); @@ -455,7 +455,7 @@ namespace ExporterLib } // is the attachment node a skinned one? - if (bones.Find(node->GetNodeIndex()) != MCORE_INVALIDINDEX32) + if (AZStd::find(begin(bones), end(bones), node->GetNodeIndex()) != end(bones)) { MCore::LogWarning("Attachment node '%s' (NodeNr=%i) is used by a skin. Skinning will look incorrectly when using motion mirroring.", node->GetName(), nodeNr); } diff --git a/Gems/EMotionFX/Code/EMotionFX/Rendering/Common/RenderUtil.cpp b/Gems/EMotionFX/Code/EMotionFX/Rendering/Common/RenderUtil.cpp index 9c0a4af895..e17fffbdb5 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Rendering/Common/RenderUtil.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Rendering/Common/RenderUtil.cpp @@ -51,8 +51,6 @@ namespace MCommon mArrowHeadMesh = CreateArrowHead(1.0f, 0.5f); mUnitCubeMesh = CreateCube(1.0f); mFont = new VectorFont(this); - - mTriangleVertices.SetMemoryCategory(MEMCATEGORY_MCOMMON); } @@ -106,14 +104,14 @@ namespace MCommon void RenderUtil::RenderTriangles() { // check if we have to render anything and skip directly in case there are no triangles - if (mTriangleVertices.GetIsEmpty()) + if (mTriangleVertices.empty()) { return; } // render the triangles and clear the array RenderTriangles(mTriangleVertices); - mTriangleVertices.Clear(false); + mTriangleVertices.clear(); } @@ -655,7 +653,7 @@ namespace MCommon // render the advanced skeleton - void RenderUtil::RenderSkeleton(EMotionFX::ActorInstance* actorInstance, const MCore::Array& boneList, const AZStd::unordered_set* visibleJointIndices, const AZStd::unordered_set* selectedJointIndices, const MCore::RGBAColor& color, const MCore::RGBAColor& selectedColor) + void RenderUtil::RenderSkeleton(EMotionFX::ActorInstance* actorInstance, const AZStd::vector& boneList, const AZStd::unordered_set* visibleJointIndices, const AZStd::unordered_set* selectedJointIndices, const MCore::RGBAColor& color, const MCore::RGBAColor& selectedColor) { // check if our render util supports rendering meshes, if not render the fallback skeleton using lines only if (GetIsMeshRenderingSupported() == false) @@ -680,7 +678,7 @@ namespace MCommon const AZ::u32 parentIndex = joint->GetParentIndex(); // check if this node has a parent and is a bone, if not skip it - if (parentIndex == MCORE_INVALIDINDEX32 || boneList.Find(jointIndex) == MCORE_INVALIDINDEX32) + if (parentIndex == MCORE_INVALIDINDEX32 || AZStd::find(begin(boneList), end(boneList), jointIndex) == end(boneList)) { continue; } @@ -717,7 +715,7 @@ namespace MCommon // render node orientations - void RenderUtil::RenderNodeOrientations(EMotionFX::ActorInstance* actorInstance, const MCore::Array& boneList, const AZStd::unordered_set* visibleJointIndices, const AZStd::unordered_set* selectedJointIndices, float scale, bool scaleBonesOnLength) + void RenderUtil::RenderNodeOrientations(EMotionFX::ActorInstance* actorInstance, const AZStd::vector& boneList, const AZStd::unordered_set* visibleJointIndices, const AZStd::unordered_set* selectedJointIndices, float scale, bool scaleBonesOnLength) { // get the actor and the transform data const float unitScale = 1.0f / (float)MCore::Distance::ConvertValue(1.0f, MCore::Distance::UNITTYPE_METERS, EMotionFX::GetEMotionFX().GetUnitType()); @@ -739,7 +737,7 @@ namespace MCommon (visibleJointIndices->find(jointIndex) != visibleJointIndices->end())) { // either scale the bones based on their length or use the normal size - if (scaleBonesOnLength && parentIndex != MCORE_INVALIDINDEX32 && boneList.Find(jointIndex) != MCORE_INVALIDINDEX32) + if (scaleBonesOnLength && parentIndex != MCORE_INVALIDINDEX32 && AZStd::find(begin(boneList), end(boneList), jointIndex) != end(boneList)) { static const float axisBoneScale = 50.0f; axisRenderingSettings.mSize = GetBoneScale(actorInstance, joint) * constPreScale * axisBoneScale; @@ -1711,9 +1709,9 @@ namespace MCommon } // fast access to the trajectory trace particles - const MCore::Array& traceParticles = trajectoryPath->mTraceParticles; - const int32 numTraceParticles = traceParticles.GetLength(); - if (traceParticles.GetIsEmpty()) + const AZStd::vector& traceParticles = trajectoryPath->mTraceParticles; + const int32 numTraceParticles = traceParticles.size(); + if (traceParticles.empty()) { return; } @@ -1858,7 +1856,7 @@ namespace MCommon } // remove all particles while keeping the data in memory - trajectoryPath->mTraceParticles.Clear(false); + trajectoryPath->mTraceParticles.clear(); } diff --git a/Gems/EMotionFX/Code/EMotionFX/Rendering/Common/RenderUtil.h b/Gems/EMotionFX/Code/EMotionFX/Rendering/Common/RenderUtil.h index f63d41e812..8fb8f524c4 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Rendering/Common/RenderUtil.h +++ b/Gems/EMotionFX/Code/EMotionFX/Rendering/Common/RenderUtil.h @@ -191,7 +191,7 @@ namespace MCommon * @param[in] color The desired skeleton color. * @param[in] selectedColor The color of the selected bones. */ - void RenderSkeleton(EMotionFX::ActorInstance* actorInstance, const MCore::Array& boneList, const AZStd::unordered_set* visibleJointIndices = nullptr, const AZStd::unordered_set* selectedJointIndices = nullptr, const MCore::RGBAColor& color = MCore::RGBAColor(1.0f, 0.0f, 0.0f, 1.0f), const MCore::RGBAColor& selectedColor = MCore::RGBAColor(1.0f, 0.647f, 0.0f)); + void RenderSkeleton(EMotionFX::ActorInstance* actorInstance, const AZStd::vector& boneList, const AZStd::unordered_set* visibleJointIndices = nullptr, const AZStd::unordered_set* selectedJointIndices = nullptr, const MCore::RGBAColor& color = MCore::RGBAColor(1.0f, 0.0f, 0.0f, 1.0f), const MCore::RGBAColor& selectedColor = MCore::RGBAColor(1.0f, 0.647f, 0.0f)); /** * Render node orientations. @@ -202,7 +202,7 @@ namespace MCommon * @param[in] scale The scaling value in units. Axes of normal nodes will use the scaling value as unit length, skinned bones will use the scaling value as multiplier. * @param[in] scaleBonesOnLength Automatically scales the bone orientations based on the bone length. This means finger node orientations will be rendered smaller than foot bones as the bone length is a lot smaller as well. */ - void RenderNodeOrientations(EMotionFX::ActorInstance* actorInstance, const MCore::Array& boneList, const AZStd::unordered_set* visibleJointIndices = nullptr, const AZStd::unordered_set* selectedJointIndices = nullptr, float scale = 1.0f, bool scaleBonesOnLength = true); + void RenderNodeOrientations(EMotionFX::ActorInstance* actorInstance, const AZStd::vector& boneList, const AZStd::unordered_set* visibleJointIndices = nullptr, const AZStd::unordered_set* selectedJointIndices = nullptr, float scale = 1.0f, bool scaleBonesOnLength = true); /** * Render the bind pose of the given actor. @@ -570,17 +570,17 @@ namespace MCommon MCORE_INLINE void AddTriangle(const AZ::Vector3& posA, const AZ::Vector3& posB, const AZ::Vector3& posC, const AZ::Vector3& normalA, const AZ::Vector3& normalB, const AZ::Vector3& normalC, uint32 color) { - mTriangleVertices.Add(TriangleVertex(posA, normalA, color)); - mTriangleVertices.Add(TriangleVertex(posB, normalB, color)); - mTriangleVertices.Add(TriangleVertex(posC, normalC, color)); + mTriangleVertices.emplace_back(TriangleVertex(posA, normalA, color)); + mTriangleVertices.emplace_back(TriangleVertex(posB, normalB, color)); + mTriangleVertices.emplace_back(TriangleVertex(posC, normalC, color)); - if (mTriangleVertices.GetLength() + 2 >= mNumMaxTriangleVertices) + if (mTriangleVertices.size() + 2 >= mNumMaxTriangleVertices) { RenderTriangles(); } } - virtual void RenderTriangles(const MCore::Array& triangleVertices) { MCORE_UNUSED(triangleVertices); } + virtual void RenderTriangles(const AZStd::vector& triangleVertices) { MCORE_UNUSED(triangleVertices); } void RenderTriangles(); //--------------------------------------------------------------------------------------------- @@ -609,13 +609,13 @@ namespace MCommon struct TrajectoryTracePath { - MCore::Array mTraceParticles; + AZStd::vector mTraceParticles; EMotionFX::ActorInstance* mActorInstance; float mTimePassed; TrajectoryTracePath() { - mTraceParticles.Reserve(250); + mTraceParticles.reserve(250); mTimePassed = 0.0f; mActorInstance = NULL; } @@ -812,7 +812,7 @@ namespace MCommon static uint32 mNumMaxMeshIndices; /**< The maximum capacity of the util mesh index buffer */ // helper variables for rendering triangles - MCore::Array mTriangleVertices; + AZStd::vector mTriangleVertices; static uint32 mNumMaxTriangleVertices; /**< The maximum capacity of the triangle vertex buffer */ }; } // namespace MCommon diff --git a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GBuffer.cpp b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GBuffer.cpp index c4091de594..3e2a25fe80 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GBuffer.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GBuffer.cpp @@ -10,7 +10,7 @@ #include #include -#include +#include #include "GBuffer.h" #include "RenderTexture.h" #include "GLSLShader.h" diff --git a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GLActor.cpp b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GLActor.cpp index d727300dd5..7a78b5749d 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GLActor.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GLActor.cpp @@ -27,15 +27,6 @@ namespace RenderGL mActor = nullptr; mEnableGPUSkinning = true; - mMaterials.SetMemoryCategory(MEMCATEGORY_RENDERING); - - mHomoMaterials.SetMemoryCategory(MEMCATEGORY_RENDERING); - - for (uint32 i = 0; i < 3; i++) - { - mIndexBuffers[i].SetMemoryCategory(MEMCATEGORY_RENDERING); - } - mSkyColor = MCore::RGBAColor(0.55f, 0.55f, 0.55f); mGroundColor = MCore::RGBAColor(0.117f, 0.015f, 0.07f); } @@ -71,14 +62,14 @@ namespace RenderGL for (uint32 a = 0; a < 3; ++a) { // get rid of the given vertex buffers - const uint32 numVertexBuffers = mVertexBuffers[a].GetLength(); + const uint32 numVertexBuffers = mVertexBuffers[a].size(); for (i = 0; i < numVertexBuffers; ++i) { delete mVertexBuffers[a][i]; } // get rid of the given index buffers - const uint32 numIndexBuffers = mIndexBuffers[a].GetLength(); + const uint32 numIndexBuffers = mIndexBuffers[a].size(); for (i = 0; i < numIndexBuffers; ++i) { delete mIndexBuffers[a][i]; @@ -86,10 +77,10 @@ namespace RenderGL } // delete all materials - const uint32 numLOD = mMaterials.GetLength(); + const uint32 numLOD = mMaterials.size(); for (uint32 l = 0; l < numLOD; l++) { - const uint32 numMaterials = mMaterials[l].GetLength(); + const uint32 numMaterials = mMaterials[l].size(); for (uint32 n = 0; n < numMaterials; n++) { delete mMaterials[l][n]->mMaterial; @@ -126,13 +117,13 @@ namespace RenderGL const uint32 numNodes = actor->GetNumNodes(); // set the pre-allocation amount for the number of materials - mMaterials.Resize(numGeometryLODLevels); + mMaterials.resize(numGeometryLODLevels); // resize the vertex and index buffers for (uint32 a = 0; a < 3; ++a) { - mVertexBuffers[a].Resize(numGeometryLODLevels); - mIndexBuffers[a].Resize(numGeometryLODLevels); + mVertexBuffers[a].resize(numGeometryLODLevels); + mIndexBuffers[a].resize(numGeometryLODLevels); mPrimitives[a].Resize(numGeometryLODLevels); // reset the vertex and index buffers @@ -143,7 +134,7 @@ namespace RenderGL } } - mHomoMaterials.Resize(numGeometryLODLevels); + mHomoMaterials.resize(numGeometryLODLevels); mDynamicNodes.Resize (numGeometryLODLevels); EMotionFX::Skeleton* skeleton = actor->GetSkeleton(); @@ -206,7 +197,7 @@ namespace RenderGL // add to material list MaterialPrimitives* materialPrims = mMaterials[lodLevel][newPrimitive.mMaterialIndex]; - materialPrims->mPrimitives[meshType].Add(newPrimitive); + materialPrims->mPrimitives[meshType].emplace_back(newPrimitive); totalNumIndices[meshType] += newPrimitive.mNumTriangles * 3; totalNumVerts[meshType] += subMesh->GetNumVertices(); @@ -373,7 +364,7 @@ namespace RenderGL { EMotionFX::Material* emfxMaterial = mActor->GetMaterial(lodLevel, m); Material* material = InitMaterial(emfxMaterial); - mMaterials[lodLevel].Add( new MaterialPrimitives(material) ); + mMaterials[lodLevel].emplace_back( new MaterialPrimitives(material) ); } } @@ -412,7 +403,7 @@ namespace RenderGL void GLActor::RenderMeshes(EMotionFX::ActorInstance* actorInstance, EMotionFX::Mesh::EMeshType meshType, uint32 renderFlags) { const uint32 lodLevel = actorInstance->GetLODLevel(); - const uint32 numMaterials = mMaterials[lodLevel].GetLength(); + const uint32 numMaterials = mMaterials[lodLevel].size(); if (numMaterials == 0) { @@ -437,7 +428,7 @@ namespace RenderGL for (uint32 n = 0; n < numMaterials; n++) { const MaterialPrimitives* materialPrims = mMaterials[lodLevel][n]; - const uint32 numPrimitives = materialPrims->mPrimitives[meshType].GetLength(); + const uint32 numPrimitives = materialPrims->mPrimitives[meshType].size(); if (numPrimitives == 0) { continue; diff --git a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GLRenderUtil.cpp b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GLRenderUtil.cpp index feb2cd22ee..2ef39bd7c5 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GLRenderUtil.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GLRenderUtil.cpp @@ -110,7 +110,6 @@ namespace RenderGL mTextures = new TextureEntry[mMaxNumTextures]; // text rendering - mTextEntries.SetMemoryCategory(MEMCATEGORY_RENDERING); } @@ -164,12 +163,12 @@ namespace RenderGL delete[] mTextures; // get rid of texture entries - const uint32 numTextEntries = mTextEntries.GetLength(); + const uint32 numTextEntries = mTextEntries.size(); for (uint32 i = 0; i < numTextEntries; ++i) { delete mTextEntries[i]; } - mTextEntries.Clear(); + mTextEntries.clear(); } @@ -481,10 +480,10 @@ namespace RenderGL } - void GLRenderUtil::RenderTriangles(const MCore::Array& triangleVertices) + void GLRenderUtil::RenderTriangles(const AZStd::vector& triangleVertices) { // check if there are any triangles to render, if not return directly - if (triangleVertices.GetIsEmpty()) + if (triangleVertices.empty()) { return; } @@ -492,7 +491,7 @@ namespace RenderGL glDisable(GL_CULL_FACE); // get the number of vertices to render - const uint32 numVertices = triangleVertices.GetLength(); + const uint32 numVertices = triangleVertices.size(); MCORE_ASSERT(numVertices <= mNumMaxTriangleVertices); // lock the vertex buffer @@ -552,7 +551,7 @@ namespace RenderGL textEntry->mFontSize = fontSize; textEntry->mCentered = centered; - mTextEntries.Add(textEntry); + mTextEntries.emplace_back(textEntry); } @@ -560,7 +559,7 @@ namespace RenderGL { static AZ::Debug::Timer timer; const float timeDelta = static_cast(timer.StampAndGetDeltaTimeInSeconds()); - for (uint32 i = 0; i < mTextEntries.GetLength(); ) + for (uint32 i = 0; i < mTextEntries.size(); ) { TextEntry* textEntry = mTextEntries[i]; RenderText(static_cast(textEntry->mX), static_cast(textEntry->mY), textEntry->mText.c_str(), textEntry->mColor, textEntry->mFontSize, textEntry->mCentered); @@ -569,7 +568,7 @@ namespace RenderGL if (textEntry->mLifeTime < 0.0f) { delete textEntry; - mTextEntries.Remove(i); + mTextEntries.erase(AZStd::next(begin(mTextEntries), i)); } else { diff --git a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GLRenderUtil.h b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GLRenderUtil.h index c8888bc527..672a8c524f 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GLRenderUtil.h +++ b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GLRenderUtil.h @@ -54,7 +54,7 @@ namespace RenderGL // triangle rendering void RenderTriangle(const AZ::Vector3& v1, const AZ::Vector3& v2, const AZ::Vector3& v3, const MCore::RGBAColor& color) override; - void RenderTriangles(const MCore::Array& triangleVertices) override; + void RenderTriangles(const AZStd::vector& triangleVertices) override; // text rendering (do not use until really needed, needs to do runtime allocations) void RenderTextPeriod(uint32 x, uint32 y, const char* text, float lifeTime, const MCore::RGBAColor& color = MCore::RGBAColor(1.0f, 1.0f, 1.0f), float fontSize = 11.0f, bool centered = false); @@ -108,7 +108,7 @@ namespace RenderGL bool mCentered; }; - MCore::Array mTextEntries; + AZStd::vector mTextEntries; TextureEntry* mTextures; uint32 mNumTextures; uint32 mMaxNumTextures; diff --git a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GLSLShader.cpp b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GLSLShader.cpp index 02aad3aa04..451246a8e2 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GLSLShader.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GLSLShader.cpp @@ -36,16 +36,11 @@ namespace RenderGL mPixelShader = 0; mTextureUnit = 0; - mUniforms.SetMemoryCategory(MEMCATEGORY_RENDERING); - mAttributes.SetMemoryCategory(MEMCATEGORY_RENDERING); - mActivatedAttribs.SetMemoryCategory(MEMCATEGORY_RENDERING); - mActivatedTextures.SetMemoryCategory(MEMCATEGORY_RENDERING); - // pre-alloc data for uniforms and attributes - mUniforms.Reserve(10); - mAttributes.Reserve(10); - mActivatedAttribs.Reserve(10); - mActivatedTextures.Reserve(10); + mUniforms.reserve(10); + mAttributes.reserve(10); + mActivatedAttribs.reserve(10); + mActivatedTextures.reserve(10); } @@ -70,14 +65,14 @@ namespace RenderGL // Deactivate void GLSLShader::Deactivate() { - const uint32 numAttribs = mActivatedAttribs.GetLength(); + const uint32 numAttribs = mActivatedAttribs.size(); for (uint32 i = 0; i < numAttribs; ++i) { const uint32 index = mActivatedAttribs[i]; glDisableVertexAttribArray(mAttributes[index].mLocation); } - const uint32 numTextures = mActivatedTextures.GetLength(); + const uint32 numTextures = mActivatedTextures.size(); for (uint32 i = 0; i < numTextures; ++i) { const uint32 index = mActivatedTextures[i]; @@ -86,8 +81,8 @@ namespace RenderGL glBindTexture(GL_TEXTURE_2D, 0); } - mActivatedAttribs.Clear(false); - mActivatedTextures.Clear(false); + mActivatedAttribs.clear(); + mActivatedTextures.clear(); } bool GLSLShader::Validate() @@ -129,7 +124,7 @@ namespace RenderGL text = "#version 120\n"; // build define string - const uint32 numDefines = mDefines.GetLength(); + const uint32 numDefines = mDefines.size(); for (uint32 n = 0; n < numDefines; ++n) { text += AZStd::string::format("#define %s\n", mDefines[n].c_str()); @@ -180,10 +175,10 @@ namespace RenderGL AZStd::invoke(func, static_cast(this), object, logLen, &logWritten, text.data()); // if there are any defines, print that out too - if (mDefines.GetLength() > 0) + if (mDefines.size() > 0) { AZStd::string dStr; - const uint32 numDefines = mDefines.GetLength(); + const uint32 numDefines = mDefines.size(); for (uint32 n = 0; n < numDefines; ++n) { if (n < numDefines - 1) @@ -209,7 +204,7 @@ namespace RenderGL // Init - bool GLSLShader::Init(AZ::IO::PathView vertexFileName, AZ::IO::PathView pixelFileName, MCore::Array& defines) + bool GLSLShader::Init(AZ::IO::PathView vertexFileName, AZ::IO::PathView pixelFileName, AZStd::vector& defines) { initializeOpenGLFunctions(); /*const char* args[] = { "unroll all", @@ -276,9 +271,9 @@ namespace RenderGL // FindAttributeIndex - uint32 GLSLShader::FindAttributeIndex(const char* name) + size_t GLSLShader::FindAttributeIndex(const char* name) { - const uint32 numAttribs = mAttributes.GetLength(); + const uint32 numAttribs = mAttributes.size(); for (uint32 i = 0; i < numAttribs; ++i) { if (AzFramework::StringFunc::Equal(mAttributes[i].mName.c_str(), name, false /* no case */)) @@ -296,14 +291,14 @@ namespace RenderGL // the parameter wasn't cached, try to retrieve it const GLint loc = glGetAttribLocation(mProgram, name); - mAttributes.Add(ShaderParameter(name, loc, true)); + mAttributes.emplace_back(name, loc, true); if (loc < 0) { return MCORE_INVALIDINDEX32; } - return mAttributes.GetLength() - 1; + return mAttributes.size() - 1; } @@ -334,9 +329,9 @@ namespace RenderGL // FindUniformIndex - uint32 GLSLShader::FindUniformIndex(const char* name) + size_t GLSLShader::FindUniformIndex(const char* name) { - const uint32 numUniforms = mUniforms.GetLength(); + const uint32 numUniforms = mUniforms.size(); for (uint32 i = 0; i < numUniforms; ++i) { if (AzFramework::StringFunc::Equal(mUniforms[i].mName.c_str(), name, false /* no case */)) @@ -352,14 +347,14 @@ namespace RenderGL // the parameter wasn't cached, try to retrieve it const GLint loc = glGetUniformLocation(mProgram, name); - mUniforms.Add(ShaderParameter(name, loc, false)); + mUniforms.emplace_back(name, loc, false); if (loc < 0) { return MCORE_INVALIDINDEX32; } - return mUniforms.GetLength() - 1; + return mUniforms.size() - 1; } @@ -377,7 +372,7 @@ namespace RenderGL glEnableVertexAttribArray(param->mLocation); glVertexAttribPointer(param->mLocation, dim, type, GL_FALSE, stride, (GLvoid*)offset); - mActivatedAttribs.Add(index); + mActivatedAttribs.emplace_back(index); } @@ -532,7 +527,7 @@ namespace RenderGL glBindTexture(GL_TEXTURE_2D, texture->GetID()); glUniform1i(mUniforms[index].mLocation, mUniforms[index].mTextureUnit); - mActivatedTextures.Add(index); + mActivatedTextures.emplace_back(index); } @@ -563,7 +558,7 @@ namespace RenderGL glBindTexture(GL_TEXTURE_2D, textureID); glUniform1i(mUniforms[index].mLocation, mUniforms[index].mTextureUnit); - mActivatedTextures.Add(index); + mActivatedTextures.emplace_back(index); } @@ -571,7 +566,7 @@ namespace RenderGL bool GLSLShader::CheckIfIsDefined(const char* attributeName) { // get the number of defines and iterate through them - const uint32 numDefines = mDefines.GetLength(); + const uint32 numDefines = mDefines.size(); for (uint32 i = 0; i < numDefines; ++i) { // compare the given attribute with the current define and return if they are equal diff --git a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GLSLShader.h b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GLSLShader.h index 6a6854e29f..6eb77b69c2 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GLSLShader.h +++ b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GLSLShader.h @@ -14,7 +14,7 @@ #include "Shader.h" // include OpenGL -#include +#include #include #include @@ -42,7 +42,7 @@ namespace RenderGL MCORE_INLINE unsigned int GetProgram() const { return mProgram; } bool CheckIfIsDefined(const char* attributeName); - bool Init(AZ::IO::PathView vertexFileName, AZ::IO::PathView pixelFileName, MCore::Array& defines); + bool Init(AZ::IO::PathView vertexFileName, AZ::IO::PathView pixelFileName, AZStd::vector& defines); void SetAttribute(const char* name, uint32 dim, uint32 type, uint32 stride, size_t offset) override; void SetUniform(const char* name, float value) override; @@ -73,8 +73,8 @@ namespace RenderGL bool mIsAttribute; }; - uint32 FindAttributeIndex(const char* name); - uint32 FindUniformIndex(const char* name); + size_t FindAttributeIndex(const char* name); + size_t FindUniformIndex(const char* name); ShaderParameter* FindAttribute(const char* name); ShaderParameter* FindUniform(const char* name); @@ -84,11 +84,11 @@ namespace RenderGL AZ::IO::Path mFileName; - MCore::Array mActivatedAttribs; - MCore::Array mActivatedTextures; - MCore::Array mUniforms; - MCore::Array mAttributes; - MCore::Array mDefines; + AZStd::vector mActivatedAttribs; + AZStd::vector mActivatedTextures; + AZStd::vector mUniforms; + AZStd::vector mAttributes; + AZStd::vector mDefines; unsigned int mVertexShader; unsigned int mPixelShader; diff --git a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GraphicsManager.cpp b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GraphicsManager.cpp index db03a694a8..78b5813770 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GraphicsManager.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GraphicsManager.cpp @@ -403,20 +403,20 @@ namespace RenderGL // LoadShader GLSLShader* GraphicsManager::LoadShader(AZ::IO::PathView vertexFileName, AZ::IO::PathView pixelFileName) { - MCore::Array defines; + AZStd::vector defines; return LoadShader(vertexFileName, pixelFileName, defines); } // LoadShader - GLSLShader* GraphicsManager::LoadShader(AZ::IO::PathView vertexFileName, AZ::IO::PathView pixelFileName, MCore::Array& defines) + GLSLShader* GraphicsManager::LoadShader(AZ::IO::PathView vertexFileName, AZ::IO::PathView pixelFileName, AZStd::vector& defines) { const AZ::IO::Path vertexPath {vertexFileName.empty() ? AZ::IO::Path{} : mShaderPath / vertexFileName}; const AZ::IO::Path pixelPath {pixelFileName.empty() ? AZ::IO::Path{} : mShaderPath / pixelFileName}; // construct the lookup string for the shader cache AZStd::string cacheLookupStr = vertexPath.Native() + pixelPath.Native(); - const uint32 numDefines = defines.GetLength(); + const uint32 numDefines = defines.size(); for (uint32 n = 0; n < numDefines; n++) { cacheLookupStr += AZStd::string::format("#%s", defines[n].c_str()); diff --git a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GraphicsManager.h b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GraphicsManager.h index 674d428382..e13e643938 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GraphicsManager.h +++ b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/GraphicsManager.h @@ -62,7 +62,7 @@ namespace RenderGL bool GetIsPostProcessingEnabled() const { return mPostProcessing; } PostProcessShader* LoadPostProcessShader(AZ::IO::PathView filename); GLSLShader* LoadShader(AZ::IO::PathView vertexFileName, AZ::IO::PathView pixelFileName); - GLSLShader* LoadShader(AZ::IO::PathView vertexFileName, AZ::IO::PathView pixelFileName, MCore::Array& defines); + GLSLShader* LoadShader(AZ::IO::PathView vertexFileName, AZ::IO::PathView pixelFileName, AZStd::vector& defines); MCORE_INLINE void SetGBuffer(GBuffer* gBuffer) { mGBuffer = gBuffer; } MCORE_INLINE GBuffer* GetGBuffer() { return mGBuffer; } diff --git a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/Material.h b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/Material.h index 1cebe2d87b..ed5ab18609 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/Material.h +++ b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/Material.h @@ -40,7 +40,7 @@ namespace RenderGL uint32 mNumVertices; /**< The number of vertices in the primitive. */ uint32 mMaterialIndex; /**< The material index which is mapped to the primitive. */ - MCore::Array mBoneNodeIndices;/**< Mapping from local bones 0-50 to nodes. */ + AZStd::vector mBoneNodeIndices;/**< Mapping from local bones 0-50 to nodes. */ }; diff --git a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/PostProcessShader.cpp b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/PostProcessShader.cpp index 7492f3e845..84c369bcbc 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/PostProcessShader.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/PostProcessShader.cpp @@ -81,7 +81,7 @@ namespace RenderGL // Init bool PostProcessShader::Init(AZ::IO::PathView filename) { - MCore::Array defines; + AZStd::vector defines; return GLSLShader::Init(nullptr, filename, defines); } diff --git a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/ShaderCache.cpp b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/ShaderCache.cpp index 604ad4dcaf..26acd0e77d 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/ShaderCache.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/ShaderCache.cpp @@ -15,8 +15,7 @@ namespace RenderGL // constructor ShaderCache::ShaderCache() { - mEntries.SetMemoryCategory(MEMCATEGORY_RENDERING); - mEntries.Reserve(128); + mEntries.reserve(128); } @@ -31,7 +30,7 @@ namespace RenderGL void ShaderCache::Release() { // delete all shaders - const uint32 numEntries = mEntries.GetLength(); + const uint32 numEntries = mEntries.size(); for (uint32 i = 0; i < numEntries; ++i) { mEntries[i].mName.clear(); @@ -39,23 +38,21 @@ namespace RenderGL } // clear all entries - mEntries.Clear(); + mEntries.clear(); } // add the shader to the cache (assume there are no duplicate names) void ShaderCache::AddShader(AZStd::string_view filename, Shader* shader) { - mEntries.AddEmpty(); - mEntries.GetLast().mName = filename; - mEntries.GetLast().mShader = shader; + mEntries.emplace_back(Entry{filename, shader}); } // try to locate a shader based on its name Shader* ShaderCache::FindShader(AZStd::string_view filename) const { - const uint32 numEntries = mEntries.GetLength(); + const uint32 numEntries = mEntries.size(); for (uint32 i = 0; i < numEntries; ++i) { if (AzFramework::StringFunc::Equal(mEntries[i].mName, filename, false /* no case */)) // non-case-sensitive name compare @@ -72,7 +69,7 @@ namespace RenderGL // check if we have a given shader in the cache bool ShaderCache::CheckIfHasShader(Shader* shader) const { - const uint32 numEntries = mEntries.GetLength(); + const uint32 numEntries = mEntries.size(); for (uint32 i = 0; i < numEntries; ++i) { if (mEntries[i].mShader == shader) diff --git a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/StandardMaterial.cpp b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/StandardMaterial.cpp index a782cfcd42..46c7e5c13e 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/StandardMaterial.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/StandardMaterial.cpp @@ -28,8 +28,6 @@ namespace RenderGL mSpecularMap = GetGraphicsManager()->GetTextureCache()->GetWhiteTexture(); mNormalMap = GetGraphicsManager()->GetTextureCache()->GetDefaultNormalTexture(); - mShaders.SetMemoryCategory(MEMCATEGORY_RENDERING); - SetAttribute(LIGHTING, true); SetAttribute(SKINNING, false); SetAttribute(SHADOWS, false); @@ -266,7 +264,7 @@ namespace RenderGL const AZ::Matrix3x4* skinningMatrices = transformData->GetSkinningMatrices(); // multiple each transform by its inverse bind pose - const uint32 numBones = primitive->mBoneNodeIndices.GetLength(); + const uint32 numBones = primitive->mBoneNodeIndices.size(); for (uint32 i = 0; i < numBones; ++i) { const uint32 nodeNr = primitive->mBoneNodeIndices[i]; @@ -307,7 +305,7 @@ namespace RenderGL mActiveShader = nullptr; // get the number of shaders and iterate through them - const uint32 numShaders = mShaders.GetLength(); + const uint32 numShaders = mShaders.size(); for (uint32 i = 0; i < numShaders; ++i) { if (mShaders[i] == nullptr) @@ -351,18 +349,18 @@ namespace RenderGL // if this function gets called at runtime something is wrong, go bug hunting! // construct an array of string attributes - MCore::Array defines; + AZStd::vector defines; for (uint32 n = 0; n < NUM_ATTRIBUTES; ++n) { if (mAttributes[n]) { - defines.Add(AttributeToString((EAttribute)n)); + defines.emplace_back(AttributeToString((EAttribute)n)); } } // compile shader and add it to the list of shaders mActiveShader = GetGraphicsManager()->LoadShader("StandardMaterial_VS.glsl", "StandardMaterial_PS.glsl", defines); - mShaders.Add(mActiveShader); + mShaders.emplace_back(mActiveShader); } mAttributesUpdated = false; diff --git a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/StandardMaterial.h b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/StandardMaterial.h index 34386c7241..d9eb23b50a 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/StandardMaterial.h +++ b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/StandardMaterial.h @@ -45,7 +45,7 @@ namespace RenderGL bool mAttributesUpdated; GLSLShader* mActiveShader; - MCore::Array mShaders; + AZStd::vector mShaders; AZ::Matrix4x4 mBoneMatrices[200]; EMotionFX::Material* mMaterial; diff --git a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/TextureCache.cpp b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/TextureCache.cpp index 4723d166a7..7ef5b49c67 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/TextureCache.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/TextureCache.cpp @@ -47,8 +47,7 @@ namespace RenderGL mWhiteTexture = nullptr; mDefaultNormalTexture = nullptr; - mEntries.SetMemoryCategory(MEMCATEGORY_RENDERING); - mEntries.Reserve(128); + mEntries.reserve(128); } @@ -74,14 +73,14 @@ namespace RenderGL void TextureCache::Release() { // delete all textures - const uint32 numEntries = mEntries.GetLength(); + const uint32 numEntries = mEntries.size(); for (uint32 i = 0; i < numEntries; ++i) { delete mEntries[i].mTexture; } // clear all entries - mEntries.Clear(); + mEntries.clear(); // delete the white texture delete mWhiteTexture; @@ -95,9 +94,7 @@ namespace RenderGL // add the texture to the cache (assume there are no duplicate names) void TextureCache::AddTexture(const char* filename, Texture* texture) { - mEntries.AddEmpty(); - mEntries.GetLast().mName = filename; - mEntries.GetLast().mTexture = texture; + mEntries.emplace_back(Entry{filename, texture}); } @@ -105,7 +102,7 @@ namespace RenderGL Texture* TextureCache::FindTexture(const char* filename) const { // get the number of entries and iterate through them - const uint32 numEntries = mEntries.GetLength(); + const uint32 numEntries = mEntries.size(); for (uint32 i = 0; i < numEntries; ++i) { if (AzFramework::StringFunc::Equal(mEntries[i].mName.c_str(), filename, false /* no case */)) // non-case-sensitive name compare @@ -123,7 +120,7 @@ namespace RenderGL bool TextureCache::CheckIfHasTexture(Texture* texture) const { // get the number of entries and iterate through them - const uint32 numEntries = mEntries.GetLength(); + const uint32 numEntries = mEntries.size(); for (uint32 i = 0; i < numEntries; ++i) { if (mEntries[i].mTexture == texture) @@ -139,13 +136,13 @@ namespace RenderGL // remove an item from the cache void TextureCache::RemoveTexture(Texture* texture) { - const uint32 numEntries = mEntries.GetLength(); + const uint32 numEntries = mEntries.size(); for (uint32 i = 0; i < numEntries; ++i) { if (mEntries[i].mTexture == texture) { delete mEntries[i].mTexture; - mEntries.Remove(i); + mEntries.erase(AZStd::next(begin(mEntries), i)); return; } } diff --git a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/TextureCache.h b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/TextureCache.h index bae46bd75b..43d0f1a635 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/TextureCache.h +++ b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/TextureCache.h @@ -10,7 +10,7 @@ #define __RENDERGL_TEXTURECACHE_H #include -#include +#include #include "RenderGLConfig.h" #include @@ -72,7 +72,7 @@ namespace RenderGL Texture* mTexture; }; - MCore::Array mEntries; + AZStd::vector mEntries; Texture* mWhiteTexture; Texture* mDefaultNormalTexture; }; diff --git a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/glactor.h b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/glactor.h index ff20861c08..4de5d7198a 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/glactor.h +++ b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/glactor.h @@ -61,10 +61,10 @@ namespace RenderGL struct RENDERGL_API MaterialPrimitives { Material* mMaterial; - MCore::Array mPrimitives[3]; + AZStd::vector mPrimitives[3]; - MaterialPrimitives() { mMaterial = nullptr; mPrimitives[0].Reserve(64); mPrimitives[1].Reserve(64); mPrimitives[2].Reserve(64); } - MaterialPrimitives(Material* mat) { mMaterial = mat; mPrimitives[0].Reserve(64); mPrimitives[1].Reserve(64); mPrimitives[2].Reserve(64); } + MaterialPrimitives() { mMaterial = nullptr; mPrimitives[0].reserve(64); mPrimitives[1].reserve(64); mPrimitives[2].reserve(64); } + MaterialPrimitives(Material* mat) { mMaterial = mat; mPrimitives[0].reserve(64); mPrimitives[1].reserve(64); mPrimitives[2].reserve(64); } }; AZStd::string mTexturePath; @@ -85,12 +85,12 @@ namespace RenderGL EMotionFX::Mesh::EMeshType ClassifyMeshType(EMotionFX::Node* node, EMotionFX::Mesh* mesh, uint32 lodLevel); - MCore::Array< MCore::Array > mMaterials; + AZStd::vector< AZStd::vector > mMaterials; MCore::Array2D mDynamicNodes; MCore::Array2D mPrimitives[3]; - MCore::Array mHomoMaterials; - MCore::Array mVertexBuffers[3]; - MCore::Array mIndexBuffers[3]; + AZStd::vector mHomoMaterials; + AZStd::vector mVertexBuffers[3]; + AZStd::vector mIndexBuffers[3]; MCore::RGBAColor mGroundColor; MCore::RGBAColor mSkyColor; diff --git a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/shadercache.h b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/shadercache.h index 25a91026f8..08bf9dfa58 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/shadercache.h +++ b/Gems/EMotionFX/Code/EMotionFX/Rendering/OpenGL2/Source/shadercache.h @@ -11,7 +11,7 @@ #include "Shader.h" #include -#include +#include namespace RenderGL @@ -42,7 +42,7 @@ namespace RenderGL }; // - MCore::Array mEntries; // the shader cache entries + AZStd::vector mEntries; // the shader cache entries }; } // namespace RenderGL diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/Actor.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/Actor.cpp index 68b9d62e8e..541ab65071 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/Actor.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/Actor.cpp @@ -49,14 +49,10 @@ namespace EMotionFX { AZ_CLASS_ALLOCATOR_IMPL(Actor, ActorAllocator, 0) - Actor::LODLevel::LODLevel() - { - } - Actor::MeshLODData::MeshLODData() { // Create the default LOD level - m_lodLevels.push_back({}); + m_lodLevels.emplace_back(); } Actor::NodeLODInfo::NodeLODInfo() @@ -77,11 +73,6 @@ namespace EMotionFX { SetName(name); - // setup the array memory categories - mMaterials.SetMemoryCategory(EMFX_MEMCATEGORY_ACTORS); - mDependencies.SetMemoryCategory(EMFX_MEMCATEGORY_ACTORS); - mMorphSetups.SetMemoryCategory(EMFX_MEMCATEGORY_ACTORS); - mSkeleton = Skeleton::Create(); mMotionExtractionNode = MCORE_INVALIDINDEX32; @@ -105,11 +96,10 @@ namespace EMotionFX #endif // EMFX_DEVELOPMENT_BUILD // make sure we have at least allocated the first LOD of materials and facial setups - mMaterials.Reserve(4); // reserve space for 4 lods - mMorphSetups.Reserve(4); // - mMaterials.AddEmpty(); - mMaterials[0].SetMemoryCategory(EMFX_MEMCATEGORY_ACTORS); - mMorphSetups.Add(nullptr); + mMaterials.reserve(4); // reserve space for 4 lods + mMorphSetups.reserve(4); // + mMaterials.emplace_back(); + mMorphSetups.emplace_back(nullptr); GetEventManager().OnCreateActor(this); ActorNotificationBus::Broadcast(&ActorNotificationBus::Events::OnActorCreated, this); @@ -120,7 +110,7 @@ namespace EMotionFX ActorNotificationBus::Broadcast(&ActorNotificationBus::Events::OnActorDestroyed, this); GetEventManager().OnDeleteActor(this); - mNodeMirrorInfos.Clear(true); + mNodeMirrorInfos.clear(); RemoveAllMaterials(); RemoveAllMorphSetups(); @@ -158,12 +148,12 @@ namespace EMotionFX } // clone the materials - result->mMaterials.Resize(mMaterials.GetLength()); - for (uint32 i = 0; i < mMaterials.GetLength(); ++i) + result->mMaterials.resize(mMaterials.size()); + for (uint32 i = 0; i < mMaterials.size(); ++i) { // get the number of materials in the current LOD - const uint32 numMaterials = mMaterials[i].GetLength(); - result->mMaterials[i].Reserve(numMaterials); + const uint32 numMaterials = mMaterials[i].size(); + result->mMaterials[i].reserve(numMaterials); for (uint32 m = 0; m < numMaterials; ++m) { // retrieve the current material @@ -190,10 +180,10 @@ namespace EMotionFX result->SetNumLODLevels(static_cast(numLodLevels)); for (size_t lodLevel = 0; lodLevel < numLodLevels; ++lodLevel) { - const MCore::Array& nodeInfos = m_meshLodData.m_lodLevels[lodLevel].mNodeInfos; - MCore::Array& resultNodeInfos = resultMeshLodData.m_lodLevels[lodLevel].mNodeInfos; + const AZStd::vector& nodeInfos = m_meshLodData.m_lodLevels[lodLevel].mNodeInfos; + AZStd::vector& resultNodeInfos = resultMeshLodData.m_lodLevels[lodLevel].mNodeInfos; - resultNodeInfos.Resize(numNodes); + resultNodeInfos.resize(numNodes); for (uint32 n = 0; n < numNodes; ++n) { NodeLODInfo& resultNodeInfo = resultNodeInfos[n]; @@ -204,8 +194,8 @@ namespace EMotionFX } // clone the morph setups - result->mMorphSetups.Resize(mMorphSetups.GetLength()); - for (uint32 i = 0; i < mMorphSetups.GetLength(); ++i) + result->mMorphSetups.resize(mMorphSetups.size()); + for (uint32 i = 0; i < mMorphSetups.size(); ++i) { if (mMorphSetups[i]) { @@ -241,7 +231,7 @@ namespace EMotionFX void Actor::AllocateNodeMirrorInfos() { const uint32 numNodes = mSkeleton->GetNumNodes(); - mNodeMirrorInfos.Resize(numNodes); + mNodeMirrorInfos.resize(numNodes); // init the data for (uint32 i = 0; i < numNodes; ++i) @@ -255,19 +245,20 @@ namespace EMotionFX // remove the node mirror info void Actor::RemoveNodeMirrorInfos() { - mNodeMirrorInfos.Clear(true); + mNodeMirrorInfos.clear(); + mNodeMirrorInfos.shrink_to_fit(); } // check if we have our axes detected bool Actor::GetHasMirrorAxesDetected() const { - if (mNodeMirrorInfos.GetLength() == 0) + if (mNodeMirrorInfos.size() == 0) { return false; } - for (uint32 i = 0; i < mNodeMirrorInfos.GetLength(); ++i) + for (uint32 i = 0; i < mNodeMirrorInfos.size(); ++i) { if (mNodeMirrorInfos[i].mAxis == MCORE_INVALIDINDEX8) { @@ -283,17 +274,17 @@ namespace EMotionFX void Actor::RemoveAllMaterials() { // for all LODs - for (uint32 i = 0; i < mMaterials.GetLength(); ++i) + for (uint32 i = 0; i < mMaterials.size(); ++i) { // delete all materials - const uint32 numMats = mMaterials[i].GetLength(); + const uint32 numMats = mMaterials[i].size(); for (uint32 m = 0; m < numMats; ++m) { mMaterials[i][m]->Destroy(); } } - mMaterials.Clear(); + mMaterials.clear(); } @@ -305,8 +296,7 @@ namespace EMotionFX lodLevels.emplace_back(); LODLevel& newLOD = lodLevels.back(); const uint32 numNodes = mSkeleton->GetNumNodes(); - newLOD.mNodeInfos.SetMemoryCategory(EMFX_MEMCATEGORY_ACTORS); - newLOD.mNodeInfos.Resize(numNodes); + newLOD.mNodeInfos.resize(numNodes); const size_t numLODs = lodLevels.size(); const size_t lodIndex = numLODs - 1; @@ -329,11 +319,10 @@ namespace EMotionFX } // create a new material array for the new LOD level - mMaterials.Resize(static_cast(lodLevels.size())); - mMaterials[static_cast(lodIndex)].SetMemoryCategory(EMFX_MEMCATEGORY_ACTORS); + mMaterials.resize(lodLevels.size()); // create an empty morph setup for the new LOD level - mMorphSetups.Add(nullptr); + mMorphSetups.emplace_back(nullptr); // copy data from the previous LOD level if wanted if (copyFromLastLODLevel && numLODs > 0) @@ -347,12 +336,11 @@ namespace EMotionFX { AZStd::vector& lodLevels = m_meshLodData.m_lodLevels; - lodLevels.insert(lodLevels.begin()+insertAt, {}); + lodLevels.emplace(lodLevels.begin()+insertAt); LODLevel& newLOD = lodLevels[insertAt]; const uint32 lodIndex = insertAt; const uint32 numNodes = mSkeleton->GetNumNodes(); - newLOD.mNodeInfos.SetMemoryCategory(EMFX_MEMCATEGORY_ACTORS); - newLOD.mNodeInfos.Resize(numNodes); + newLOD.mNodeInfos.resize(numNodes); // get the number of nodes, iterate through them, create a new LOD level and copy over the meshes from the last LOD level for (uint32 i = 0; i < numNodes; ++i) @@ -363,11 +351,10 @@ namespace EMotionFX } // create a new material array for the new LOD level - mMaterials.Insert(insertAt); - mMaterials[lodIndex].SetMemoryCategory(EMFX_MEMCATEGORY_ACTORS); + mMaterials.emplace(AZStd::next(begin(mMaterials), insertAt)); // create an empty morph setup for the new LOD level - mMorphSetups.Insert(insertAt, nullptr); + mMorphSetups.emplace(AZStd::next(begin(mMorphSetups), insertAt), nullptr); } // replace existing LOD level with the current actor @@ -424,12 +411,12 @@ namespace EMotionFX // copy the materials const uint32 numMaterials = copyActor->GetNumMaterials(copyLODLevel); - for (uint32 i = 0; i < mMaterials[replaceLODLevel].GetLength(); ++i) + for (uint32 i = 0; i < mMaterials[replaceLODLevel].size(); ++i) { mMaterials[replaceLODLevel][i]->Destroy(); } - mMaterials[replaceLODLevel].Clear(); - mMaterials[replaceLODLevel].Reserve(numMaterials); + mMaterials[replaceLODLevel].clear(); + mMaterials[replaceLODLevel].reserve(numMaterials); for (uint32 i = 0; i < numMaterials; ++i) { AddMaterial(replaceLODLevel, copyActor->GetMaterial(copyLODLevel, i)->Clone()); @@ -457,15 +444,11 @@ namespace EMotionFX m_meshLodData.m_lodLevels.resize(numLODs); // reserve space for the materials - mMaterials.Resize(numLODs); - for (uint32 i = 0; i < numLODs; ++i) - { - mMaterials[i].SetMemoryCategory(EMFX_MEMCATEGORY_ACTORS); - } + mMaterials.resize(numLODs); if (adjustMorphSetup) { - mMorphSetups.Resize(numLODs); + mMorphSetups.resize(numLODs); for (uint32 i = 0; i < numLODs; ++i) { mMorphSetups[i] = nullptr; @@ -639,7 +622,7 @@ namespace EMotionFX // verify if the skinning will look correctly in the given geometry LOD for a given skeletal LOD level - void Actor::VerifySkinning(MCore::Array& conflictNodeFlags, uint32 skeletalLODLevel, uint32 geometryLODLevel) + void Actor::VerifySkinning(AZStd::vector& conflictNodeFlags, uint32 skeletalLODLevel, uint32 geometryLODLevel) { uint32 n; @@ -647,13 +630,13 @@ namespace EMotionFX const uint32 numNodes = mSkeleton->GetNumNodes(); // check if the conflict node flag array's size is set to the number of nodes inside the actor - if (conflictNodeFlags.GetLength() != numNodes) + if (conflictNodeFlags.size() != numNodes) { - conflictNodeFlags.Resize(numNodes); + conflictNodeFlags.resize(numNodes); } // reset the conflict node array to zero which means we don't have any conflicting nodes yet - MCore::MemSet(conflictNodeFlags.GetPtr(), 0, numNodes * sizeof(int8)); + MCore::MemSet(conflictNodeFlags.data(), 0, numNodes * sizeof(int8)); // iterate over the all nodes in the actor for (n = 0; n < numNodes; ++n) @@ -791,7 +774,7 @@ namespace EMotionFX const uint32 numLODs = GetNumLODLevels(); // for all LODs, get rid of all the morph setups for each geometry LOD - for (i = 0; i < mMorphSetups.GetLength(); ++i) + for (i = 0; i < mMorphSetups.size(); ++i) { if (mMorphSetups[i]) { @@ -882,11 +865,11 @@ namespace EMotionFX // remove the given material and reassign all material numbers of the submeshes void Actor::RemoveMaterial(uint32 lodLevel, uint32 index) { - MCORE_ASSERT(lodLevel < mMaterials.GetLength()); + MCORE_ASSERT(lodLevel < mMaterials.size()); // first of all remove the given material mMaterials[lodLevel][index]->Destroy(); - mMaterials[lodLevel].Remove(index); + mMaterials[lodLevel].erase(AZStd::next(begin(mMaterials[lodLevel]), index)); } @@ -930,10 +913,10 @@ namespace EMotionFX // extract a bone list - void Actor::ExtractBoneList(uint32 lodLevel, MCore::Array* outBoneList) const + void Actor::ExtractBoneList(uint32 lodLevel, AZStd::vector* outBoneList) const { // clear the existing items - outBoneList->Clear(); + outBoneList->clear(); // for all nodes const uint32 numNodes = mSkeleton->GetNumNodes(); @@ -966,9 +949,9 @@ namespace EMotionFX uint32 nodeNr = skinningLayer->GetInfluence(v, i)->GetNodeNr(); // check if it is already in the bone list, if not, add it - if (outBoneList->Contains(nodeNr) == false) + if (AZStd::find(begin(*outBoneList), end(*outBoneList), nodeNr) == end(*outBoneList)) { - outBoneList->Add(nodeNr); + outBoneList->emplace_back(nodeNr); } } } @@ -984,7 +967,7 @@ namespace EMotionFX for (uint32 i = 0; i < numDependencies; ++i) { // add it to the actor instance - mDependencies.Add(*actor->GetDependency(i)); + mDependencies.emplace_back(*actor->GetDependency(i)); // recursive into the actor we are dependent on RecursiveAddDependencies(actor->GetDependency(i)->mActor); @@ -1083,7 +1066,7 @@ namespace EMotionFX } // allocate the data if we haven't already - if (mNodeMirrorInfos.GetLength() == 0) + if (mNodeMirrorInfos.size() == 0) { AllocateNodeMirrorInfos(); } @@ -1101,7 +1084,7 @@ namespace EMotionFX bool Actor::MapNodeMotionSource(uint16 sourceNodeIndex, uint16 targetNodeIndex) { // allocate the data if we haven't already - if (mNodeMirrorInfos.GetLength() == 0) + if (mNodeMirrorInfos.size() == 0) { AllocateNodeMirrorInfos(); } @@ -1267,17 +1250,17 @@ namespace EMotionFX // generate a path from the current node towards the root - void Actor::GenerateUpdatePathToRoot(uint32 endNodeIndex, MCore::Array& outPath) const + void Actor::GenerateUpdatePathToRoot(uint32 endNodeIndex, AZStd::vector& outPath) const { - outPath.Clear(false); - outPath.Reserve(32); + outPath.clear(); + outPath.reserve(32); // start at the end effector Node* currentNode = mSkeleton->GetNode(endNodeIndex); while (currentNode) { // add the current node to the update list - outPath.Add(currentNode->GetNodeIndex()); + outPath.emplace_back(currentNode->GetNodeIndex()); // move up the hierarchy, towards the root and end node currentNode = currentNode->GetParentNode(); @@ -1361,7 +1344,7 @@ namespace EMotionFX ReinitializeMeshDeformers(); // make sure our world space bind pose is updated too - if (mMorphSetups.GetLength() > 0 && mMorphSetups[0]) + if (mMorphSetups.size() > 0 && mMorphSetups[0]) { mSkeleton->GetBindPose()->ResizeNumMorphs(mMorphSetups[0]->GetNumMorphTargets()); } @@ -1594,7 +1577,7 @@ namespace EMotionFX Pose pose; pose.LinkToActor(this); - const uint32 numNodes = mNodeMirrorInfos.GetLength(); + const uint32 numNodes = mNodeMirrorInfos.size(); for (uint32 i = 0; i < numNodes; ++i) { const uint16 motionSource = (GetHasMirrorInfo()) ? GetNodeMirrorInfo(i).mSourceNode : static_cast(i); @@ -1723,21 +1706,21 @@ namespace EMotionFX // get the array of node mirror infos - const MCore::Array& Actor::GetNodeMirrorInfos() const + const AZStd::vector& Actor::GetNodeMirrorInfos() const { return mNodeMirrorInfos; } // get the array of node mirror infos - MCore::Array& Actor::GetNodeMirrorInfos() + AZStd::vector& Actor::GetNodeMirrorInfos() { return mNodeMirrorInfos; } // set the node mirror infos directly - void Actor::SetNodeMirrorInfos(const MCore::Array& mirrorInfos) + void Actor::SetNodeMirrorInfos(const AZStd::vector& mirrorInfos) { mNodeMirrorInfos = mirrorInfos; } @@ -1862,7 +1845,7 @@ namespace EMotionFX AZStd::vector& lodLevels = m_meshLodData.m_lodLevels; for (LODLevel& lodLevel : lodLevels) { - lodLevel.mNodeInfos.Resize(numNodes); + lodLevel.mNodeInfos.resize(numNodes); } Pose* bindPose = mSkeleton->GetBindPose(); @@ -1878,7 +1861,7 @@ namespace EMotionFX AZStd::vector& lodLevels = m_meshLodData.m_lodLevels; for (LODLevel& lodLevel : lodLevels) { - lodLevel.mNodeInfos.AddEmpty(); + lodLevel.mNodeInfos.emplace_back(); } mSkeleton->GetBindPose()->LinkToActor(this, Pose::FLAG_LOCALTRANSFORMREADY, false); @@ -1909,7 +1892,7 @@ namespace EMotionFX AZStd::vector& lodLevels = m_meshLodData.m_lodLevels; for (LODLevel& lodLevel : lodLevels) { - lodLevel.mNodeInfos.Remove(nr); + lodLevel.mNodeInfos.erase(AZStd::next(begin(lodLevel.mNodeInfos), nr)); } } @@ -1920,20 +1903,20 @@ namespace EMotionFX AZStd::vector& lodLevels = m_meshLodData.m_lodLevels; for (LODLevel& lodLevel : lodLevels) { - lodLevel.mNodeInfos.Clear(); + lodLevel.mNodeInfos.clear(); } } void Actor::ReserveMaterials(uint32 lodLevel, uint32 numMaterials) { - mMaterials[lodLevel].Reserve(numMaterials); + mMaterials[lodLevel].reserve(numMaterials); } // get a material Material* Actor::GetMaterial(uint32 lodLevel, uint32 nr) const { - MCORE_ASSERT(lodLevel < mMaterials.GetLength()); - MCORE_ASSERT(nr < mMaterials[lodLevel].GetLength()); + MCORE_ASSERT(lodLevel < mMaterials.size()); + MCORE_ASSERT(nr < mMaterials[lodLevel].size()); return mMaterials[lodLevel][nr]; } @@ -1941,10 +1924,10 @@ namespace EMotionFX // get a material by name uint32 Actor::FindMaterialIndexByName(uint32 lodLevel, const char* name) const { - MCORE_ASSERT(lodLevel < mMaterials.GetLength()); + MCORE_ASSERT(lodLevel < mMaterials.size()); // search through all materials - const uint32 numMaterials = mMaterials[lodLevel].GetLength(); + const uint32 numMaterials = mMaterials[lodLevel].size(); for (uint32 i = 0; i < numMaterials; ++i) { if (mMaterials[lodLevel][i]->GetNameString() == name) @@ -1960,27 +1943,26 @@ namespace EMotionFX // set a material void Actor::SetMaterial(uint32 lodLevel, uint32 nr, Material* mat) { - MCORE_ASSERT(lodLevel < mMaterials.GetLength()); - MCORE_ASSERT(nr < mMaterials[lodLevel].GetLength()); + MCORE_ASSERT(lodLevel < mMaterials.size()); + MCORE_ASSERT(nr < mMaterials[lodLevel].size()); mMaterials[lodLevel][nr] = mat; } void Actor::AddMaterial(uint32 lodLevel, Material* mat) { - MCORE_ASSERT(lodLevel < mMaterials.GetLength()); - mMaterials[lodLevel].Add(mat); + MCORE_ASSERT(lodLevel < mMaterials.size()); + mMaterials[lodLevel].emplace_back(mat); } - uint32 Actor::GetNumMaterials(uint32 lodLevel) const + size_t Actor::GetNumMaterials(uint32 lodLevel) const { - MCORE_ASSERT(lodLevel < mMaterials.GetLength()); - return mMaterials[lodLevel].GetLength(); + MCORE_ASSERT(lodLevel < mMaterials.size()); + return mMaterials[lodLevel].size(); } - uint32 Actor::GetNumLODLevels() const + size_t Actor::GetNumLODLevels() const { - const AZStd::vector& lodLevels = m_meshLodData.m_lodLevels; - return static_cast(lodLevels.size()); + return m_meshLodData.m_lodLevels.size(); } @@ -2022,7 +2004,7 @@ namespace EMotionFX void Actor::AddDependency(const Dependency& dependency) { - mDependencies.Add(dependency); + mDependencies.emplace_back(dependency); } @@ -2459,8 +2441,8 @@ namespace EMotionFX const AZ::u32 numSubMeshes = mesh->GetNumSubMeshes(); for (AZ::u32 subMeshIndex = 0; subMeshIndex < numSubMeshes; ++subMeshIndex) { - const MCore::Array& subMeshJoints = mesh->GetSubMesh(subMeshIndex)->GetBonesArray(); - const AZ::u32 numSubMeshJoints = subMeshJoints.GetLength(); + const AZStd::vector& subMeshJoints = mesh->GetSubMesh(subMeshIndex)->GetBonesArray(); + const AZ::u32 numSubMeshJoints = subMeshJoints.size(); for (AZ::u32 i = 0; i < numSubMeshJoints; ++i) { InsertJointAndParents(subMeshJoints[i], includedJointIndices); @@ -2678,13 +2660,13 @@ namespace EMotionFX // Remove all the materials and add them back based on the meshAsset. Eventually we will remove all the material from Actor and // GLActor. RemoveAllMaterials(); - mMaterials.Resize(static_cast(numLODLevels)); + mMaterials.resize(numLODLevels); for (size_t lodLevel = 0; lodLevel < numLODLevels; ++lodLevel) { const AZ::Data::Asset& lodAsset = lodAssets[lodLevel]; - lodLevels[lodLevel].mNodeInfos.Resize(numNodes); + lodLevels[lodLevel].mNodeInfos.resize(numNodes); // Create a single mesh for the actor. Mesh* mesh = Mesh::CreateFromModelLod(lodAsset, m_skinToSkeletonIndexMap); @@ -2798,7 +2780,7 @@ namespace EMotionFX const AZStd::array_view>& lodAssets = m_meshAsset->GetLodAssets(); const size_t numLODLevels = lodAssets.size(); - AZ_Assert(mMorphSetups.GetLength() == numLODLevels, "There needs to be a morph setup for every single LOD level."); + AZ_Assert(mMorphSetups.size() == numLODLevels, "There needs to be a morph setup for every single LOD level."); for (size_t lodLevel = 0; lodLevel < numLODLevels; ++lodLevel) { diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/Actor.h b/Gems/EMotionFX/Code/EMotionFX/Source/Actor.h index faf5b6b94d..0894d22c4c 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/Actor.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/Actor.h @@ -22,7 +22,7 @@ // include MCore related files #include -#include +#include #include #include @@ -188,7 +188,7 @@ namespace EMotionFX * @param endNodeIndex The node index to generate the path to. * @param outPath the array that will contain the path. */ - void GenerateUpdatePathToRoot(uint32 endNodeIndex, MCore::Array& outPath) const; + void GenerateUpdatePathToRoot(uint32 endNodeIndex, AZStd::vector& outPath) const; /** * Set the motion extraction node. @@ -245,7 +245,7 @@ namespace EMotionFX * @param outBoneList The array of indices to nodes that will be filled with the nodes that are bones. When the outBoneList array * already contains items, the array will first be cleared, so all existing contents will be lost. */ - void ExtractBoneList(uint32 lodLevel, MCore::Array* outBoneList) const; + void ExtractBoneList(uint32 lodLevel, AZStd::vector* outBoneList) const; //------------------------------------------------ void SetPhysicsSetup(const AZStd::shared_ptr& physicsSetup); @@ -313,7 +313,7 @@ namespace EMotionFX * @param lodLevel The LOD level to get the number of material from. * @result The number of materials this actor has/uses. */ - uint32 GetNumMaterials(uint32 lodLevel) const; + size_t GetNumMaterials(uint32 lodLevel) const; /** * Removes all materials from this actor. @@ -367,7 +367,7 @@ namespace EMotionFX * Get the number of LOD levels inside this actor. * @result The number of LOD levels. This value is at least 1, since the full detail LOD is always there. */ - uint32 GetNumLODLevels() const; + size_t GetNumLODLevels() const; //-------------------------------------------------------------------------- @@ -438,7 +438,7 @@ namespace EMotionFX * disabled nodes from the given skeletal LOD level. * @param geometryLODLevel The geometry LOD level to test the skeletal LOD against with. */ - void VerifySkinning(MCore::Array& conflictNodeFlags, uint32 skeletalLODLevel, uint32 geometryLODLevel); + void VerifySkinning(AZStd::vector& conflictNodeFlags, uint32 skeletalLODLevel, uint32 geometryLODLevel); /** * Checks if the given material is used by a given mesh. @@ -522,7 +522,7 @@ namespace EMotionFX * Get the number of dependencies. * @result The number of dependencies that this actor has on other actors. */ - MCORE_INLINE uint32 GetNumDependencies() const { return mDependencies.GetLength(); } + MCORE_INLINE size_t GetNumDependencies() const { return mDependencies.size(); } /** * Get a given dependency. @@ -658,7 +658,7 @@ namespace EMotionFX */ MCORE_INLINE const NodeMirrorInfo& GetNodeMirrorInfo(uint32 nodeIndex) const { return mNodeMirrorInfos[nodeIndex]; } - MCORE_INLINE bool GetHasMirrorInfo() const { return (mNodeMirrorInfos.GetLength() != 0); } + MCORE_INLINE bool GetHasMirrorInfo() const { return (mNodeMirrorInfos.size() != 0); } //--------------------------------------------------------------- @@ -749,9 +749,9 @@ namespace EMotionFX void PostCreateInit(bool makeGeomLodsCompatibleWithSkeletalLODs = true, bool convertUnitType = true); void AutoDetectMirrorAxes(); - const MCore::Array& GetNodeMirrorInfos() const; - MCore::Array& GetNodeMirrorInfos(); - void SetNodeMirrorInfos(const MCore::Array& mirrorInfos); + const AZStd::vector& GetNodeMirrorInfos() const; + AZStd::vector& GetNodeMirrorInfos(); + void SetNodeMirrorInfos(const AZStd::vector& mirrorInfos); bool GetHasMirrorAxesDetected() const; MCORE_INLINE const AZStd::vector& GetInverseBindPoseTransforms() const { return mInvBindPoseTransforms; } @@ -861,15 +861,38 @@ namespace EMotionFX MeshDeformerStack* mStack; NodeLODInfo(); + NodeLODInfo(const NodeLODInfo&) = delete; + NodeLODInfo(NodeLODInfo&& rhs) + { + if (&rhs == this) + { + return; + } + mMesh = rhs.mMesh; + mStack = rhs.mStack; + rhs.mMesh = nullptr; + rhs.mStack = nullptr; + } + NodeLODInfo& operator=(const NodeLODInfo&) = delete; + NodeLODInfo& operator=(NodeLODInfo&& rhs) + { + if (&rhs == this) + { + return *this; + } + mMesh = rhs.mMesh; + mStack = rhs.mStack; + rhs.mMesh = nullptr; + rhs.mStack = nullptr; + return *this; + } ~NodeLODInfo(); }; // a lod level struct EMFX_API LODLevel { - MCore::Array mNodeInfos; - - LODLevel(); + AZStd::vector mNodeInfos; }; struct MeshLODData @@ -896,12 +919,12 @@ namespace EMotionFX Node* FindMeshJoint(const AZ::Data::Asset& lodModelAsset) const; Skeleton* mSkeleton; /**< The skeleton, containing the nodes and bind pose. */ - MCore::Array mDependencies; /**< The dependencies on other actors (shared meshes and transforms). */ + AZStd::vector mDependencies; /**< The dependencies on other actors (shared meshes and transforms). */ AZStd::string mName; /**< The name of the actor. */ AZStd::string mFileName; /**< The filename of the actor. */ - MCore::Array mNodeMirrorInfos; /**< The array of node mirror info. */ - MCore::Array< MCore::Array< Material* > > mMaterials; /**< A collection of materials (for each lod). */ - MCore::Array< MorphSetup* > mMorphSetups; /**< A morph setup for each geometry LOD. */ + AZStd::vector mNodeMirrorInfos; /**< The array of node mirror info. */ + AZStd::vector< AZStd::vector< Material* > > mMaterials; /**< A collection of materials (for each lod). */ + AZStd::vector< MorphSetup* > mMorphSetups; /**< A morph setup for each geometry LOD. */ MCore::SmallArray mNodeGroups; /**< The set of node groups. */ AZStd::shared_ptr m_physicsSetup; /**< Hit detection, ragdoll and cloth colliders, joint limits and rigid bodies. */ AZStd::shared_ptr m_simulatedObjectSetup; /**< Setup for simulated objects */ diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/ActorInstance.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/ActorInstance.cpp index b80aab3c50..34af57026a 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/ActorInstance.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/ActorInstance.cpp @@ -45,11 +45,7 @@ namespace EMotionFX { MCORE_ASSERT(actor); - // set the memory categories - mAttachments.SetMemoryCategory(EMFX_MEMCATEGORY_ACTORINSTANCES); - mDependencies.SetMemoryCategory(EMFX_MEMCATEGORY_ACTORINSTANCES); - mEnabledNodes.SetMemoryCategory(EMFX_MEMCATEGORY_ACTORINSTANCES); - mEnabledNodes.Reserve(actor->GetNumNodes()); + mEnabledNodes.reserve(actor->GetNumNodes()); // set the actor and create the motion system mBoolFlags = 0; @@ -174,7 +170,7 @@ namespace EMotionFX // delete all attachments // actor instances that are attached will be detached, and not deleted from memory - const uint32 numAttachments = mAttachments.GetLength(); + const uint32 numAttachments = mAttachments.size(); for (uint32 i = 0; i < numAttachments; ++i) { ActorInstance* attachmentActorInstance = mAttachments[i]->GetAttachmentActorInstance(); @@ -187,7 +183,7 @@ namespace EMotionFX } mAttachments[i]->Destroy(); } - mAttachments.Clear(); + mAttachments.clear(); if (mMorphSetup) { @@ -396,7 +392,7 @@ namespace EMotionFX // Update the mesh deformers. const Skeleton* skeleton = mActor->GetSkeleton(); - const uint32 numNodes = mEnabledNodes.GetLength(); + const uint32 numNodes = mEnabledNodes.size(); for (uint32 i = 0; i < numNodes; ++i) { const uint16 nodeNr = mEnabledNodes[i]; @@ -416,7 +412,7 @@ namespace EMotionFX // Update the mesh morph deformers. const Skeleton* skeleton = mActor->GetSkeleton(); - const uint32 numNodes = mEnabledNodes.GetLength(); + const uint32 numNodes = mEnabledNodes.size(); for (uint32 i = 0; i < numNodes; ++i) { const uint16 nodeNr = mEnabledNodes[i]; @@ -448,7 +444,7 @@ namespace EMotionFX GetActorManager().GetScheduler()->RecursiveRemoveActorInstance(root); // add the attachment - mAttachments.Add(attachment); + mAttachments.emplace_back(attachment); ActorInstance* attachmentActorInstance = attachment->GetAttachmentActorInstance(); if (attachmentActorInstance) { @@ -468,7 +464,7 @@ namespace EMotionFX uint32 ActorInstance::FindAttachmentNr(ActorInstance* actorInstance) { // for all attachments - const uint32 numAttachments = mAttachments.GetLength(); + const uint32 numAttachments = mAttachments.size(); for (uint32 i = 0; i < numAttachments; ++i) { if (mAttachments[i]->GetAttachmentActorInstance() == actorInstance) @@ -498,7 +494,7 @@ namespace EMotionFX // remove an attachment void ActorInstance::RemoveAttachment(uint32 nr, bool delFromMem) { - MCORE_ASSERT(nr < mAttachments.GetLength()); + MCORE_ASSERT(nr < mAttachments.size()); // first remove the current attachment tree from the scheduler ActorInstance* root = FindAttachmentRoot(); @@ -528,7 +524,7 @@ namespace EMotionFX } // remove it from the attachment list - mAttachments.Remove(nr); + mAttachments.erase(AZStd::next(begin(mAttachments), nr)); // and re-add the root to the scheduler GetActorManager().GetScheduler()->RecursiveInsertActorInstance(root, 0); @@ -544,9 +540,9 @@ namespace EMotionFX void ActorInstance::RemoveAllAttachments(bool delFromMem) { // keep removing the last attachment until there are none left - while (mAttachments.GetLength()) + while (mAttachments.size()) { - RemoveAttachment(mAttachments.GetLength() - 1, delFromMem); + RemoveAttachment(mAttachments.size() - 1, delFromMem); } } @@ -554,19 +550,19 @@ namespace EMotionFX void ActorInstance::UpdateDependencies() { // get rid of existing dependencies - mDependencies.Clear(); + mDependencies.clear(); // add the main dependency Actor::Dependency mainDependency; mainDependency.mActor = mActor; mainDependency.mAnimGraph = (mAnimGraphInstance) ? mAnimGraphInstance->GetAnimGraph() : nullptr; - mDependencies.Add(mainDependency); + mDependencies.emplace_back(mainDependency); // add all dependencies stored inside the actor const uint32 numDependencies = mActor->GetNumDependencies(); for (uint32 i = 0; i < numDependencies; ++i) { - mDependencies.Add(*mActor->GetDependency(i)); + mDependencies.emplace_back(*mActor->GetDependency(i)); } } @@ -574,7 +570,7 @@ namespace EMotionFX void ActorInstance::UpdateAttachments() { // update all attachments - const uint32 numAttachments = mAttachments.GetLength(); + const uint32 numAttachments = mAttachments.size(); for (uint32 i = 0; i < numAttachments; ++i) { mAttachments[i]->Update(); @@ -1089,7 +1085,7 @@ namespace EMotionFX void ActorInstance::EnableNode(uint16 nodeIndex) { // if this node already is at an enabled state, do nothing - if (mEnabledNodes.Contains(nodeIndex)) + if (AZStd::find(begin(mEnabledNodes), end(mEnabledNodes), nodeIndex) != end(mEnabledNodes)) { return; } @@ -1105,16 +1101,16 @@ namespace EMotionFX uint32 parentIndex = skeleton->GetNode(curNode)->GetParentIndex(); if (parentIndex != MCORE_INVALIDINDEX32) { - const uint32 parentArrayIndex = mEnabledNodes.Find(static_cast(parentIndex)); - if (parentArrayIndex != MCORE_INVALIDINDEX32) + const auto parentArrayIter = AZStd::find(begin(mEnabledNodes), end(mEnabledNodes), static_cast(parentIndex)); + if (parentArrayIter != end(mEnabledNodes)) { - if (parentArrayIndex + 1 >= mEnabledNodes.GetLength()) + if (parentArrayIter + 1 == end(mEnabledNodes)) { - mEnabledNodes.Add(nodeIndex); + mEnabledNodes.emplace_back(nodeIndex); } else { - mEnabledNodes.Insert(parentArrayIndex + 1, nodeIndex); + mEnabledNodes.emplace(parentArrayIter + 1, nodeIndex); } found = true; } @@ -1125,7 +1121,7 @@ namespace EMotionFX } else // if we're dealing with a root node, insert it in the front of the array { - mEnabledNodes.Insert(0, nodeIndex); + mEnabledNodes.emplace(AZStd::next(begin(mEnabledNodes), 0), nodeIndex); found = true; } } while (found == false); @@ -1135,14 +1131,18 @@ namespace EMotionFX void ActorInstance::DisableNode(uint16 nodeIndex) { // try to remove the node from the array - mEnabledNodes.RemoveByValue(nodeIndex); + const auto it = AZStd::find(begin(mEnabledNodes), end(mEnabledNodes), nodeIndex); + if (it != end(mEnabledNodes)) + { + mEnabledNodes.erase(it); + } } // enable all nodes void ActorInstance::EnableAllNodes() { const uint32 numNodes = mActor->GetNumNodes(); - mEnabledNodes.Resize(numNodes); + mEnabledNodes.resize(numNodes); for (uint32 i = 0; i < numNodes; ++i) { mEnabledNodes[i] = static_cast(i); @@ -1152,7 +1152,7 @@ namespace EMotionFX // disable all nodes void ActorInstance::DisableAllNodes() { - mEnabledNodes.Clear(); + mEnabledNodes.clear(); } // change the skeletal LOD level @@ -1587,9 +1587,9 @@ namespace EMotionFX m_aabb = aabb; } - uint32 ActorInstance::GetNumAttachments() const + size_t ActorInstance::GetNumAttachments() const { - return mAttachments.GetLength(); + return mAttachments.size(); } Attachment* ActorInstance::GetAttachment(uint32 nr) const @@ -1612,9 +1612,9 @@ namespace EMotionFX return mSelfAttachment; } - uint32 ActorInstance::GetNumDependencies() const + size_t ActorInstance::GetNumDependencies() const { - return mDependencies.GetLength(); + return mDependencies.size(); } Actor::Dependency* ActorInstance::GetDependency(uint32 nr) @@ -1779,7 +1779,7 @@ namespace EMotionFX SetIsVisible(isVisible); // recurse to all child attachments - const uint32 numAttachments = mAttachments.GetLength(); + const uint32 numAttachments = mAttachments.size(); for (uint32 i = 0; i < numAttachments; ++i) { mAttachments[i]->GetAttachmentActorInstance()->RecursiveSetIsVisible(isVisible); diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/ActorInstance.h b/Gems/EMotionFX/Code/EMotionFX/Source/ActorInstance.h index 4488a1386f..4b605afc3b 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/ActorInstance.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/ActorInstance.h @@ -599,7 +599,7 @@ namespace EMotionFX * Get the number of attachments that have been added to this actor instance. * @result The number of attachments added to this actor instance. */ - uint32 GetNumAttachments() const; + size_t GetNumAttachments() const; /** * Get a specific attachment. @@ -664,7 +664,7 @@ namespace EMotionFX * Get the number of dependencies that this actor instance has on other actors. * @result The number of dependencies. */ - uint32 GetNumDependencies() const; + size_t GetNumDependencies() const; /** * Get a given dependency. @@ -788,13 +788,13 @@ namespace EMotionFX * Get direct access to the array of enabled nodes. * @result A read only reference to the array of enabled nodes. The values inside of this array are the node numbers of the enabled nodes. */ - MCORE_INLINE const MCore::Array& GetEnabledNodes() const { return mEnabledNodes; } + MCORE_INLINE const AZStd::vector& GetEnabledNodes() const { return mEnabledNodes; } /** * Get the number of enabled nodes inside this actor instance. * @result The number of nodes that have been enabled and are being updated. */ - MCORE_INLINE uint32 GetNumEnabledNodes() const { return mEnabledNodes.GetLength(); } + MCORE_INLINE size_t GetNumEnabledNodes() const { return mEnabledNodes.size(); } /** * Get the node number of a given enabled node. @@ -873,10 +873,10 @@ namespace EMotionFX Transform mParentWorldTransform = Transform::CreateIdentity(); Transform mTrajectoryDelta = Transform::CreateIdentityWithZeroScale(); - MCore::Array mAttachments; /**< The attachments linked to this actor instance. */ - MCore::Array mDependencies; /**< The actor dependencies, which specify which Actor objects this instance is dependent on. */ + AZStd::vector mAttachments; /**< The attachments linked to this actor instance. */ + AZStd::vector mDependencies; /**< The actor dependencies, which specify which Actor objects this instance is dependent on. */ MorphSetupInstance* mMorphSetup; /**< The morph setup instance. */ - MCore::Array mEnabledNodes; /**< The list of nodes that are enabled. */ + AZStd::vector mEnabledNodes; /**< The list of nodes that are enabled. */ Actor* mActor; /**< A pointer to the parent actor where this is an instance from. */ ActorInstance* mAttachedTo; /**< Specifies the actor where this actor is attached to, or nullptr when it is no attachment. */ diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp index e40a0dde5b..a8584163ed 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.cpp @@ -27,17 +27,13 @@ namespace EMotionFX { mScheduler = nullptr; - // set memory categories - mActorInstances.SetMemoryCategory(EMFX_MEMCATEGORY_ACTORMANAGER); - mRootActorInstances.SetMemoryCategory(EMFX_MEMCATEGORY_ACTORMANAGER); - // setup the default scheduler SetScheduler(MultiThreadScheduler::Create()); // reserve memory m_actors.reserve(512); - mActorInstances.Reserve(1024); - mRootActorInstances.Reserve(1024); + mActorInstances.reserve(1024); + mRootActorInstances.reserve(1024); } @@ -79,8 +75,8 @@ namespace EMotionFX void ActorManager::UnregisterAllActorInstances() { LockActorInstances(); - mActorInstances.Clear(); - mRootActorInstances.Clear(); + mActorInstances.clear(); + mRootActorInstances.clear(); if (mScheduler) { mScheduler->Clear(); @@ -104,7 +100,7 @@ namespace EMotionFX mScheduler = scheduler; // adjust all visibility flags to false for all actor instances - const uint32 numActorInstances = mActorInstances.GetLength(); + const uint32 numActorInstances = mActorInstances.size(); for (uint32 i = 0; i < numActorInstances; ++i) { mActorInstances[i]->SetIsVisible(false); @@ -139,7 +135,7 @@ namespace EMotionFX { LockActorInstances(); - mActorInstances.Add(actorInstance); + mActorInstances.emplace_back(actorInstance); UpdateActorInstanceStatus(actorInstance, false); UnlockActorInstances(); @@ -213,7 +209,7 @@ namespace EMotionFX LockActorInstances(); // get the number of actor instances and iterate through them - const uint32 numActorInstances = mActorInstances.GetLength(); + const uint32 numActorInstances = mActorInstances.size(); for (uint32 i = 0; i < numActorInstances; ++i) { if (mActorInstances[i] == actorInstance) @@ -233,7 +229,7 @@ namespace EMotionFX uint32 ActorManager::FindActorInstanceIndex(ActorInstance* actorInstance) const { // get the number of actor instances and iterate through them - const uint32 numActorInstances = mActorInstances.GetLength(); + const uint32 numActorInstances = mActorInstances.size(); for (uint32 i = 0; i < numActorInstances; ++i) { if (mActorInstances[i] == actorInstance) @@ -251,7 +247,7 @@ namespace EMotionFX ActorInstance* ActorManager::FindActorInstanceByID(uint32 id) const { // get the number of actor instances and iterate through them - const uint32 numActorInstances = mActorInstances.GetLength(); + const uint32 numActorInstances = mActorInstances.size(); for (uint32 i = 0; i < numActorInstances; ++i) { if (mActorInstances[i]->GetID() == id) @@ -349,15 +345,18 @@ namespace EMotionFX if (actorInstance->GetAttachedTo() == nullptr) { // make sure it's in the root list - if (mRootActorInstances.Contains(actorInstance) == false) + if (AZStd::find(begin(mRootActorInstances), end(mRootActorInstances), actorInstance) == end(mRootActorInstances)) { - mRootActorInstances.Add(actorInstance); + mRootActorInstances.emplace_back(actorInstance); } } else // no root actor instance { // remove it from the root list - mRootActorInstances.RemoveByValue(actorInstance); + if (const auto it = AZStd::find(begin(mRootActorInstances), end(mRootActorInstances), actorInstance); it != end(mRootActorInstances)) + { + mRootActorInstances.erase(it); + } mScheduler->RecursiveRemoveActorInstance(actorInstance); } @@ -374,10 +373,16 @@ namespace EMotionFX LockActorInstances(); // remove the actor instance from the list - mActorInstances.RemoveByValue(instance); + if (const auto it = AZStd::find(begin(mActorInstances), end(mActorInstances), instance); it != end(mActorInstances)) + { + mActorInstances.erase(it); + } // remove it from the list of roots, if it is in there - mRootActorInstances.RemoveByValue(instance); + if (const auto it = AZStd::find(begin(mRootActorInstances), end(mRootActorInstances), instance); it != end(mRootActorInstances)) + { + mRootActorInstances.erase(it); + } // remove it from the schedule mScheduler->RemoveActorInstance(instance); @@ -416,7 +421,7 @@ namespace EMotionFX } - const MCore::Array& ActorManager::GetActorInstanceArray() const + const AZStd::vector& ActorManager::GetActorInstanceArray() const { return mActorInstances; } diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.h b/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.h index 280cc33498..34b290cfff 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/ActorManager.h @@ -14,7 +14,7 @@ #include "BaseObject.h" #include "MemoryCategories.h" #include -#include +#include #include @@ -124,7 +124,7 @@ namespace EMotionFX * Get the number of actor instances that currently are registered. * @result The number of registered actor instances. */ - MCORE_INLINE uint32 GetNumActorInstances() const { return mActorInstances.GetLength(); } + MCORE_INLINE size_t GetNumActorInstances() const { return mActorInstances.size(); } /** * Get a given registered actor instance. @@ -137,7 +137,7 @@ namespace EMotionFX * Get the array of actor instances. * @result The const reference to the actor instance array. */ - const MCore::Array& GetActorInstanceArray() const; + const AZStd::vector& GetActorInstanceArray() const; /** * Find the given actor instance inside the actor manager and return its index. @@ -201,7 +201,7 @@ namespace EMotionFX * horse is the root attachment instance. * @result Returns the number of root actor instances. */ - MCORE_INLINE uint32 GetNumRootActorInstances() const { return mRootActorInstances.GetLength(); } + MCORE_INLINE size_t GetNumRootActorInstances() const { return mRootActorInstances.size(); } /** * Get a given root actor instance. @@ -255,9 +255,9 @@ namespace EMotionFX void UnlockActors(); private: - MCore::Array mActorInstances; /**< The registered actor instances. */ + AZStd::vector mActorInstances; /**< The registered actor instances. */ AZStd::vector> m_actors; /**< The registered actors. */ - MCore::Array mRootActorInstances; /**< Root actor instances (roots of all attachment chains). */ + AZStd::vector mRootActorInstances; /**< Root actor instances (roots of all attachment chains). */ ActorUpdateScheduler* mScheduler; /**< The update scheduler to use. */ MCore::MutexRecursive mActorLock; /**< The multithread lock for touching the actors array. */ MCore::MutexRecursive mActorInstanceLock; /**< The multithread lock for touching the actor instances array. */ diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraph.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraph.cpp index 7a9001433a..f049c498f6 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraph.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraph.cpp @@ -36,8 +36,6 @@ namespace EMotionFX AnimGraph::AnimGraph() : mGameControllerSettings(aznew AnimGraphGameControllerSettings()) { - mNodes.SetMemoryCategory(EMFX_MEMCATEGORY_ANIMGRAPH); - mID = MCore::GetIDGenerator().GenerateID(); mDirtyFlag = false; mAutoUnregister = true; @@ -50,7 +48,7 @@ namespace EMotionFX #endif // EMFX_DEVELOPMENT_BUILD // reserve some memory - mNodes.Reserve(1024); + mNodes.reserve(1024); // automatically register the anim graph GetAnimGraphManager().AddAnimGraph(this); @@ -628,7 +626,7 @@ namespace EMotionFX mRootStateMachine->RecursiveCollectNodesOfType(nodeType, outNodes); } - void AnimGraph::RecursiveCollectTransitionConditionsOfType(const AZ::TypeId& conditionType, MCore::Array* outConditions) const + void AnimGraph::RecursiveCollectTransitionConditionsOfType(const AZ::TypeId& conditionType, AZStd::vector* outConditions) const { mRootStateMachine->RecursiveCollectTransitionConditionsOfType(conditionType, outConditions); } @@ -725,8 +723,8 @@ namespace EMotionFX if (azrtti_istypeof(object)) { AnimGraphNode* node = static_cast(object); - node->SetNodeIndex(mNodes.GetLength()); - mNodes.Add(node); + node->SetNodeIndex(mNodes.size()); + mNodes.emplace_back(node); } // create a unique data for this added object in the animgraph instances as well @@ -765,7 +763,7 @@ namespace EMotionFX AnimGraphNode* node = static_cast(object); const uint32 nodeIndex = node->GetNodeIndex(); - const uint32 numNodes = mNodes.GetLength(); + const uint32 numNodes = mNodes.size(); for (uint32 i = nodeIndex + 1; i < numNodes; ++i) { AnimGraphNode* curNode = mNodes[i]; @@ -774,7 +772,7 @@ namespace EMotionFX } // remove the object from the array - mNodes.Remove(nodeIndex); + mNodes.erase(AZStd::next(begin(mNodes), nodeIndex)); } } @@ -789,14 +787,14 @@ namespace EMotionFX // reserve space for a given amount of nodes void AnimGraph::ReserveNumNodes(uint32 numNodes) { - mNodes.Reserve(numNodes); + mNodes.reserve(numNodes); } // Calculate number of motion nodes in the graph uint32 AnimGraph::CalcNumMotionNodes() const { - const uint32 numNodes = mNodes.GetLength(); + const uint32 numNodes = mNodes.size(); uint32 numMotionNodes = 0; for (uint32 i = 0; i < numNodes; ++i) { @@ -1029,7 +1027,7 @@ namespace EMotionFX void AnimGraph::RemoveInvalidConnections(bool logWarnings) { // Iterate over all nodes - const AZ::u32 numNodes = mNodes.GetLength(); + const AZ::u32 numNodes = mNodes.size(); for (AZ::u32 i = 0; i < numNodes; ++i) { AnimGraphNode* node = mNodes[i]; diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraph.h b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraph.h index e7c775d644..ab1cfd926f 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraph.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraph.h @@ -20,7 +20,7 @@ #include #include #include -#include +#include namespace EMotionFX { @@ -65,7 +65,7 @@ namespace EMotionFX AnimGraphStateTransition* RecursiveFindTransitionById(AnimGraphConnectionId transitionId) const; void RecursiveCollectNodesOfType(const AZ::TypeId& nodeType, AZStd::vector* outNodes) const; // note: outNodes is NOT cleared internally, nodes are added to the array - void RecursiveCollectTransitionConditionsOfType(const AZ::TypeId& conditionType, MCore::Array* outConditions) const; // note: outNodes is NOT cleared internally, nodes are added to the array + void RecursiveCollectTransitionConditionsOfType(const AZ::TypeId& conditionType, AZStd::vector* outConditions) const; // note: outNodes is NOT cleared internally, nodes are added to the array // Collects all objects of type and/or derived type void RecursiveCollectObjectsOfType(const AZ::TypeId& objectType, AZStd::vector& outObjects); @@ -381,7 +381,7 @@ namespace EMotionFX AnimGraphObject* GetObject(uint32 index) const { return mObjects[index]; } void ReserveNumObjects(uint32 numObjects); - uint32 GetNumNodes() const { return mNodes.GetLength(); } + size_t GetNumNodes() const { return mNodes.size(); } AnimGraphNode* GetNode(uint32 index) const { return mNodes[index]; } void ReserveNumNodes(uint32 numNodes); uint32 CalcNumMotionNodes() const; @@ -417,7 +417,7 @@ namespace EMotionFX AZStd::unordered_map m_valueParameterIndexByName; /**< Cached version of parameter index by name to accelerate lookups. */ AZStd::vector mNodeGroups; AZStd::vector mObjects; - MCore::Array mNodes; + AZStd::vector mNodes; AZStd::vector m_animGraphInstances; AZStd::string mFileName; AnimGraphStateMachine* mRootStateMachine; diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphGameControllerSettings.h b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphGameControllerSettings.h index e00fef8601..715b280690 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphGameControllerSettings.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphGameControllerSettings.h @@ -10,7 +10,7 @@ #include #include -#include +#include #include #include @@ -48,12 +48,11 @@ namespace EMotionFX struct EMFX_API ParameterInfo final { - AZ_RTTI(AnimGraphGameControllerSettings::ParameterInfo, "{C3220DB3-54FA-4719-80F0-CEAE5859C641}"); + AZ_TYPE_INFO(AnimGraphGameControllerSettings::ParameterInfo, "{C3220DB3-54FA-4719-80F0-CEAE5859C641}"); AZ_CLASS_ALLOCATOR_DECL ParameterInfo(); ParameterInfo(const char* parameterName); - virtual ~ParameterInfo() = default; static void Reflect(AZ::ReflectContext* context); @@ -66,12 +65,11 @@ namespace EMotionFX struct EMFX_API ButtonInfo final { - AZ_RTTI(AnimGraphGameControllerSettings::ButtonInfo, "{94027445-C44F-4310-9DF2-1A2F39518578}"); + AZ_TYPE_INFO(AnimGraphGameControllerSettings::ButtonInfo, "{94027445-C44F-4310-9DF2-1A2F39518578}"); AZ_CLASS_ALLOCATOR_DECL ButtonInfo(); ButtonInfo(AZ::u32 buttonIndex); - virtual ~ButtonInfo() = default; static void Reflect(AZ::ReflectContext* context); diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphInstance.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphInstance.cpp index 46764744a8..1082bc112b 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphInstance.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphInstance.cpp @@ -57,8 +57,6 @@ namespace EMotionFX mInitSettings = *initSettings; } - mParamValues.SetMemoryCategory(EMFX_MEMCATEGORY_ANIMGRAPH_INSTANCE); - mObjectFlags.SetMemoryCategory(EMFX_MEMCATEGORY_ANIMGRAPH_INSTANCE); m_eventHandlersByEventType.resize(EVENT_TYPE_ANIM_GRAPH_INSTANCE_LAST_EVENT - EVENT_TYPE_ANIM_GRAPH_INSTANCE_FIRST_EVENT + 1); // init the internal attributes (create them) @@ -145,7 +143,7 @@ namespace EMotionFX { if (delFromMem) { - const uint32 numParams = mParamValues.GetLength(); + const uint32 numParams = mParamValues.size(); for (uint32 i = 0; i < numParams; ++i) { if (mParamValues[i]) @@ -155,7 +153,7 @@ namespace EMotionFX } } - mParamValues.Clear(); + mParamValues.clear(); } @@ -268,10 +266,10 @@ namespace EMotionFX RemoveAllParameters(true); const ValueParameterVector& valueParameters = mAnimGraph->RecursivelyGetValueParameters(); - mParamValues.Resize(static_cast(valueParameters.size())); + mParamValues.resize(static_cast(valueParameters.size())); // init the values - const uint32 numParams = mParamValues.GetLength(); + const uint32 numParams = mParamValues.size(); for (uint32 i = 0; i < numParams; ++i) { mParamValues[i] = valueParameters[i]->ConstructDefaultValueAsAttribute(); @@ -284,22 +282,22 @@ namespace EMotionFX { // check how many parameters we need to add const ValueParameterVector& valueParameters = mAnimGraph->RecursivelyGetValueParameters(); - const int32 numToAdd = static_cast(valueParameters.size()) - mParamValues.GetLength(); + const int32 numToAdd = static_cast(valueParameters.size()) - mParamValues.size(); if (numToAdd <= 0) { return; } // make sure we have the right space pre-allocated - mParamValues.Reserve(static_cast(valueParameters.size())); + mParamValues.reserve(static_cast(valueParameters.size())); // add the remaining parameters - const uint32 startIndex = mParamValues.GetLength(); + const uint32 startIndex = mParamValues.size(); for (int32 i = 0; i < numToAdd; ++i) { const uint32 index = startIndex + i; - mParamValues.AddEmpty(); - mParamValues.GetLast() = valueParameters[index]->ConstructDefaultValueAsAttribute(); + mParamValues.emplace_back(); + mParamValues.back() = valueParameters[index]->ConstructDefaultValueAsAttribute(); } } @@ -315,7 +313,7 @@ namespace EMotionFX } } - mParamValues.Remove(index); + mParamValues.erase(AZStd::next(begin(mParamValues), index)); } @@ -333,7 +331,7 @@ namespace EMotionFX void AnimGraphInstance::ReInitParameterValues() { - const AZ::u32 parameterValueCount = mParamValues.GetLength(); + const AZ::u32 parameterValueCount = mParamValues.size(); for (AZ::u32 i = 0; i < parameterValueCount; ++i) { ReInitParameterValue(i); @@ -503,15 +501,15 @@ namespace EMotionFX // add the last anim graph parameter to this instance void AnimGraphInstance::AddParameterValue() { - mParamValues.Add(nullptr); - ReInitParameterValue(mParamValues.GetLength() - 1); + mParamValues.emplace_back(nullptr); + ReInitParameterValue(mParamValues.size() - 1); } // add the parameter of the animgraph, at a given index void AnimGraphInstance::InsertParameterValue(uint32 index) { - mParamValues.Insert(index, nullptr); + mParamValues.emplace(AZStd::next(begin(mParamValues), index), nullptr); ReInitParameterValue(index); } @@ -658,7 +656,7 @@ namespace EMotionFX void AnimGraphInstance::AddUniqueObjectData() { m_uniqueDatas.emplace_back(nullptr); - mObjectFlags.Add(0); + mObjectFlags.emplace_back(0); } // remove the given unique data object @@ -676,7 +674,7 @@ namespace EMotionFX } m_uniqueDatas.erase(m_uniqueDatas.begin() + index); - mObjectFlags.Remove(index); + mObjectFlags.erase(AZStd::next(begin(mObjectFlags), index)); } @@ -684,7 +682,7 @@ namespace EMotionFX { AnimGraphObjectData* data = m_uniqueDatas[index]; m_uniqueDatas.erase(m_uniqueDatas.begin() + index); - mObjectFlags.Remove(static_cast(index)); + mObjectFlags.erase(AZStd::next(begin(mObjectFlags), static_cast(index))); if (delFromMem && data) { data->Destroy(); @@ -707,7 +705,7 @@ namespace EMotionFX } m_uniqueDatas.clear(); - mObjectFlags.Clear(); + mObjectFlags.clear(); } @@ -813,7 +811,7 @@ namespace EMotionFX { const uint32 numObjects = mAnimGraph->GetNumObjects(); m_uniqueDatas.resize(numObjects); - mObjectFlags.Resize(numObjects); + mObjectFlags.resize(numObjects); for (uint32 i = 0; i < numObjects; ++i) { m_uniqueDatas[i] = nullptr; @@ -934,7 +932,7 @@ namespace EMotionFX // reset all node flags void AnimGraphInstance::ResetFlagsForAllObjects(uint32 flagsToDisable) { - const uint32 numObjects = mObjectFlags.GetLength(); + const uint32 numObjects = mObjectFlags.size(); for (uint32 i = 0; i < numObjects; ++i) { mObjectFlags[i] &= ~flagsToDisable; @@ -967,7 +965,7 @@ namespace EMotionFX // reset all node flags void AnimGraphInstance::ResetFlagsForAllObjects() { - MCore::MemSet(mObjectFlags.GetPtr(), 0, sizeof(uint32) * mObjectFlags.GetLength()); + MCore::MemSet(mObjectFlags.data(), 0, sizeof(uint32) * mObjectFlags.size()); for (AnimGraphInstance* childInstance : m_childAnimGraphInstances) { diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphInstance.h b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphInstance.h index 97d076d244..417883d16f 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphInstance.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphInstance.h @@ -16,7 +16,7 @@ #include #include #include -#include +#include #include @@ -302,9 +302,9 @@ namespace EMotionFX ActorInstance* mActorInstance; AnimGraphInstance* m_parentAnimGraphInstance; // If this anim graph instance is in a reference node, it will have a parent anim graph instance. AZStd::vector m_childAnimGraphInstances; // If this anim graph instance contains reference nodes, the anim graph instances will be listed here. - MCore::Array mParamValues; // a value for each AnimGraph parameter (the control parameters) + AZStd::vector mParamValues; // a value for each AnimGraph parameter (the control parameters) AZStd::vector m_uniqueDatas; // unique object data - MCore::Array mObjectFlags; // the object flags + AZStd::vector mObjectFlags; // the object flags using EventHandlerVector = AZStd::vector; AZStd::vector m_eventHandlersByEventType; /**< The event handler to use to process events organized by EventTypes. */ AZStd::vector m_internalAttributes; diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphManager.h b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphManager.h index 9f04517982..4973437b8e 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphManager.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphManager.h @@ -11,7 +11,7 @@ #include "EMotionFXConfig.h" #include #include "BaseObject.h" -#include +#include #include "AnimGraphObject.h" #include diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphNode.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphNode.cpp index 44d048c03c..f9896cf677 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphNode.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphNode.cpp @@ -1287,14 +1287,14 @@ namespace EMotionFX // collect child nodes of the given type - void AnimGraphNode::CollectChildNodesOfType(const AZ::TypeId& nodeType, MCore::Array* outNodes) const + void AnimGraphNode::CollectChildNodesOfType(const AZ::TypeId& nodeType, AZStd::vector* outNodes) const { for (AnimGraphNode* childNode : mChildNodes) { // check the current node type and add it to the output array in case they are the same if (azrtti_typeid(childNode) == nodeType) { - outNodes->Add(childNode); + outNodes->emplace_back(childNode); } } } @@ -1324,7 +1324,7 @@ namespace EMotionFX } } - void AnimGraphNode::RecursiveCollectTransitionConditionsOfType(const AZ::TypeId& conditionType, MCore::Array* outConditions) const + void AnimGraphNode::RecursiveCollectTransitionConditionsOfType(const AZ::TypeId& conditionType, AZStd::vector* outConditions) const { // check if the current node is a state machine if (azrtti_typeid(this) == azrtti_typeid()) @@ -1346,7 +1346,7 @@ namespace EMotionFX AnimGraphTransitionCondition* condition = transition->GetCondition(j); if (azrtti_typeid(condition) == conditionType) { - outConditions->Add(condition); + outConditions->emplace_back(condition); } } } @@ -1601,9 +1601,9 @@ namespace EMotionFX // collect internal objects - void AnimGraphNode::RecursiveCollectObjects(MCore::Array& outObjects) const + void AnimGraphNode::RecursiveCollectObjects(AZStd::vector& outObjects) const { - outObjects.Add(const_cast(this)); + outObjects.emplace_back(const_cast(this)); for (const AnimGraphNode* childNode : mChildNodes) { diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphNode.h b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphNode.h index c469631335..7377f27d7c 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphNode.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphNode.h @@ -270,7 +270,7 @@ namespace EMotionFX virtual bool RecursiveDetectCycles(AZStd::unordered_set& nodes) const; - void CollectChildNodesOfType(const AZ::TypeId& nodeType, MCore::Array* outNodes) const; // note: outNodes is NOT cleared internally, nodes are added to the array + void CollectChildNodesOfType(const AZ::TypeId& nodeType, AZStd::vector* outNodes) const; // note: outNodes is NOT cleared internally, nodes are added to the array /** * Collect child nodes of the given type. This will only iterate through the child nodes and isn't a recursive process. @@ -280,7 +280,7 @@ namespace EMotionFX void CollectChildNodesOfType(const AZ::TypeId& nodeType, AZStd::vector& outNodes) const; void RecursiveCollectNodesOfType(const AZ::TypeId& nodeType, AZStd::vector* outNodes) const; // note: outNodes is NOT cleared internally, nodes are added to the array - void RecursiveCollectTransitionConditionsOfType(const AZ::TypeId& conditionType, MCore::Array* outConditions) const; // note: outNodes is NOT cleared internally, nodes are added to the array + void RecursiveCollectTransitionConditionsOfType(const AZ::TypeId& conditionType, AZStd::vector* outConditions) const; // note: outNodes is NOT cleared internally, nodes are added to the array virtual void RecursiveCollectObjectsOfType(const AZ::TypeId& objectType, AZStd::vector& outObjects) const; @@ -916,7 +916,7 @@ namespace EMotionFX void SetHasError(AnimGraphObjectData* uniqueData, bool hasError); // collect internal objects - void RecursiveCollectObjects(MCore::Array& outObjects) const override; + void RecursiveCollectObjects(AZStd::vector& outObjects) const override; virtual void RecursiveSetUniqueDataFlag(AnimGraphInstance* animGraphInstance, uint32 flag, bool enabled); void FilterEvents(AnimGraphInstance* animGraphInstance, EEventMode eventMode, AnimGraphNode* nodeA, AnimGraphNode* nodeB, float localWeight, AnimGraphRefCountedData* refData); diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphObject.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphObject.cpp index a56e8d246e..c687dcadb1 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphObject.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphObject.cpp @@ -116,9 +116,9 @@ namespace EMotionFX // collect internal objects - void AnimGraphObject::RecursiveCollectObjects(MCore::Array& outObjects) const + void AnimGraphObject::RecursiveCollectObjects(AZStd::vector& outObjects) const { - outObjects.Add(const_cast(this)); + outObjects.emplace_back(const_cast(this)); } void AnimGraphObject::InvalidateUniqueDatas() diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphObject.h b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphObject.h index c3d6968a2d..2f01b572e3 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphObject.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphObject.h @@ -15,7 +15,7 @@ #include #include #include -#include +#include #include #include #include @@ -153,7 +153,7 @@ namespace EMotionFX uint32 SaveUniqueData(AnimGraphInstance* animGraphInstance, uint8* outputBuffer) const; // save and return number of bytes written, when outputBuffer is nullptr only return num bytes it would write uint32 LoadUniqueData(AnimGraphInstance* animGraphInstance, const uint8* dataBuffer); // load and return number of bytes read, when dataBuffer is nullptr, 0 should be returned - virtual void RecursiveCollectObjects(MCore::Array& outObjects) const; + virtual void RecursiveCollectObjects(AZStd::vector& outObjects) const; bool GetHasErrorFlag(AnimGraphInstance* animGraphInstance) const; void SetHasErrorFlag(AnimGraphInstance* animGraphInstance, bool hasError); diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphPosePool.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphPosePool.cpp index f30d742a24..5f139d9c49 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphPosePool.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphPosePool.cpp @@ -16,10 +16,8 @@ namespace EMotionFX // constructor AnimGraphPosePool::AnimGraphPosePool() { - mPoses.SetMemoryCategory(EMFX_MEMCATEGORY_ANIMGRAPH_POSEPOOL); - mFreePoses.SetMemoryCategory(EMFX_MEMCATEGORY_ANIMGRAPH_POSEPOOL); - mPoses.Reserve(12); - mFreePoses.Reserve(12); + mPoses.reserve(12); + mFreePoses.reserve(12); Resize(8); mMaxUsed = 0; } @@ -29,22 +27,22 @@ namespace EMotionFX AnimGraphPosePool::~AnimGraphPosePool() { // delete all poses - const uint32 numPoses = mPoses.GetLength(); + const uint32 numPoses = mPoses.size(); for (uint32 i = 0; i < numPoses; ++i) { delete mPoses[i]; } - mPoses.Clear(); + mPoses.clear(); // clear the free array - mFreePoses.Clear(); + mFreePoses.clear(); } // resize the number of poses in the pool void AnimGraphPosePool::Resize(uint32 numPoses) { - const uint32 numOldPoses = mPoses.GetLength(); + const uint32 numOldPoses = mPoses.size(); // if we will remove poses int32 difference = numPoses - numOldPoses; @@ -54,10 +52,10 @@ namespace EMotionFX difference = abs(difference); for (int32 i = 0; i < difference; ++i) { - AnimGraphPose* pose = mPoses[mFreePoses.GetLength() - 1]; - MCORE_ASSERT(mFreePoses.Contains(pose)); // make sure the pose is not already in use + AnimGraphPose* pose = mPoses.back(); + MCORE_ASSERT(AZStd::find(begin(mFreePoses), end(mFreePoses), pose) == end(mFreePoses)); // make sure the pose is not already in use delete pose; - mPoses.Remove(mFreePoses.GetLength() - 1); + mPoses.erase(mFreePoses.end() - 1); } } else // we want to add new poses @@ -65,8 +63,8 @@ namespace EMotionFX for (int32 i = 0; i < difference; ++i) { AnimGraphPose* newPose = new AnimGraphPose(); - mPoses.Add(newPose); - mFreePoses.Add(newPose); + mPoses.emplace_back(newPose); + mFreePoses.emplace_back(newPose); } } } @@ -76,21 +74,21 @@ namespace EMotionFX AnimGraphPose* AnimGraphPosePool::RequestPose(const ActorInstance* actorInstance) { // if we have no free poses left, allocate a new one - if (mFreePoses.GetLength() == 0) + if (mFreePoses.size() == 0) { AnimGraphPose* newPose = new AnimGraphPose(); newPose->LinkToActorInstance(actorInstance); - mPoses.Add(newPose); + mPoses.emplace_back(newPose); mMaxUsed = MCore::Max(mMaxUsed, GetNumUsedPoses()); newPose->SetIsInUse(true); return newPose; } // request the last free pose - AnimGraphPose* pose = mFreePoses[mFreePoses.GetLength() - 1]; + AnimGraphPose* pose = mFreePoses[mFreePoses.size() - 1]; //if (pose->GetActorInstance() != actorInstance) pose->LinkToActorInstance(actorInstance); - mFreePoses.RemoveLast(); // remove it from the list of free poses + mFreePoses.pop_back(); // remove it from the list of free poses mMaxUsed = MCore::Max(mMaxUsed, GetNumUsedPoses()); pose->SetIsInUse(true); return pose; @@ -101,7 +99,7 @@ namespace EMotionFX void AnimGraphPosePool::FreePose(AnimGraphPose* pose) { //MCORE_ASSERT( mPoses.Contains(pose) ); - mFreePoses.Add(pose); + mFreePoses.emplace_back(pose); pose->SetIsInUse(false); } @@ -109,7 +107,7 @@ namespace EMotionFX // free all poses void AnimGraphPosePool::FreeAllPoses() { - const uint32 numPoses = mPoses.GetLength(); + const uint32 numPoses = mPoses.size(); for (uint32 i = 0; i < numPoses; ++i) { AnimGraphPose* curPose = mPoses[i]; diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphPosePool.h b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphPosePool.h index 2c792e2005..8f7a38be97 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphPosePool.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphPosePool.h @@ -10,7 +10,7 @@ // include required headers #include "EMotionFXConfig.h" -#include +#include @@ -41,15 +41,15 @@ namespace EMotionFX void FreeAllPoses(); - MCORE_INLINE uint32 GetNumFreePoses() const { return mFreePoses.GetLength(); } - MCORE_INLINE uint32 GetNumPoses() const { return mPoses.GetLength(); } - MCORE_INLINE uint32 GetNumUsedPoses() const { return (mPoses.GetLength() - mFreePoses.GetLength()); } + MCORE_INLINE size_t GetNumFreePoses() const { return mFreePoses.size(); } + MCORE_INLINE size_t GetNumPoses() const { return mPoses.size(); } + MCORE_INLINE size_t GetNumUsedPoses() const { return (mPoses.size() - mFreePoses.size()); } MCORE_INLINE uint32 GetNumMaxUsedPoses() const { return mMaxUsed; } MCORE_INLINE void ResetMaxUsedPoses() { mMaxUsed = 0; } private: - MCore::Array mPoses; - MCore::Array mFreePoses; + AZStd::vector mPoses; + AZStd::vector mFreePoses; uint32 mMaxUsed; }; } // namespace EMotionFX diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphRefCountedDataPool.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphRefCountedDataPool.cpp index 6f77868ad7..289a9c4982 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphRefCountedDataPool.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphRefCountedDataPool.cpp @@ -8,6 +8,8 @@ // include required headers #include "AnimGraphRefCountedDataPool.h" +#include +#include namespace EMotionFX @@ -15,10 +17,8 @@ namespace EMotionFX // constructor AnimGraphRefCountedDataPool::AnimGraphRefCountedDataPool() { - mItems.SetMemoryCategory(EMFX_MEMCATEGORY_ANIMGRAPH_REFCOUNTEDDATA); - mFreeItems.SetMemoryCategory(EMFX_MEMCATEGORY_ANIMGRAPH_REFCOUNTEDDATA); - mItems.Reserve(32); - mFreeItems.Reserve(32); + mItems.reserve(32); + mFreeItems.reserve(32); Resize(16); mMaxUsed = 0; } @@ -28,22 +28,22 @@ namespace EMotionFX AnimGraphRefCountedDataPool::~AnimGraphRefCountedDataPool() { // delete all items - const uint32 numItems = mItems.GetLength(); + const uint32 numItems = mItems.size(); for (uint32 i = 0; i < numItems; ++i) { delete mItems[i]; } - mItems.Clear(); + mItems.clear(); // clear the free array - mFreeItems.Clear(); + mFreeItems.clear(); } // resize the number of items in the pool void AnimGraphRefCountedDataPool::Resize(uint32 numItems) { - const uint32 numOldItems = mItems.GetLength(); + const uint32 numOldItems = mItems.size(); // if we will remove Items int32 difference = numItems - numOldItems; @@ -53,10 +53,10 @@ namespace EMotionFX difference = abs(difference); for (int32 i = 0; i < difference; ++i) { - AnimGraphRefCountedData* item = mItems[mFreeItems.GetLength() - 1]; - MCORE_ASSERT(mFreeItems.Contains(item)); // make sure the Item is not already in use + AnimGraphRefCountedData* item = mItems.back(); + MCORE_ASSERT(AZStd::find(begin(mFreeItems), end(mFreeItems), item) != end(mFreeItems)); // make sure the Item is not already in use delete item; - mItems.Remove(mFreeItems.GetLength() - 1); + mItems.erase(mItems.end() - 1); } } else // we want to add new Items @@ -64,8 +64,8 @@ namespace EMotionFX for (int32 i = 0; i < difference; ++i) { AnimGraphRefCountedData* newItem = new AnimGraphRefCountedData(); - mItems.Add(newItem); - mFreeItems.Add(newItem); + mItems.emplace_back(newItem); + mFreeItems.emplace_back(newItem); } } } @@ -75,17 +75,17 @@ namespace EMotionFX AnimGraphRefCountedData* AnimGraphRefCountedDataPool::RequestNew() { // if we have no free items left, allocate a new one - if (mFreeItems.GetLength() == 0) + if (mFreeItems.size() == 0) { AnimGraphRefCountedData* newItem = new AnimGraphRefCountedData(); - mItems.Add(newItem); + mItems.emplace_back(newItem); mMaxUsed = MCore::Max(mMaxUsed, GetNumUsedItems()); return newItem; } // request the last free item - AnimGraphRefCountedData* item = mFreeItems[mFreeItems.GetLength() - 1]; - mFreeItems.RemoveLast(); // remove it from the list of free Items + AnimGraphRefCountedData* item = mFreeItems[mFreeItems.size() - 1]; + mFreeItems.pop_back(); // remove it from the list of free Items mMaxUsed = MCore::Max(mMaxUsed, GetNumUsedItems()); return item; } @@ -94,7 +94,7 @@ namespace EMotionFX // free the item again void AnimGraphRefCountedDataPool::Free(AnimGraphRefCountedData* item) { - MCORE_ASSERT(mItems.Contains(item)); - mFreeItems.Add(item); + MCORE_ASSERT(AZStd::find(begin(mItems), end(mItems), item) != end(mItems)); + mFreeItems.emplace_back(item); } } // namespace EMotionFX diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphRefCountedDataPool.h b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphRefCountedDataPool.h index b3b287fb37..33590766ff 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphRefCountedDataPool.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphRefCountedDataPool.h @@ -11,7 +11,7 @@ // include required headers #include "EMotionFXConfig.h" #include "AnimGraphRefCountedData.h" -#include +#include namespace EMotionFX @@ -34,15 +34,15 @@ namespace EMotionFX AnimGraphRefCountedData* RequestNew(); void Free(AnimGraphRefCountedData* item); - MCORE_INLINE uint32 GetNumFreeItems() const { return mFreeItems.GetLength(); } - MCORE_INLINE uint32 GetNumItems() const { return mItems.GetLength(); } - MCORE_INLINE uint32 GetNumUsedItems() const { return (mItems.GetLength() - mFreeItems.GetLength()); } + MCORE_INLINE size_t GetNumFreeItems() const { return mFreeItems.size(); } + MCORE_INLINE size_t GetNumItems() const { return mItems.size(); } + MCORE_INLINE size_t GetNumUsedItems() const { return (mItems.size() - mFreeItems.size()); } MCORE_INLINE uint32 GetNumMaxUsedItems() const { return mMaxUsed; } MCORE_INLINE void ResetMaxUsedItems() { mMaxUsed = 0; } private: - MCore::Array mItems; - MCore::Array mFreeItems; + AZStd::vector mItems; + AZStd::vector mFreeItems; uint32 mMaxUsed; }; } // namespace EMotionFX diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphReferenceNode.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphReferenceNode.cpp index 57500b01d9..e6f6bb0985 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphReferenceNode.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphReferenceNode.cpp @@ -499,7 +499,7 @@ namespace EMotionFX } - void AnimGraphReferenceNode::RecursiveCollectObjects(MCore::Array& outObjects) const + void AnimGraphReferenceNode::RecursiveCollectObjects(AZStd::vector& outObjects) const { AnimGraphNode::RecursiveCollectObjects(outObjects); diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphReferenceNode.h b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphReferenceNode.h index 23bb6ac138..db4dc0ea3e 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphReferenceNode.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphReferenceNode.h @@ -98,7 +98,7 @@ namespace EMotionFX void RecursiveCollectActiveNodes(AnimGraphInstance* animGraphInstance, AZStd::vector* outNodes, const AZ::TypeId& nodeType) const override; AnimGraphPose* GetMainOutputPose(AnimGraphInstance* animGraphInstance) const override; - void RecursiveCollectObjects(MCore::Array& outObjects) const override; + void RecursiveCollectObjects(AZStd::vector& outObjects) const override; void RecursiveCollectObjectsAffectedBy(AnimGraph* animGraph, AZStd::vector& outObjects) const override; bool RecursiveDetectCycles(AZStd::unordered_set& nodes) const override; diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphStateMachine.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphStateMachine.cpp index 2db1d920ef..a191ae9e13 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphStateMachine.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphStateMachine.cpp @@ -1277,7 +1277,7 @@ namespace EMotionFX return result; } - void AnimGraphStateMachine::RecursiveCollectObjects(MCore::Array& outObjects) const + void AnimGraphStateMachine::RecursiveCollectObjects(AZStd::vector& outObjects) const { for (const AnimGraphStateTransition* transition : mTransitions) { diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphStateMachine.h b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphStateMachine.h index 7c0a5a14f9..8583a8a6e3 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphStateMachine.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphStateMachine.h @@ -95,7 +95,7 @@ namespace EMotionFX AnimGraphPose* GetMainOutputPose(AnimGraphInstance* animGraphInstance) const override { return GetOutputPose(animGraphInstance, OUTPUTPORT_POSE)->GetValue(); } - void RecursiveCollectObjects(MCore::Array& outObjects) const override; + void RecursiveCollectObjects(AZStd::vector& outObjects) const override; void RecursiveCollectObjectsOfType(const AZ::TypeId& objectType, AZStd::vector& outObjects) const override; diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphStateTransition.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphStateTransition.cpp index 15d6f6bd3a..de3fa990bf 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphStateTransition.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphStateTransition.cpp @@ -663,14 +663,14 @@ namespace EMotionFX } // add all sub objects - void AnimGraphStateTransition::RecursiveCollectObjects(MCore::Array& outObjects) const + void AnimGraphStateTransition::RecursiveCollectObjects(AZStd::vector& outObjects) const { for (const AnimGraphTransitionCondition* condition : mConditions) { condition->RecursiveCollectObjects(outObjects); } - outObjects.Add(const_cast(this)); + outObjects.emplace_back(const_cast(this)); } // calculate the blend weight, based on the type of smoothing diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphStateTransition.h b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphStateTransition.h index 5e8d5446ef..c9347111bb 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphStateTransition.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/AnimGraphStateTransition.h @@ -120,7 +120,7 @@ namespace EMotionFX AnimGraphObjectData* CreateUniqueData(AnimGraphInstance* animGraphInstance) override { return aznew UniqueData(this, animGraphInstance); } void InvalidateUniqueData(AnimGraphInstance* animGraphInstance) override; - void RecursiveCollectObjects(MCore::Array& outObjects) const override; + void RecursiveCollectObjects(AZStd::vector& outObjects) const override; void ExtractMotion(AnimGraphInstance* animGraphInstance, AnimGraphRefCountedData* sourceData, Transform* outTransform, Transform* outTransformMirrored) const; void OnStartTransition(AnimGraphInstance* animGraphInstance); diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/DualQuatSkinDeformer.h b/Gems/EMotionFX/Code/EMotionFX/Source/DualQuatSkinDeformer.h index 1775eb4789..b1f3387df7 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/DualQuatSkinDeformer.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/DualQuatSkinDeformer.h @@ -97,7 +97,7 @@ namespace EMotionFX * This is the number of different bones that the skinning information of the mesh where this deformer works on uses. * @result The number of bones. */ - MCORE_INLINE uint32 GetNumLocalBones() const { return static_cast(m_bones.size()); } + MCORE_INLINE size_t GetNumLocalBones() const { return m_bones.size(); } /** * Get the node number of a given local bone. diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFXManager.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFXManager.cpp index ba81cc41b5..d58b4286b9 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFXManager.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFXManager.cpp @@ -107,7 +107,6 @@ namespace EMotionFX // constructor EMotionFXManager::EMotionFXManager() { - mThreadDatas.SetMemoryCategory(EMFX_MEMCATEGORY_EMOTIONFXMANAGER); // build the low version string AZStd::string lowVersionString; BuildLowVersionString(lowVersionString); @@ -174,11 +173,11 @@ namespace EMotionFX mEventManager = nullptr; // delete the thread datas - for (uint32 i = 0; i < mThreadDatas.GetLength(); ++i) + for (uint32 i = 0; i < mThreadDatas.size(); ++i) { mThreadDatas[i]->Destroy(); } - mThreadDatas.Clear(); + mThreadDatas.clear(); } @@ -477,19 +476,19 @@ namespace EMotionFX numThreads = 1; } - if (mThreadDatas.GetLength() == numThreads) + if (mThreadDatas.size() == numThreads) { return; } // get rid of old data - for (uint32 i = 0; i < mThreadDatas.GetLength(); ++i) + for (uint32 i = 0; i < mThreadDatas.size(); ++i) { mThreadDatas[i]->Destroy(); } - mThreadDatas.Clear(false); // force calling constructors again to reset everything - mThreadDatas.Resize(numThreads); + mThreadDatas.clear(); // force calling constructors again to reset everything + mThreadDatas.resize(numThreads); for (uint32 i = 0; i < numThreads; ++i) { diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFXManager.h b/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFXManager.h index 824cc95850..45bf59c94c 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFXManager.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/EMotionFXManager.h @@ -10,7 +10,7 @@ // include the required headers #include "EMotionFXConfig.h" -#include +#include #include #include "ThreadData.h" #include "BaseObject.h" @@ -268,13 +268,13 @@ namespace EMotionFX * @param threadIndex The thread index, which must be between [0..GetNumThreads()-1]. * @return The unique thread data for this thread. */ - MCORE_INLINE ThreadData* GetThreadData(uint32 threadIndex) const { MCORE_ASSERT(threadIndex < mThreadDatas.GetLength()); return mThreadDatas[threadIndex]; } + MCORE_INLINE ThreadData* GetThreadData(uint32 threadIndex) const { MCORE_ASSERT(threadIndex < mThreadDatas.size()); return mThreadDatas[threadIndex]; } /** * Get the number of threads that are internally created. * @return The number of threads that we have internally created. */ - MCORE_INLINE uint32 GetNumThreads() const { return mThreadDatas.GetLength(); } + MCORE_INLINE size_t GetNumThreads() const { return mThreadDatas.size(); } /** * Shrink the memory pools, to reduce memory usage. @@ -354,7 +354,7 @@ namespace EMotionFX Recorder* mRecorder; /**< The recorder. */ MotionInstancePool* mMotionInstancePool; /**< The motion instance pool. */ DebugDraw* mDebugDraw; /**< The debug drawing system. */ - MCore::Array mThreadDatas; /**< The per thread data. */ + AZStd::vector mThreadDatas; /**< The per thread data. */ MCore::Distance::EUnitType mUnitType; /**< The unit type, on default it is MCore::Distance::UNITTYPE_METERS. */ float mGlobalSimulationSpeed; /**< The global simulation speed, default is 1.0. */ bool m_isInEditorMode; /**< True when the runtime requires to support an editor. Optimizations can be made if there is no need for editor support. */ diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/EventManager.h b/Gems/EMotionFX/Code/EMotionFX/Source/EventManager.h index 5f87b66388..cf47eff346 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/EventManager.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/EventManager.h @@ -11,7 +11,7 @@ // include the required headers #include "EMotionFXConfig.h" #include "BaseObject.h" -#include +#include #include #include "MemoryCategories.h" #include "MotionInstance.h" diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/Importer/ChunkProcessors.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/Importer/ChunkProcessors.cpp index 9f6429abd7..18ec99b435 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/Importer/ChunkProcessors.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/Importer/ChunkProcessors.cpp @@ -280,7 +280,7 @@ namespace EMotionFX mStringStorageSize = 0; } - const char* SharedHelperData::ReadString(MCore::Stream* file, MCore::Array* sharedData, MCore::Endian::EEndianType endianType) + const char* SharedHelperData::ReadString(MCore::Stream* file, AZStd::vector* sharedData, MCore::Endian::EEndianType endianType) { MCORE_ASSERT(file); MCORE_ASSERT(sharedData); @@ -904,9 +904,9 @@ namespace EMotionFX // read all tracks AZStd::string trackName; - MCore::Array typeStrings; - MCore::Array paramStrings; - MCore::Array mirrorTypeStrings; + AZStd::vector typeStrings; + AZStd::vector paramStrings; + AZStd::vector mirrorTypeStrings; for (uint32 t = 0; t < fileEventTable.mNumTracks; ++t) { // read the motion event table header @@ -934,9 +934,9 @@ namespace EMotionFX } // the even type and parameter strings - typeStrings.Resize(fileTrack.mNumTypeStrings); - paramStrings.Resize(fileTrack.mNumParamStrings); - mirrorTypeStrings.Resize(fileTrack.mNumMirrorTypeStrings); + typeStrings.resize(fileTrack.mNumTypeStrings); + paramStrings.resize(fileTrack.mNumParamStrings); + mirrorTypeStrings.resize(fileTrack.mNumMirrorTypeStrings); // read all type strings if (GetLogging()) diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/Importer/ChunkProcessors.h b/Gems/EMotionFX/Code/EMotionFX/Source/Importer/ChunkProcessors.h index 56822c6940..66a2193b71 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/Importer/ChunkProcessors.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/Importer/ChunkProcessors.h @@ -9,7 +9,7 @@ #pragma once #include "../EMotionFXConfig.h" -#include +#include #include #include "../MemoryCategories.h" #include "../BaseObject.h" @@ -94,7 +94,7 @@ namespace EMotionFX * @param endianType The endian type to read the string in. * @return The actual string. */ - static const char* ReadString(MCore::Stream* file, MCore::Array* sharedData, MCore::Endian::EEndianType endianType); + static const char* ReadString(MCore::Stream* file, AZStd::vector* sharedData, MCore::Endian::EEndianType endianType); public: uint32 mFileHighVersion; /**< The high file version. For example 3 in case of v3.10. */ diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/Importer/Importer.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/Importer/Importer.cpp index 82da9ccd86..069182883c 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/Importer/Importer.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/Importer/Importer.cpp @@ -47,9 +47,6 @@ namespace EMotionFX Importer::Importer() : BaseObject() { - // set the memory category - mChunkProcessors.SetMemoryCategory(EMFX_MEMCATEGORY_IMPORTER); - // register all standard chunks RegisterStandardChunks(); @@ -63,7 +60,7 @@ namespace EMotionFX Importer::~Importer() { // remove all chunk processors - const uint32 numProcessors = mChunkProcessors.GetLength(); + const uint32 numProcessors = mChunkProcessors.size(); for (uint32 i = 0; i < numProcessors; ++i) { mChunkProcessors[i]->Destroy(); @@ -110,7 +107,6 @@ namespace EMotionFX MCore::LogError("Unsupported endian type used! (endian type = %d)", header.mEndianType); return false; } - ; // yes, it is a valid actor file! return true; @@ -150,7 +146,6 @@ namespace EMotionFX MCore::LogError("Unsupported endian type used! (endian type = %d)", header.mEndianType); return false; } - ; // yes, it is a valid motion file! return true; @@ -291,8 +286,7 @@ namespace EMotionFX MCORE_ASSERT(f->GetIsOpen()); // create the shared data - MCore::Array sharedData; - sharedData.SetMemoryCategory(EMFX_MEMCATEGORY_IMPORTER); + AZStd::vector sharedData; PrepareSharedData(sharedData); // verify if this is a valid actor file or not @@ -360,7 +354,7 @@ namespace EMotionFX // get rid of shared data ResetSharedData(sharedData); - sharedData.Clear(); + sharedData.clear(); // return the created actor return actor; @@ -461,8 +455,7 @@ namespace EMotionFX MCORE_ASSERT(f->GetIsOpen()); // create the shared data - MCore::Array sharedData; - sharedData.SetMemoryCategory(EMFX_MEMCATEGORY_IMPORTER); + AZStd::vector sharedData; PrepareSharedData(sharedData); // verify if this is a valid actor file or not @@ -513,7 +506,7 @@ namespace EMotionFX // get rid of shared data ResetSharedData(sharedData); - sharedData.Clear(); + sharedData.clear(); return motion; } @@ -671,8 +664,7 @@ namespace EMotionFX } // create the shared data - MCore::Array sharedData; - sharedData.SetMemoryCategory(EMFX_MEMCATEGORY_IMPORTER); + AZStd::vector sharedData; PrepareSharedData(sharedData); //----------------------------------------------- @@ -710,7 +702,7 @@ namespace EMotionFX // get rid of shared data ResetSharedData(sharedData); - sharedData.Clear(); + sharedData.clear(); // return the created actor return nodeMap; @@ -722,26 +714,26 @@ namespace EMotionFX void Importer::RegisterChunkProcessor(ChunkProcessor* processorToRegister) { MCORE_ASSERT(processorToRegister); - mChunkProcessors.Add(processorToRegister); + mChunkProcessors.emplace_back(processorToRegister); } // add shared data object to the importer - void Importer::AddSharedData(MCore::Array& sharedData, SharedData* data) + void Importer::AddSharedData(AZStd::vector& sharedData, SharedData* data) { MCORE_ASSERT(data); - sharedData.Add(data); + sharedData.emplace_back(data); } // search for shared data - SharedData* Importer::FindSharedData(MCore::Array* sharedDataArray, uint32 type) + SharedData* Importer::FindSharedData(AZStd::vector* sharedDataArray, uint32 type) { // for all shared data - const uint32 numSharedData = sharedDataArray->GetLength(); + const uint32 numSharedData = sharedDataArray->size(); for (uint32 i = 0; i < numSharedData; ++i) { - SharedData* sharedData = sharedDataArray->GetItem(i); + SharedData* sharedData = sharedDataArray->at(i); // check if it's the type we are searching for if (sharedData->GetType() == type) @@ -772,7 +764,7 @@ namespace EMotionFX mLogDetails = detailLoggingActive; // set the processors logging flag - const int32 numProcessors = mChunkProcessors.GetLength(); + const int32 numProcessors = mChunkProcessors.size(); for (int32 i = 0; i < numProcessors; i++) { ChunkProcessor* processor = mChunkProcessors[i]; @@ -787,7 +779,7 @@ namespace EMotionFX } - void Importer::PrepareSharedData(MCore::Array& sharedData) + void Importer::PrepareSharedData(AZStd::vector& sharedData) { // create standard shared objects AddSharedData(sharedData, SharedHelperData::Create()); @@ -795,16 +787,16 @@ namespace EMotionFX // reset shared objects so that the importer is ready for use again - void Importer::ResetSharedData(MCore::Array& sharedData) + void Importer::ResetSharedData(AZStd::vector& sharedData) { - const int32 numSharedData = sharedData.GetLength(); + const int32 numSharedData = sharedData.size(); for (int32 i = 0; i < numSharedData; i++) { SharedData* data = sharedData[i]; data->Reset(); data->Destroy(); } - sharedData.Clear(); + sharedData.clear(); } @@ -812,7 +804,7 @@ namespace EMotionFX ChunkProcessor* Importer::FindChunk(uint32 chunkID, uint32 version) const { // for all chunk processors - const uint32 numProcessors = mChunkProcessors.GetLength(); + const uint32 numProcessors = mChunkProcessors.size(); for (uint32 i = 0; i < numProcessors; ++i) { ChunkProcessor* processor = mChunkProcessors[i]; @@ -833,7 +825,7 @@ namespace EMotionFX void Importer::RegisterStandardChunks() { // reserve space for 75 chunk processors - mChunkProcessors.Reserve(75); + mChunkProcessors.reserve(75); // shared processors RegisterChunkProcessor(aznew ChunkProcessorMotionEventTrackTable()); @@ -912,12 +904,12 @@ namespace EMotionFX bool mustSkip = false; // check if we specified to ignore this chunk - if (actorSettings && actorSettings->mChunkIDsToIgnore.Contains(chunk.mChunkID)) + if (actorSettings && AZStd::find(begin(actorSettings->mChunkIDsToIgnore), end(actorSettings->mChunkIDsToIgnore), chunk.mChunkID) != end(actorSettings->mChunkIDsToIgnore)) { mustSkip = true; } - if (skelMotionSettings && skelMotionSettings->mChunkIDsToIgnore.Contains(chunk.mChunkID)) + if (skelMotionSettings && AZStd::find(begin(skelMotionSettings->mChunkIDsToIgnore), end(skelMotionSettings->mChunkIDsToIgnore), chunk.mChunkID) != end(skelMotionSettings->mChunkIDsToIgnore)) { mustSkip = true; } @@ -963,20 +955,29 @@ namespace EMotionFX void Importer::ValidateActorSettings(ActorSettings* settings) { // After atom: Make sure we are not loading the tangents and bitangents - if (!settings->mLayerIDsToIgnore.Contains(Mesh::ATTRIB_TANGENTS)) + if (AZStd::find(begin(settings->mLayerIDsToIgnore), end(settings->mLayerIDsToIgnore), Mesh::ATTRIB_TANGENTS) == end(settings->mLayerIDsToIgnore)) { - settings->mLayerIDsToIgnore.Add(Mesh::ATTRIB_TANGENTS); + settings->mLayerIDsToIgnore.emplace_back(Mesh::ATTRIB_TANGENTS); } - if (!settings->mLayerIDsToIgnore.Contains(Mesh::ATTRIB_BITANGENTS)) + if (AZStd::find(begin(settings->mLayerIDsToIgnore), end(settings->mLayerIDsToIgnore), Mesh::ATTRIB_BITANGENTS) == end(settings->mLayerIDsToIgnore)) { - settings->mLayerIDsToIgnore.Add(Mesh::ATTRIB_BITANGENTS); + settings->mLayerIDsToIgnore.emplace_back(Mesh::ATTRIB_BITANGENTS); } // make sure we load at least the position and normals and org vertex numbers - settings->mLayerIDsToIgnore.RemoveByValue(Mesh::ATTRIB_ORGVTXNUMBERS); - settings->mLayerIDsToIgnore.RemoveByValue(Mesh::ATTRIB_NORMALS); - settings->mLayerIDsToIgnore.RemoveByValue(Mesh::ATTRIB_POSITIONS); + if(const auto it = AZStd::find(begin(settings->mLayerIDsToIgnore), end(settings->mLayerIDsToIgnore), Mesh::ATTRIB_ORGVTXNUMBERS); it != end(settings->mLayerIDsToIgnore)) + { + settings->mLayerIDsToIgnore.erase(it); + } + if(const auto it = AZStd::find(begin(settings->mLayerIDsToIgnore), end(settings->mLayerIDsToIgnore), Mesh::ATTRIB_NORMALS); it != end(settings->mLayerIDsToIgnore)) + { + settings->mLayerIDsToIgnore.erase(it); + } + if(const auto it = AZStd::find(begin(settings->mLayerIDsToIgnore), end(settings->mLayerIDsToIgnore), Mesh::ATTRIB_POSITIONS); it != end(settings->mLayerIDsToIgnore)) + { + settings->mLayerIDsToIgnore.erase(it); + } } diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/Importer/Importer.h b/Gems/EMotionFX/Code/EMotionFX/Source/Importer/Importer.h index 2b12f93a1a..a708e7f017 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/Importer/Importer.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/Importer/Importer.h @@ -9,7 +9,7 @@ #pragma once #include "../EMotionFXConfig.h" -#include +#include #include #include #include @@ -82,8 +82,8 @@ namespace EMotionFX bool mLoadSimulatedObjects = true; /**< Set to false if you wish to disable loading of simulated objects. */ bool mOptimizeForServer = false; /**< Set to true if you witsh to optimize this actor to be used on server. */ uint32 mThreadIndex = 0; - MCore::Array mChunkIDsToIgnore; /**< Add chunk ID's to this array. Chunks with these ID's will not be processed. */ - MCore::Array mLayerIDsToIgnore; /**< Add vertex attribute layer ID's to ignore. */ + AZStd::vector mChunkIDsToIgnore; /**< Add chunk ID's to this array. Chunks with these ID's will not be processed. */ + AZStd::vector mLayerIDsToIgnore; /**< Add vertex attribute layer ID's to ignore. */ /** * If the actor need to be optimized for server, will overwrite a few other actor settings. @@ -105,7 +105,7 @@ namespace EMotionFX bool mForceLoading = false; /**< Set to true in case you want to load the motion even if a motion with the given filename is already inside the motion manager. */ bool mLoadMotionEvents = true; /**< Set to false if you wish to disable loading of motion events. */ bool mUnitTypeConvert = true; /**< Set to false to disable automatic unit type conversion (between cm, meters, etc). On default this is enabled. */ - MCore::Array mChunkIDsToIgnore; /**< Add the ID's of the chunks you wish to ignore. */ + AZStd::vector mChunkIDsToIgnore; /**< Add the ID's of the chunks you wish to ignore. */ }; /** @@ -133,7 +133,7 @@ namespace EMotionFX Motion* mMotion = nullptr; Importer::ActorSettings* mActorSettings = nullptr; Importer::MotionSettings* mMotionSettings = nullptr; - MCore::Array* mSharedData = nullptr; + AZStd::vector* mSharedData = nullptr; MCore::Endian::EEndianType mEndianType = MCore::Endian::ENDIAN_LITTLE; NodeMap* mNodeMap = nullptr; @@ -312,7 +312,7 @@ namespace EMotionFX * @param type The shared data ID to search for. * @return A pointer to the shared data object, or nullptr when no shared data of this type has been found. */ - static SharedData* FindSharedData(MCore::Array* sharedDataArray, uint32 type); + static SharedData* FindSharedData(AZStd::vector* sharedDataArray, uint32 type); /** * Enable or disable logging. @@ -355,7 +355,7 @@ namespace EMotionFX private: - MCore::Array mChunkProcessors; /**< The registered chunk processors. */ + AZStd::vector mChunkProcessors; /**< The registered chunk processors. */ bool mLoggingActive; /**< Contains if the importer should perform logging or not or not. */ bool mLogDetails; /**< Contains if the importer should perform detail-logging or not. */ @@ -414,19 +414,19 @@ namespace EMotionFX * @param sharedData The array which holds the shared data objects. * @param data A pointer to your shared data object. */ - static void AddSharedData(MCore::Array& sharedData, SharedData* data); + static void AddSharedData(AZStd::vector& sharedData, SharedData* data); /* * Precreate the standard shared data objects. * @param sharedData The shared data array to work on. */ - static void PrepareSharedData(MCore::Array& sharedData); + static void PrepareSharedData(AZStd::vector& sharedData); /** * Reset all shared data objects. * Resetting these objects will clear/empty their internal data. */ - static void ResetSharedData(MCore::Array& sharedData); + static void ResetSharedData(AZStd::vector& sharedData); /** * Find the chunk processor which has a given ID and version number. diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/KeyTrackLinearDynamic.h b/Gems/EMotionFX/Code/EMotionFX/Source/KeyTrackLinearDynamic.h index 2635e12a71..8c5c56895a 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/KeyTrackLinearDynamic.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/KeyTrackLinearDynamic.h @@ -41,22 +41,13 @@ namespace EMotionFX public: AZ_TYPE_INFO_LEGACY(EMotionFX::KeyTrackLinear, "{8C6EB52A-9720-467B-9D96-B4B967A113D1}", StorageType) - /** - * Default constructor. - */ - KeyTrackLinearDynamic(); + KeyTrackLinearDynamic() = default; /** - * Constructor. * @param nrKeys The number of keyframes which the keytrack contains (preallocates this amount of keyframes). */ KeyTrackLinearDynamic(uint32 nrKeys); - /** - * Destructor. - */ - ~KeyTrackLinearDynamic(); - static void Reflect(AZ::ReflectContext* context); /** diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/KeyTrackLinearDynamic.inl b/Gems/EMotionFX/Code/EMotionFX/Source/KeyTrackLinearDynamic.inl index b28c9973fc..94abe4d707 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/KeyTrackLinearDynamic.inl +++ b/Gems/EMotionFX/Code/EMotionFX/Source/KeyTrackLinearDynamic.inl @@ -6,13 +6,6 @@ * */ -// default constructor -template -KeyTrackLinearDynamic::KeyTrackLinearDynamic() -{ -} - - // extended constructor template KeyTrackLinearDynamic::KeyTrackLinearDynamic(uint32 nrKeys) @@ -21,13 +14,6 @@ KeyTrackLinearDynamic::KeyTrackLinearDynamic(uint32 nrK } -// destructor -template -KeyTrackLinearDynamic::~KeyTrackLinearDynamic() -{ - ClearKeys(); -} - template void KeyTrackLinearDynamic::Reflect(AZ::ReflectContext* context) { diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/Mesh.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/Mesh.cpp index 3ece1e24af..36fc898ed1 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/Mesh.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/Mesh.cpp @@ -36,11 +36,6 @@ namespace EMotionFX mIndices = nullptr; mPolyVertexCounts = nullptr; mIsCollisionMesh = false; - - // set memory categories of the arrays - mSubMeshes.SetMemoryCategory(EMFX_MEMCATEGORY_GEOMETRY_MESHES); - mVertexAttributes.SetMemoryCategory(EMFX_MEMCATEGORY_GEOMETRY_MESHES); - mSharedVertexAttributes.SetMemoryCategory(EMFX_MEMCATEGORY_GEOMETRY_MESHES); } // allocation constructor @@ -54,11 +49,6 @@ namespace EMotionFX mPolyVertexCounts = nullptr; mIsCollisionMesh = isCollisionMesh; - // set memory categories of the arrays - mSubMeshes.SetMemoryCategory(EMFX_MEMCATEGORY_GEOMETRY_MESHES); - mVertexAttributes.SetMemoryCategory(EMFX_MEMCATEGORY_GEOMETRY_MESHES); - mSharedVertexAttributes.SetMemoryCategory(EMFX_MEMCATEGORY_GEOMETRY_MESHES); - // allocate the mesh data Allocate(numVerts, numIndices, numPolygons, numOrgVerts); } @@ -384,7 +374,7 @@ namespace EMotionFX // copy all original data over the output data void Mesh::ResetToOriginalData() { - const uint32 numLayers = mVertexAttributes.GetLength(); + const uint32 numLayers = mVertexAttributes.size(); for (uint32 i = 0; i < numLayers; ++i) { mVertexAttributes[i]->ResetToOriginalData(); @@ -402,12 +392,12 @@ namespace EMotionFX RemoveAllVertexAttributeLayers(); // get rid of all sub meshes - const uint32 numSubMeshes = mSubMeshes.GetLength(); + const uint32 numSubMeshes = mSubMeshes.size(); for (uint32 i = 0; i < numSubMeshes; ++i) { mSubMeshes[i]->Destroy(); } - mSubMeshes.Clear(); + mSubMeshes.clear(); if (mIndices) { @@ -668,10 +658,10 @@ namespace EMotionFX // creates an array of pointers to bones used by this face - void Mesh::GatherBonesForFace(uint32 startIndexOfFace, MCore::Array& outBones, Actor* actor) + void Mesh::GatherBonesForFace(uint32 startIndexOfFace, AZStd::vector& outBones, Actor* actor) { // get rid of existing data - outBones.Clear(); + outBones.clear(); // try to locate the skinning attribute information SkinningInfoVertexAttributeLayer* skinningLayer = (SkinningInfoVertexAttributeLayer*)FindSharedVertexAttributeLayer(SkinningInfoVertexAttributeLayer::TYPE_ID); @@ -703,9 +693,9 @@ namespace EMotionFX Node* bone = skeleton->GetNode(skinningLayer->GetInfluence(originalVertex, n)->GetNodeNr()); // if it isn't yet in the output array with bones, add it - if (outBones.Find(bone) == MCORE_INVALIDINDEX32) + if (AZStd::find(begin(outBones), end(outBones), bone) == end(outBones)) { - outBones.Add(bone); + outBones.emplace_back(bone); } } } @@ -818,7 +808,7 @@ namespace EMotionFX void Mesh::RemoveSubMesh(uint32 nr, bool delFromMem) { SubMesh* subMesh = mSubMeshes[nr]; - mSubMeshes.Remove(nr); + mSubMeshes.erase(AZStd::next(begin(mSubMeshes), nr)); if (delFromMem) { subMesh->Destroy(); @@ -829,7 +819,7 @@ namespace EMotionFX // insert a given submesh void Mesh::InsertSubMesh(uint32 insertIndex, SubMesh* subMesh) { - mSubMeshes.Insert(insertIndex, subMesh); + mSubMeshes.emplace(AZStd::next(begin(mSubMeshes), insertIndex), subMesh); } @@ -839,7 +829,7 @@ namespace EMotionFX uint32 numLayers = 0; // check the types of all vertex attribute layers - const uint32 numAttributes = mVertexAttributes.GetLength(); + const uint32 numAttributes = mVertexAttributes.size(); for (uint32 i = 0; i < numAttributes; ++i) { if (mVertexAttributes[i]->GetType() == type) @@ -862,21 +852,21 @@ namespace EMotionFX VertexAttributeLayer* Mesh::GetSharedVertexAttributeLayer(uint32 layerNr) { - MCORE_ASSERT(layerNr < mSharedVertexAttributes.GetLength()); + MCORE_ASSERT(layerNr < mSharedVertexAttributes.size()); return mSharedVertexAttributes[layerNr]; } void Mesh::AddSharedVertexAttributeLayer(VertexAttributeLayer* layer) { - MCORE_ASSERT(mSharedVertexAttributes.Contains(layer) == false); - mSharedVertexAttributes.Add(layer); + MCORE_ASSERT(AZStd::find(begin(mSharedVertexAttributes), end(mSharedVertexAttributes), layer) == end(mSharedVertexAttributes)); + mSharedVertexAttributes.emplace_back(layer); } - uint32 Mesh::GetNumSharedVertexAttributeLayers() const + size_t Mesh::GetNumSharedVertexAttributeLayers() const { - return mSharedVertexAttributes.GetLength(); + return mSharedVertexAttributes.size(); } @@ -885,7 +875,7 @@ namespace EMotionFX uint32 layerCounter = 0; // check all vertex attributes of our first vertex, and find where the specific attribute is - const uint32 numLayers = mSharedVertexAttributes.GetLength(); + const uint32 numLayers = mSharedVertexAttributes.size(); for (uint32 i = 0; i < numLayers; ++i) { VertexAttributeLayer* layer = mSharedVertexAttributes[i]; @@ -922,10 +912,10 @@ namespace EMotionFX // delete all shared attribute layers void Mesh::RemoveAllSharedVertexAttributeLayers() { - while (mSharedVertexAttributes.GetLength()) + while (mSharedVertexAttributes.size()) { - mSharedVertexAttributes.GetLast()->Destroy(); - mSharedVertexAttributes.RemoveLast(); + mSharedVertexAttributes.back()->Destroy(); + mSharedVertexAttributes.pop_back(); } } @@ -933,29 +923,29 @@ namespace EMotionFX // remove a layer by its index void Mesh::RemoveSharedVertexAttributeLayer(uint32 layerNr) { - MCORE_ASSERT(layerNr < mSharedVertexAttributes.GetLength()); + MCORE_ASSERT(layerNr < mSharedVertexAttributes.size()); mSharedVertexAttributes[layerNr]->Destroy(); - mSharedVertexAttributes.Remove(layerNr); + mSharedVertexAttributes.erase(AZStd::next(begin(mSharedVertexAttributes), layerNr)); } - uint32 Mesh::GetNumVertexAttributeLayers() const + size_t Mesh::GetNumVertexAttributeLayers() const { - return mVertexAttributes.GetLength(); + return mVertexAttributes.size(); } VertexAttributeLayer* Mesh::GetVertexAttributeLayer(uint32 layerNr) { - MCORE_ASSERT(layerNr < mVertexAttributes.GetLength()); + MCORE_ASSERT(layerNr < mVertexAttributes.size()); return mVertexAttributes[layerNr]; } void Mesh::AddVertexAttributeLayer(VertexAttributeLayer* layer) { - MCORE_ASSERT(mVertexAttributes.Contains(layer) == false); - mVertexAttributes.Add(layer); + MCORE_ASSERT(AZStd::find(begin(mVertexAttributes), end(mVertexAttributes), layer) == end(mVertexAttributes)); + mVertexAttributes.emplace_back(layer); } @@ -965,7 +955,7 @@ namespace EMotionFX uint32 layerCounter = 0; // check all vertex attributes of our first vertex, and find where the specific attribute is - const uint32 numLayers = mVertexAttributes.GetLength(); + const uint32 numLayers = mVertexAttributes.size(); for (uint32 i = 0; i < numLayers; ++i) { VertexAttributeLayer* layer = mVertexAttributes[i]; @@ -989,7 +979,7 @@ namespace EMotionFX uint32 Mesh::FindVertexAttributeLayerNumberByName(uint32 layerTypeID, const char* name) const { // check all vertex attributes of our first vertex, and find where the specific attribute is - const uint32 numLayers = mVertexAttributes.GetLength(); + const uint32 numLayers = mVertexAttributes.size(); for (uint32 i = 0; i < numLayers; ++i) { VertexAttributeLayer* layer = mVertexAttributes[i]; @@ -1035,19 +1025,19 @@ namespace EMotionFX void Mesh::RemoveAllVertexAttributeLayers() { - while (mVertexAttributes.GetLength()) + while (mVertexAttributes.size()) { - mVertexAttributes.GetLast()->Destroy(); - mVertexAttributes.RemoveLast(); + mVertexAttributes.back()->Destroy(); + mVertexAttributes.pop_back(); } } void Mesh::RemoveVertexAttributeLayer(uint32 layerNr) { - MCORE_ASSERT(layerNr < mVertexAttributes.GetLength()); + MCORE_ASSERT(layerNr < mVertexAttributes.size()); mVertexAttributes[layerNr]->Destroy(); - mVertexAttributes.Remove(layerNr); + mVertexAttributes.erase(AZStd::next(begin(mVertexAttributes), layerNr)); } @@ -1064,24 +1054,24 @@ namespace EMotionFX // copy the submesh data uint32 i; - const uint32 numSubMeshes = mSubMeshes.GetLength(); - clone->mSubMeshes.Resize(numSubMeshes); + const uint32 numSubMeshes = mSubMeshes.size(); + clone->mSubMeshes.resize(numSubMeshes); for (i = 0; i < numSubMeshes; ++i) { clone->mSubMeshes[i] = mSubMeshes[i]->Clone(clone); } // clone the shared vertex attributes - const uint32 numSharedAttributes = mSharedVertexAttributes.GetLength(); - clone->mSharedVertexAttributes.Resize(numSharedAttributes); + const uint32 numSharedAttributes = mSharedVertexAttributes.size(); + clone->mSharedVertexAttributes.resize(numSharedAttributes); for (i = 0; i < numSharedAttributes; ++i) { clone->mSharedVertexAttributes[i] = mSharedVertexAttributes[i]->Clone(); } // clone the non-shared vertex attributes - const uint32 numAttributes = mVertexAttributes.GetLength(); - clone->mVertexAttributes.Resize(numAttributes); + const uint32 numAttributes = mVertexAttributes.size(); + clone->mVertexAttributes.resize(numAttributes); for (i = 0; i < numAttributes; ++i) { clone->mVertexAttributes[i] = mVertexAttributes[i]->Clone(); @@ -1105,7 +1095,7 @@ namespace EMotionFX } // swap all vertex attribute layers - const uint32 numLayers = mVertexAttributes.GetLength(); + const uint32 numLayers = mVertexAttributes.size(); for (uint32 i = 0; i < numLayers; ++i) { mVertexAttributes[i]->SwapAttributes(vertexA, vertexB); @@ -1229,7 +1219,7 @@ namespace EMotionFX for (uint32 w = 0; w < numVertsToRemove; ++w) { // adjust all submesh start index offsets changed - for (uint32 s = 0; s < mSubMeshes.GetLength();) + for (uint32 s = 0; s < mSubMeshes.size();) { SubMesh* subMesh = mSubMeshes[s]; @@ -1249,7 +1239,7 @@ namespace EMotionFX // remove the submesh if it's empty if (subMesh->GetNumVertices() == 0 && removeEmptySubMeshes) { - mSubMeshes.Remove(s); + mSubMeshes.erase(AZStd::next(begin(mSubMeshes), s)); } else { @@ -1283,7 +1273,7 @@ namespace EMotionFX uint32 numRemoved = 0; // for all the submeshes - for (uint32 i = 0; i < mSubMeshes.GetLength();) + for (uint32 i = 0; i < mSubMeshes.size();) { SubMesh* subMesh = mSubMeshes[i]; @@ -1305,7 +1295,7 @@ namespace EMotionFX // remove or skip if (mustRemove) { - mSubMeshes.Remove(i); + mSubMeshes.erase(AZStd::next(begin(mSubMeshes), i)); numRemoved++; } else @@ -1966,7 +1956,7 @@ namespace EMotionFX void Mesh::ReserveVertexAttributeLayerSpace(uint32 numLayers) { - mVertexAttributes.Reserve(numLayers); + mVertexAttributes.reserve(numLayers); } @@ -2003,7 +1993,7 @@ namespace EMotionFX // find by name uint32 Mesh::FindVertexAttributeLayerIndexByName(const char* name) const { - const uint32 numLayers = mVertexAttributes.GetLength(); + const uint32 numLayers = mVertexAttributes.size(); for (uint32 i = 0; i < numLayers; ++i) { if (mVertexAttributes[i]->GetNameString() == name) @@ -2019,7 +2009,7 @@ namespace EMotionFX // find by name as string uint32 Mesh::FindVertexAttributeLayerIndexByNameString(const AZStd::string& name) const { - const uint32 numLayers = mVertexAttributes.GetLength(); + const uint32 numLayers = mVertexAttributes.size(); for (uint32 i = 0; i < numLayers; ++i) { if (mVertexAttributes[i]->GetNameString() == name) @@ -2035,7 +2025,7 @@ namespace EMotionFX // find by name ID uint32 Mesh::FindVertexAttributeLayerIndexByNameID(uint32 nameID) const { - const uint32 numLayers = mVertexAttributes.GetLength(); + const uint32 numLayers = mVertexAttributes.size(); for (uint32 i = 0; i < numLayers; ++i) { if (mVertexAttributes[i]->GetNameID() == nameID) @@ -2051,7 +2041,7 @@ namespace EMotionFX // find by name uint32 Mesh::FindSharedVertexAttributeLayerIndexByName(const char* name) const { - const uint32 numLayers = mSharedVertexAttributes.GetLength(); + const uint32 numLayers = mSharedVertexAttributes.size(); for (uint32 i = 0; i < numLayers; ++i) { if (mSharedVertexAttributes[i]->GetNameString() == name) @@ -2067,7 +2057,7 @@ namespace EMotionFX // find by name as string uint32 Mesh::FindSharedVertexAttributeLayerIndexByNameString(const AZStd::string& name) const { - const uint32 numLayers = mSharedVertexAttributes.GetLength(); + const uint32 numLayers = mSharedVertexAttributes.size(); for (uint32 i = 0; i < numLayers; ++i) { if (mSharedVertexAttributes[i]->GetNameString() == name) @@ -2083,7 +2073,7 @@ namespace EMotionFX // find by name ID uint32 Mesh::FindSharedVertexAttributeLayerIndexByNameID(uint32 nameID) const { - const uint32 numLayers = mSharedVertexAttributes.GetLength(); + const uint32 numLayers = mSharedVertexAttributes.size(); for (uint32 i = 0; i < numLayers; ++i) { if (mSharedVertexAttributes[i]->GetNameID() == nameID) diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/Mesh.h b/Gems/EMotionFX/Code/EMotionFX/Source/Mesh.h index cb929dc7db..a0a99f2961 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/Mesh.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/Mesh.h @@ -18,7 +18,7 @@ #include "Transform.h" #include -#include +#include #include #include @@ -235,7 +235,7 @@ namespace EMotionFX * Get the number of sub meshes currently in the mesh. * @result The number of sub meshes. */ - MCORE_INLINE uint32 GetNumSubMeshes() const; + MCORE_INLINE size_t GetNumSubMeshes() const; /** * Get a given SubMesh. @@ -257,7 +257,7 @@ namespace EMotionFX * Do not forget to use SetSubMesh() to initialize all submeshes! * @param numSubMeshes The number of submeshes to use. */ - MCORE_INLINE void SetNumSubMeshes(uint32 numSubMeshes) { mSubMeshes.Resize(numSubMeshes); } + MCORE_INLINE void SetNumSubMeshes(uint32 numSubMeshes) { mSubMeshes.resize(numSubMeshes); } /** * Remove a given submesh from this mesh. @@ -293,7 +293,7 @@ namespace EMotionFX * This value is the same for all shared vertices. * @result The number of shared vertex attributes for every vertex. */ - uint32 GetNumSharedVertexAttributeLayers() const; + size_t GetNumSharedVertexAttributeLayers() const; /** * Find and return the shared vertex attribute layer of a given type. @@ -338,7 +338,7 @@ namespace EMotionFX * This value is the same for all vertices. * @result The number of vertex attributes for every vertex. */ - uint32 GetNumVertexAttributeLayers() const; + size_t GetNumVertexAttributeLayers() const; /** * Get the vertex attribute data of a given layer. @@ -447,7 +447,7 @@ namespace EMotionFX * @param outBones The array to store the pointers to the bones in. Any existing array contents will be cleared when it enters the method. * @param actor The actor to search the bones in. */ - void GatherBonesForFace(uint32 startIndexOfFace, MCore::Array& outBones, Actor* actor); + void GatherBonesForFace(uint32 startIndexOfFace, AZStd::vector& outBones, Actor* actor); /** * Calculates the maximum number of bone influences for a given face. @@ -653,7 +653,7 @@ namespace EMotionFX protected: - MCore::Array mSubMeshes; /**< The collection of sub meshes. */ + AZStd::vector mSubMeshes; /**< The collection of sub meshes. */ uint32* mIndices; /**< The array of indices, which define the faces. */ uint8* mPolyVertexCounts; /**< The number of vertices for each polygon, where the length of this array equals the number of polygons. */ uint32 mNumPolygons; /**< The number of polygons in this mesh. */ @@ -666,13 +666,13 @@ namespace EMotionFX * The array of shared vertex attribute layers. * The number of attributes in each shared layer will be equal to the value returned by Mesh::GetNumOrgVertices(). */ - MCore::Array< VertexAttributeLayer* > mSharedVertexAttributes; + AZStd::vector< VertexAttributeLayer* > mSharedVertexAttributes; /** * The array of non-shared vertex attribute layers. * The number of attributes in each shared layer will be equal to the value returned by Mesh::GetNumVertices(). */ - MCore::Array< VertexAttributeLayer* > mVertexAttributes; + AZStd::vector< VertexAttributeLayer* > mVertexAttributes; /** * Default constructor. diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/Mesh.inl b/Gems/EMotionFX/Code/EMotionFX/Source/Mesh.inl index 850d9d1f17..4ee52eaf19 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/Mesh.inl +++ b/Gems/EMotionFX/Code/EMotionFX/Source/Mesh.inl @@ -24,22 +24,22 @@ MCORE_INLINE uint32 Mesh::GetNumPolygons() const } -MCORE_INLINE uint32 Mesh::GetNumSubMeshes() const +MCORE_INLINE size_t Mesh::GetNumSubMeshes() const { - return mSubMeshes.GetLength(); + return mSubMeshes.size(); } MCORE_INLINE SubMesh* Mesh::GetSubMesh(uint32 nr) const { - MCORE_ASSERT(nr < mSubMeshes.GetLength()); + MCORE_ASSERT(nr < mSubMeshes.size()); return mSubMeshes[nr]; } MCORE_INLINE void Mesh::AddSubMesh(SubMesh* subMesh) { - mSubMeshes.Add(subMesh); + mSubMeshes.emplace_back(subMesh); } diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MeshDeformerStack.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/MeshDeformerStack.cpp index c50aca4325..c4fae4d3bb 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MeshDeformerStack.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MeshDeformerStack.cpp @@ -22,20 +22,19 @@ namespace EMotionFX : BaseObject() { mMesh = mesh; - mDeformers.SetMemoryCategory(EMFX_MEMCATEGORY_GEOMETRY_DEFORMERS); } // destructor MeshDeformerStack::~MeshDeformerStack() { - const uint32 numDeformers = mDeformers.GetLength(); + const uint32 numDeformers = mDeformers.size(); for (uint32 i = 0; i < numDeformers; ++i) { mDeformers[i]->Destroy(); } - mDeformers.Clear(); + mDeformers.clear(); // reset mMesh = nullptr; @@ -60,7 +59,7 @@ namespace EMotionFX void MeshDeformerStack::Update(ActorInstance* actorInstance, Node* node, float timeDelta, bool forceUpdateDisabledDeformers) { // if we have deformers in the stack - const uint32 numDeformers = mDeformers.GetLength(); + const uint32 numDeformers = mDeformers.size(); if (numDeformers > 0) { bool firstEnabled = true; @@ -92,7 +91,7 @@ namespace EMotionFX { bool resetDone = false; // if we have deformers in the stack - const uint32 numDeformers = mDeformers.GetLength(); + const uint32 numDeformers = mDeformers.size(); // iterate through the deformers and update them for (uint32 i = 0; i < numDeformers; ++i) { @@ -118,7 +117,7 @@ namespace EMotionFX void MeshDeformerStack::ReinitializeDeformers(Actor* actor, Node* node, uint32 lodLevel) { // if we have deformers in the stack - const uint32 numDeformers = mDeformers.GetLength(); + const uint32 numDeformers = mDeformers.size(); // iterate through the deformers and reinitialize them for (uint32 i = 0; i < numDeformers; ++i) @@ -131,21 +130,26 @@ namespace EMotionFX void MeshDeformerStack::AddDeformer(MeshDeformer* meshDeformer) { // add the object into the stack - mDeformers.Add(meshDeformer); + mDeformers.emplace_back(meshDeformer); } void MeshDeformerStack::InsertDeformer(uint32 pos, MeshDeformer* meshDeformer) { // add the object into the stack - mDeformers.Insert(pos, meshDeformer); + mDeformers.emplace(AZStd::next(begin(mDeformers), pos), meshDeformer); } bool MeshDeformerStack::RemoveDeformer(MeshDeformer* meshDeformer) { // delete the object - return mDeformers.RemoveByValue(meshDeformer); + if (const auto it = AZStd::find(begin(mDeformers), end(mDeformers), meshDeformer); it != end(mDeformers)) + { + mDeformers.erase(it); + return true; + } + return false; } @@ -155,7 +159,7 @@ namespace EMotionFX MeshDeformerStack* newStack = aznew MeshDeformerStack(mesh); // clone all deformers - const uint32 numDeformers = mDeformers.GetLength(); + const uint32 numDeformers = mDeformers.size(); for (uint32 i = 0; i < numDeformers; ++i) { newStack->AddDeformer(mDeformers[i]->Clone(mesh)); @@ -166,15 +170,15 @@ namespace EMotionFX } - uint32 MeshDeformerStack::GetNumDeformers() const + size_t MeshDeformerStack::GetNumDeformers() const { - return mDeformers.GetLength(); + return mDeformers.size(); } MeshDeformer* MeshDeformerStack::GetDeformer(uint32 nr) const { - MCORE_ASSERT(nr < mDeformers.GetLength()); + MCORE_ASSERT(nr < mDeformers.size()); return mDeformers[nr]; } @@ -183,7 +187,7 @@ namespace EMotionFX uint32 MeshDeformerStack::RemoveAllDeformersByType(uint32 deformerTypeID) { uint32 numRemoved = 0; - for (uint32 a = 0; a < mDeformers.GetLength(); ) + for (uint32 a = 0; a < mDeformers.size(); ) { MeshDeformer* deformer = mDeformers[a]; if (deformer->GetType() == deformerTypeID) @@ -205,7 +209,7 @@ namespace EMotionFX // remove all the deformers void MeshDeformerStack::RemoveAllDeformers() { - for (uint32 i = 0; i < mDeformers.GetLength(); ++i) + for (uint32 i = 0; i < mDeformers.size(); ++i) { // retrieve the current deformer MeshDeformer* deformer = mDeformers[i]; @@ -221,7 +225,7 @@ namespace EMotionFX uint32 MeshDeformerStack::EnableAllDeformersByType(uint32 deformerTypeID, bool enabled) { uint32 numChanged = 0; - const uint32 numDeformers = mDeformers.GetLength(); + const uint32 numDeformers = mDeformers.size(); for (uint32 a = 0; a < numDeformers; ++a) { MeshDeformer* deformer = mDeformers[a]; @@ -239,7 +243,7 @@ namespace EMotionFX // check if the stack contains a deformer of a specified type bool MeshDeformerStack::CheckIfHasDeformerOfType(uint32 deformerTypeID) const { - const uint32 numDeformers = mDeformers.GetLength(); + const uint32 numDeformers = mDeformers.size(); for (uint32 a = 0; a < numDeformers; ++a) { if (mDeformers[a]->GetType() == deformerTypeID) @@ -258,7 +262,7 @@ namespace EMotionFX uint32 count = 0; // for all deformers - const uint32 numDeformers = mDeformers.GetLength(); + const uint32 numDeformers = mDeformers.size(); for (uint32 a = 0; a < numDeformers; ++a) { // if this is a deformer of the type we search for diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MeshDeformerStack.h b/Gems/EMotionFX/Code/EMotionFX/Source/MeshDeformerStack.h index 902eecf0d2..020e2b2b75 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MeshDeformerStack.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MeshDeformerStack.h @@ -12,7 +12,7 @@ #include "EMotionFXConfig.h" #include "MeshDeformer.h" #include "BaseObject.h" -#include +#include namespace EMotionFX @@ -134,7 +134,7 @@ namespace EMotionFX * Get the number of deformers in the stack. * @result The number of deformers in the stack. */ - uint32 GetNumDeformers() const; + size_t GetNumDeformers() const; /** * Get a given deformer. @@ -159,7 +159,7 @@ namespace EMotionFX MeshDeformer* FindDeformerByType(uint32 deformerTypeID, uint32 occurrence = 0) const; private: - MCore::Array mDeformers; /**< The stack of deformers. */ + AZStd::vector mDeformers; /**< The stack of deformers. */ Mesh* mMesh; /**< Pointer to the mesh to which the modifier stack belongs to.*/ /** diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MorphMeshDeformer.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/MorphMeshDeformer.cpp index c609f908d1..41b1475927 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MorphMeshDeformer.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MorphMeshDeformer.cpp @@ -26,7 +26,6 @@ namespace EMotionFX MorphMeshDeformer::MorphMeshDeformer(Mesh* mesh) : MeshDeformer(mesh) { - mDeformPasses.SetMemoryCategory(EMFX_MEMCATEGORY_GEOMETRY_DEFORMERS); } @@ -64,8 +63,8 @@ namespace EMotionFX MorphMeshDeformer* result = aznew MorphMeshDeformer(mesh); // copy the deform passes - result->mDeformPasses.Resize(mDeformPasses.GetLength()); - for (uint32 i = 0; i < mDeformPasses.GetLength(); ++i) + result->mDeformPasses.resize(mDeformPasses.size()); + for (uint32 i = 0; i < mDeformPasses.size(); ++i) { DeformPass& pass = result->mDeformPasses[i]; pass.mDeformDataNr = mDeformPasses[i].mDeformDataNr; @@ -89,7 +88,7 @@ namespace EMotionFX const uint32 lodLevel = actorInstance->GetLODLevel(); // apply all deform passes - const uint32 numPasses = mDeformPasses.GetLength(); + const uint32 numPasses = mDeformPasses.size(); for (uint32 i = 0; i < numPasses; ++i) { // find the morph target @@ -198,7 +197,7 @@ namespace EMotionFX void MorphMeshDeformer::Reinitialize(Actor* actor, Node* node, uint32 lodLevel) { // clear the deform passes, but don't free the currently allocated/reserved memory - mDeformPasses.Clear(false); + mDeformPasses.clear(); // get the morph setup MorphSetup* morphSetup = actor->GetMorphSetup(lodLevel); @@ -219,8 +218,8 @@ namespace EMotionFX if (deformData->mNodeIndex == node->GetNodeIndex()) { // add an empty deform pass and fill it afterwards - mDeformPasses.AddEmpty(); - const uint32 deformPassIndex = mDeformPasses.GetLength() - 1; + mDeformPasses.emplace_back(); + const uint32 deformPassIndex = mDeformPasses.size() - 1; mDeformPasses[deformPassIndex].mDeformDataNr = j; mDeformPasses[deformPassIndex].mMorphTarget = morphTarget; } @@ -231,18 +230,18 @@ namespace EMotionFX void MorphMeshDeformer::AddDeformPass(const DeformPass& deformPass) { - mDeformPasses.Add(deformPass); + mDeformPasses.emplace_back(deformPass); } - uint32 MorphMeshDeformer::GetNumDeformPasses() const + size_t MorphMeshDeformer::GetNumDeformPasses() const { - return mDeformPasses.GetLength(); + return mDeformPasses.size(); } void MorphMeshDeformer::ReserveDeformPasses(uint32 numPasses) { - mDeformPasses.Reserve(numPasses); + mDeformPasses.reserve(numPasses); } } // namespace EMotionFX diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MorphMeshDeformer.h b/Gems/EMotionFX/Code/EMotionFX/Source/MorphMeshDeformer.h index 6cbf4cae5b..ae56ecc96d 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MorphMeshDeformer.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MorphMeshDeformer.h @@ -122,7 +122,7 @@ namespace EMotionFX * Get the number of deform passes. * @result The number of deform passes. */ - uint32 GetNumDeformPasses() const; + size_t GetNumDeformPasses() const; /** * Pre-allocate space for the deform passes. @@ -132,7 +132,7 @@ namespace EMotionFX void ReserveDeformPasses(uint32 numPasses); private: - MCore::Array mDeformPasses; /**< The deform passes. Each pass basically represents a morph target. */ + AZStd::vector mDeformPasses; /**< The deform passes. Each pass basically represents a morph target. */ /** * Default constructor. diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MorphSetup.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/MorphSetup.cpp index 0c9f4f8cd7..386f73ae23 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MorphSetup.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MorphSetup.cpp @@ -10,6 +10,7 @@ #include "MorphSetup.h" #include "MorphTarget.h" #include +#include #include namespace EMotionFX @@ -17,14 +18,6 @@ namespace EMotionFX AZ_CLASS_ALLOCATOR_IMPL(MorphSetup, DeformerAllocator, 0) - // constructor - MorphSetup::MorphSetup() - : BaseObject() - { - mMorphTargets.SetMemoryCategory(EMFX_MEMCATEGORY_GEOMETRY_PMORPHTARGETS); - } - - // destructor MorphSetup::~MorphSetup() { @@ -42,7 +35,7 @@ namespace EMotionFX // add a morph target void MorphSetup::AddMorphTarget(MorphTarget* morphTarget) { - mMorphTargets.Add(morphTarget); + mMorphTargets.emplace_back(morphTarget); } @@ -54,14 +47,18 @@ namespace EMotionFX mMorphTargets[nr]->Destroy(); } - mMorphTargets.Remove(nr); + mMorphTargets.erase(AZStd::next(begin(mMorphTargets), nr)); } // remove a morph target void MorphSetup::RemoveMorphTarget(MorphTarget* morphTarget, bool delFromMem) { - mMorphTargets.RemoveByValue(morphTarget); + const auto* foundMorphTarget = AZStd::find(begin(mMorphTargets), end(mMorphTargets), morphTarget); + if (foundMorphTarget != end(mMorphTargets)) + { + mMorphTargets.erase(foundMorphTarget); + } if (delFromMem) { @@ -73,13 +70,13 @@ namespace EMotionFX // remove all morph targets void MorphSetup::RemoveAllMorphTargets() { - const uint32 numTargets = mMorphTargets.GetLength(); + const uint32 numTargets = mMorphTargets.size(); for (uint32 i = 0; i < numTargets; ++i) { mMorphTargets[i]->Destroy(); } - mMorphTargets.Clear(); + mMorphTargets.clear(); } @@ -87,7 +84,7 @@ namespace EMotionFX MorphTarget* MorphSetup::FindMorphTargetByID(uint32 id) const { // linear search, and check IDs - const uint32 numTargets = mMorphTargets.GetLength(); + const uint32 numTargets = mMorphTargets.size(); for (uint32 i = 0; i < numTargets; ++i) { if (mMorphTargets[i]->GetID() == id) @@ -105,7 +102,7 @@ namespace EMotionFX uint32 MorphSetup::FindMorphTargetNumberByID(uint32 id) const { // linear search, and check IDs - const uint32 numTargets = mMorphTargets.GetLength(); + const uint32 numTargets = mMorphTargets.size(); for (uint32 i = 0; i < numTargets; ++i) { if (mMorphTargets[i]->GetID() == id) @@ -121,7 +118,7 @@ namespace EMotionFX uint32 MorphSetup::FindMorphTargetIndexByName(const char* name) const { - const uint32 numTargets = mMorphTargets.GetLength(); + const uint32 numTargets = mMorphTargets.size(); for (uint32 i = 0; i < numTargets; ++i) { if (mMorphTargets[i]->GetNameString() == name) @@ -136,7 +133,7 @@ namespace EMotionFX uint32 MorphSetup::FindMorphTargetIndexByNameNoCase(const char* name) const { - const uint32 numTargets = mMorphTargets.GetLength(); + const uint32 numTargets = mMorphTargets.size(); for (uint32 i = 0; i < numTargets; ++i) { if (AzFramework::StringFunc::Equal(mMorphTargets[i]->GetNameString().c_str(), name, false /* no case */)) @@ -152,7 +149,7 @@ namespace EMotionFX // find a morph target by name (case sensitive) MorphTarget* MorphSetup::FindMorphTargetByName(const char* name) const { - const uint32 numTargets = mMorphTargets.GetLength(); + const uint32 numTargets = mMorphTargets.size(); for (uint32 i = 0; i < numTargets; ++i) { if (mMorphTargets[i]->GetNameString() == name) @@ -168,7 +165,7 @@ namespace EMotionFX // find a morph target by name (not case sensitive) MorphTarget* MorphSetup::FindMorphTargetByNameNoCase(const char* name) const { - const uint32 numTargets = mMorphTargets.GetLength(); + const uint32 numTargets = mMorphTargets.size(); for (uint32 i = 0; i < numTargets; ++i) { if (AzFramework::StringFunc::Equal(mMorphTargets[i]->GetNameString().c_str(), name, false /* no case */)) @@ -188,7 +185,7 @@ namespace EMotionFX MorphSetup* clone = MorphSetup::Create(); // clone all morph targets - const uint32 numMorphTargets = mMorphTargets.GetLength(); + const uint32 numMorphTargets = mMorphTargets.size(); for (uint32 i = 0; i < numMorphTargets; ++i) { clone->AddMorphTarget(mMorphTargets[i]->Clone()); @@ -201,7 +198,7 @@ namespace EMotionFX void MorphSetup::ReserveMorphTargets(uint32 numMorphTargets) { - mMorphTargets.Reserve(numMorphTargets); + mMorphTargets.reserve(numMorphTargets); } @@ -215,7 +212,7 @@ namespace EMotionFX } // scale the morph targets - const uint32 numMorphTargets = mMorphTargets.GetLength(); + const uint32 numMorphTargets = mMorphTargets.size(); for (uint32 i = 0; i < numMorphTargets; ++i) { mMorphTargets[i]->Scale(scaleFactor); diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MorphSetup.h b/Gems/EMotionFX/Code/EMotionFX/Source/MorphSetup.h index 6a19a0247c..c7c04ae636 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MorphSetup.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MorphSetup.h @@ -40,7 +40,7 @@ namespace EMotionFX * Get the number of morph targets inside this morph setup. * @result The number of morph targets. */ - MCORE_INLINE uint32 GetNumMorphTargets() const { return mMorphTargets.GetLength(); } + MCORE_INLINE size_t GetNumMorphTargets() const { return mMorphTargets.size(); } /** * Get a given morph target. @@ -137,12 +137,12 @@ namespace EMotionFX protected: - MCore::Array mMorphTargets; /**< The collection of morph targets. */ + AZStd::vector mMorphTargets; /**< The collection of morph targets. */ /** * The constructor. */ - MorphSetup(); + MorphSetup() = default; /** * The destructor. Automatically removes all morph targets from memory. diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MorphSetupInstance.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/MorphSetupInstance.cpp index f27051d7e2..456056d00f 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MorphSetupInstance.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MorphSetupInstance.cpp @@ -20,7 +20,6 @@ namespace EMotionFX MorphSetupInstance::MorphSetupInstance() : BaseObject() { - mMorphTargets.SetMemoryCategory(EMFX_MEMCATEGORY_GEOMETRY_PMORPHTARGETS); Init(nullptr); } @@ -63,7 +62,7 @@ namespace EMotionFX // allocate the number of morph targets const uint32 numMorphTargets = morphSetup->GetNumMorphTargets(); - mMorphTargets.Resize(numMorphTargets); + mMorphTargets.resize(numMorphTargets); // update the ID values for (uint32 i = 0; i < numMorphTargets; ++i) @@ -77,7 +76,7 @@ namespace EMotionFX uint32 MorphSetupInstance::FindMorphTargetIndexByID(uint32 id) const { // try to locate the morph target with the given ID - const uint32 numTargets = mMorphTargets.GetLength(); + const uint32 numTargets = mMorphTargets.size(); for (uint32 i = 0; i < numTargets; ++i) { if (mMorphTargets[i].GetID() == id) diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MorphSetupInstance.h b/Gems/EMotionFX/Code/EMotionFX/Source/MorphSetupInstance.h index 7cc0c0dbd0..e597cb7a63 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MorphSetupInstance.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MorphSetupInstance.h @@ -11,7 +11,7 @@ // include the required headers #include "EMotionFXConfig.h" #include "BaseObject.h" -#include +#include namespace EMotionFX @@ -123,7 +123,7 @@ namespace EMotionFX * This should always be equal to the number of morph targets in the highest detail. * @result The number of morph targets. */ - MCORE_INLINE uint32 GetNumMorphTargets() const { return mMorphTargets.GetLength(); } + MCORE_INLINE size_t GetNumMorphTargets() const { return mMorphTargets.size(); } /** * Get a specific morph target. @@ -149,7 +149,7 @@ namespace EMotionFX MorphTarget* FindMorphTargetByID(uint32 id); private: - MCore::Array mMorphTargets; /**< The unique morph target information. */ + AZStd::vector mMorphTargets; /**< The unique morph target information. */ /** * The default constructor. diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MorphTarget.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/MorphTarget.cpp index 0a62253464..3bb84881ff 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MorphTarget.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MorphTarget.cpp @@ -11,6 +11,7 @@ #include "Node.h" #include "MorphTarget.h" #include +#include #include namespace EMotionFX @@ -31,12 +32,6 @@ namespace EMotionFX } - // destructor - MorphTarget::~MorphTarget() - { - } - - // convert the given phoneme name to a phoneme set MorphTarget::EPhonemeSet MorphTarget::FindPhonemeSet(const AZStd::string& phonemeName) { diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MorphTarget.h b/Gems/EMotionFX/Code/EMotionFX/Source/MorphTarget.h index 726f7d81bc..829d6f5be6 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MorphTarget.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MorphTarget.h @@ -286,10 +286,5 @@ namespace EMotionFX * @param name The unique name of the morph target. */ MorphTarget(const char* name); - - /** - * The destructor. - */ - virtual ~MorphTarget(); }; } // namespace EMotionFX diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MorphTargetStandard.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/MorphTargetStandard.cpp index 6d2dc08d4b..d1c23ba04d 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MorphTargetStandard.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MorphTargetStandard.cpp @@ -177,7 +177,7 @@ namespace EMotionFX const float normalizedWeight = CalcNormalizedWeight(newWeight); // convert in range of 0..1 // calculate the new transformations for all nodes of this morph target - const uint32 numTransforms = mTransforms.GetLength(); + const uint32 numTransforms = mTransforms.size(); for (uint32 i = 0; i < numTransforms; ++i) { // if this is the node that gets modified by this transform @@ -214,7 +214,7 @@ namespace EMotionFX } // check all transforms - const uint32 numTransforms = mTransforms.GetLength(); + const uint32 numTransforms = mTransforms.size(); for (uint32 i = 0; i < numTransforms; ++i) { if (mTransforms[i].mNodeIndex == nodeIndex) @@ -239,7 +239,7 @@ namespace EMotionFX Transform newTransform; // calculate the new transformations for all nodes of this morph target - const uint32 numTransforms = mTransforms.GetLength(); + const uint32 numTransforms = mTransforms.size(); for (uint32 i = 0; i < numTransforms; ++i) { // try to find the node @@ -277,9 +277,9 @@ namespace EMotionFX } } - uint32 MorphTargetStandard::GetNumDeformDatas() const + size_t MorphTargetStandard::GetNumDeformDatas() const { - return static_cast(mDeformDatas.size()); + return mDeformDatas.size(); } MorphTargetStandard::DeformData* MorphTargetStandard::GetDeformData(uint32 nr) const @@ -294,12 +294,13 @@ namespace EMotionFX void MorphTargetStandard::AddTransformation(const Transformation& transform) { - mTransforms.Add(transform); + mTransforms.emplace_back(transform); } - uint32 MorphTargetStandard::GetNumTransformations() const + // get the number of transformations in this morph target + size_t MorphTargetStandard::GetNumTransformations() const { - return mTransforms.GetLength(); + return mTransforms.size(); } MorphTargetStandard::Transformation& MorphTargetStandard::GetTransformation(uint32 nr) @@ -321,7 +322,7 @@ namespace EMotionFX // now clone the deform datas clone->mDeformDatas.resize(mDeformDatas.size()); - for (size_t i = 0; i < mDeformDatas.size(); ++i) + for (uint32 i = 0; i < mDeformDatas.size(); ++i) { clone->mDeformDatas[i] = mDeformDatas[i]->Clone(); } @@ -404,7 +405,7 @@ namespace EMotionFX // pre-allocate memory for the transformations void MorphTargetStandard::ReserveTransformations(uint32 numTransforms) { - mTransforms.Reserve(numTransforms); + mTransforms.reserve(numTransforms); } void MorphTargetStandard::RemoveDeformData(uint32 index, bool delFromMem) @@ -419,7 +420,7 @@ namespace EMotionFX void MorphTargetStandard::RemoveTransformation(uint32 index) { - mTransforms.Remove(index); + mTransforms.erase(AZStd::next(begin(mTransforms), index)); } @@ -433,7 +434,7 @@ namespace EMotionFX } // scale the transformations - const uint32 numTransformations = mTransforms.GetLength(); + const uint32 numTransformations = mTransforms.size(); for (uint32 i = 0; i < numTransformations; ++i) { Transformation& transform = mTransforms[i]; diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MorphTargetStandard.h b/Gems/EMotionFX/Code/EMotionFX/Source/MorphTargetStandard.h index 2d8a20ec11..cda878efbb 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MorphTargetStandard.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MorphTargetStandard.h @@ -175,7 +175,7 @@ namespace EMotionFX * Get the number of deform data objects. * @result The number of deform data objects. */ - uint32 GetNumDeformDatas() const; + size_t GetNumDeformDatas() const; /** * Get a given deform data object. @@ -200,7 +200,7 @@ namespace EMotionFX * Get the number of transformations which are part of this bones morph target. * @result The number of tranformations. */ - uint32 GetNumTransformations() const; + size_t GetNumTransformations() const; /** * Get a given transformation and it's corresponding node id to which the transformation belongs to. @@ -260,7 +260,7 @@ namespace EMotionFX void Scale(float scaleFactor) override; private: - MCore::Array mTransforms; /**< The relative transformations for the given nodes, in local space. The rotation however is absolute. */ + AZStd::vector mTransforms; /**< The relative transformations for the given nodes, in local space. The rotation however is absolute. */ AZStd::vector mDeformDatas; /**< The deformation data objects. */ /** diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MotionGroup.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/MotionGroup.cpp deleted file mode 100644 index 8b3a874c3b..0000000000 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MotionGroup.cpp +++ /dev/null @@ -1,277 +0,0 @@ -/* - * 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 required headers -#include "MotionGroup.h" -#include "MotionInstance.h" -#include "ActorInstance.h" -#include "EMotionFXManager.h" -#include "MotionInstancePool.h" -#include "AnimGraphPose.h" -#include - - -namespace EMotionFX -{ - AZ_CLASS_ALLOCATOR_IMPL(MotionGroup, MotionAllocator, 0) - - - // default constructor - MotionGroup::MotionGroup() - : BaseObject() - { - mParentMotionInstance = nullptr; - } - - - // extended constructor - MotionGroup::MotionGroup(MotionInstance* parentMotionInstance) - : BaseObject() - { - LinkToMotionInstance(parentMotionInstance); - } - - - // destructor - MotionGroup::~MotionGroup() - { - RemoveAllMotionInstances(); - } - - - // creation - MotionGroup* MotionGroup::Create() - { - return aznew MotionGroup(); - } - - - // creation - MotionGroup* MotionGroup::Create(MotionInstance* parentMotionInstance) - { - return aznew MotionGroup(parentMotionInstance); - } - - - // link to a motion instance - void MotionGroup::LinkToMotionInstance(MotionInstance* parentMotionInstance) - { - mParentMotionInstance = parentMotionInstance; - } - - - // add a motion to the group - MotionInstance* MotionGroup::AddMotion(Motion* motion, PlayBackInfo* playInfo, uint32 startNodeIndex) - { - MCORE_ASSERT(mParentMotionInstance); // use LinkToMotionInstance before - - // create the new motion instance - MotionInstance* newInstance = GetMotionInstancePool().RequestNew(motion, mParentMotionInstance->GetActorInstance()); - - // initialize the motion instance settings - if (playInfo == nullptr) // if no playinfo specified, use default playback settings - { - PlayBackInfo info; - newInstance->InitFromPlayBackInfo(info); - } - else - { - newInstance->InitFromPlayBackInfo(*playInfo); - } - - // add it to the motion instance array - mMotionInstances.Add(newInstance); - - return newInstance; - } - - - // remove all motion instances from the group and from memory - void MotionGroup::RemoveAllMotionInstances() - { - // remove all motion instances from memory - const uint32 numInstances = mMotionInstances.GetLength(); - for (uint32 i = 0; i < numInstances; ++i) - { - GetMotionInstancePool().Free(mMotionInstances[i]); - } - - mMotionInstances.Clear(); - } - - - // remove a given motion by its motion instance - void MotionGroup::RemoveMotionInstance(MotionInstance* instance) - { - if (mMotionInstances.RemoveByValue(instance)) - { - GetMotionInstancePool().Free(instance); - } - } - - - // remove all motion instances using a given motion - void MotionGroup::RemoveMotion(Motion* motion) - { - // for all the motion instances - for (uint32 i = 0; i < mMotionInstances.GetLength();) - { - // if this motion instance uses the given motion - if (mMotionInstances[i]->GetMotion() == motion) - { - // remove it from memory and from the array - GetMotionInstancePool().Free(mMotionInstances[i]); - mMotionInstances.Remove(i); - } - else - { - i++; - } - } - } - - - // remove a motion instance by its index - void MotionGroup::RemoveMotionInstance(uint32 index) - { - MCORE_ASSERT(index < mMotionInstances.GetLength()); - - // remove it from memory and from the array - GetMotionInstancePool().Free(mMotionInstances[index]); - mMotionInstances.Remove(index); - } - - - // update the motion instances - void MotionGroup::Update(float timePassed) - { - // update the motion instances - const uint32 numInstances = mMotionInstances.GetLength(); - for (uint32 i = 0; i < numInstances; ++i) - { - mMotionInstances[i]->Update(timePassed); - } - } - - - // perform the blending and output it in the outPose buffer - void MotionGroup::Output(const Pose* inPose, Pose* outPose) - { - uint32 i; - - // calculate the total weight - float totalWeight = 0.0f; - const uint32 numInstances = mMotionInstances.GetLength(); - for (i = 0; i < numInstances; ++i) - { - totalWeight += mMotionInstances[i]->GetWeight(); - } - - // calculate the inverse of the total weight so that we can replace divides by multiplies, which is faster - float invTotalWeight; - if (totalWeight < 0.0001f) - { - invTotalWeight = 0.0f; - } - else - { - invTotalWeight = 1.0f / totalWeight; - } - - const ActorInstance* actorInstance = inPose->GetActorInstance(); - const uint32 threadIndex = actorInstance->GetThreadIndex(); - AnimGraphPosePool& posePool = GetEMotionFX().GetThreadData(threadIndex)->GetPosePool(); - AnimGraphPose* groupAnimGraphPose = posePool.RequestPose(actorInstance); - - // get the group blend pose and make sure it's big enough - Pose* groupBlendPose = &groupAnimGraphPose->GetPose();//mParentMotionInstance->GetActorInstance()->GetActor()->GetGroupBlendPose(); - MCORE_ASSERT(groupBlendPose->GetNumTransforms() == inPose->GetNumTransforms()); - - // blend using the normalized weights - for (i = 0; i < numInstances; ++i) - { - // calculate the normalized weight - const float normalizedWeight = mMotionInstances[i]->GetWeight() * invTotalWeight; - - // output the motion output into the group blend buffer - mMotionInstances[i]->GetMotion()->Update(inPose, groupBlendPose, mMotionInstances[i]); - - // if it's the first motion instance in the group - if (i == 0) - { - // blend all transforms - // TODO: use only enabled nodes - const uint32 numTransforms = outPose->GetNumTransforms(); - for (uint32 t = 0; t < numTransforms; ++t) - { - Transform& transform = groupBlendPose->GetLocalSpaceTransformDirect(t); - Transform& outTransform = outPose->GetLocalSpaceTransformDirect(t); - transform.mRotation.Normalize(); - - EMFX_SCALECODE - ( - //transform.mScaleRotation.Normalize(); - outTransform.mScale = transform.mScale * normalizedWeight; - //outTransform.mScaleRotation = transform.mScaleRotation * normalizedWeight; - ) - - outTransform.mPosition = transform.mPosition * normalizedWeight; - outTransform.mRotation = transform.mRotation * normalizedWeight; - } - } - else - { - // blend all transforms - // TODO: use only enabled nodes - const uint32 numTransforms = outPose->GetNumTransforms(); - for (uint32 t = 0; t < numTransforms; ++t) - { - Transform& transform = groupBlendPose->GetLocalSpaceTransformDirect(t); - Transform& outTransform = outPose->GetLocalSpaceTransformDirect(t); - - outTransform.mPosition += transform.mPosition * normalizedWeight; - - EMFX_SCALECODE - ( - outTransform.mScale += transform.mScale * normalizedWeight; - - // make sure we use the correct hemisphere - //if (outTransform.mScaleRotation.Dot( transform.mScaleRotation ) < 0.0f) - //transform.mScaleRotation = -transform.mScaleRotation; - - //outTransform.mScaleRotation += transform.mScaleRotation * normalizedWeight; - ) - - // make sure we use the correct hemisphere - if (outTransform.mRotation.Dot(transform.mRotation) < 0.0f) - { - transform.mRotation = -transform.mRotation; - } - - outTransform.mRotation += transform.mRotation * normalizedWeight; - } - } - } // for all motion instances in the group - - // normalize the quaternions - const uint32 numTransforms = outPose->GetNumTransforms(); - for (uint32 t = 0; t < numTransforms; ++t) - { - Transform& outTransform = outPose->GetLocalSpaceTransformDirect(t); - outTransform.mRotation.Normalize(); - - //EMFX_SCALECODE - //( - //outTransform.mScaleRotation.Normalize(); - //) - } - - // free the pose - posePool.FreePose(groupAnimGraphPose); - } -} // namespace EMotionFX diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MotionInstance.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/MotionInstance.cpp index bbadff74f2..292aef9d54 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MotionInstance.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MotionInstance.cpp @@ -819,7 +819,7 @@ namespace EMotionFX } // calculate a world space transformation for a given node by sampling the motion at a given time - void MotionInstance::CalcGlobalTransform(const MCore::Array& hierarchyPath, float timeValue, Transform* outTransform) const + void MotionInstance::CalcGlobalTransform(const AZStd::vector& hierarchyPath, float timeValue, Transform* outTransform) const { Actor* actor = m_actorInstance->GetActor(); Skeleton* skeleton = actor->GetSkeleton(); @@ -829,7 +829,7 @@ namespace EMotionFX outTransform->Identity(); // iterate from root towards the node (so backwards in the array) - for (int32 i = hierarchyPath.GetLength() - 1; i >= 0; --i) + for (int32 i = hierarchyPath.size() - 1; i >= 0; --i) { // get the current node index const AZ::u32 nodeIndex = hierarchyPath[i]; diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MotionInstance.h b/Gems/EMotionFX/Code/EMotionFX/Source/MotionInstance.h index 5c7ed822e3..d0f2d1d3fb 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MotionInstance.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MotionInstance.h @@ -821,7 +821,7 @@ namespace EMotionFX void CalcRelativeTransform(Node* rootNode, float curTime, float oldTime, Transform* outTransform) const; bool ExtractMotion(Transform& outTrajectoryDelta); - void CalcGlobalTransform(const MCore::Array& hierarchyPath, float timeValue, Transform* outTransform) const; + void CalcGlobalTransform(const AZStd::vector& hierarchyPath, float timeValue, Transform* outTransform) const; void ResetTimes(); AZ_DEPRECATED(void CalcNewTimeAfterUpdate(float timePassed, float* outNewTime) const, "MotionInstance::CalcNewTimeAfterUpdate has been deprecated, please use MotionInstance::CalcPlayStateAfterUpdate(timeDelta).m_currentTime instead."); diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MotionInstancePool.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/MotionInstancePool.cpp index 0277843cf9..f2abc5f5de 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MotionInstancePool.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MotionInstancePool.cpp @@ -42,8 +42,6 @@ namespace EMotionFX // constructor MotionInstancePool::Pool::Pool() { - mFreeList.SetMemoryCategory(EMFX_MEMCATEGORY_MOTIONINSTANCEPOOL); - mSubPools.SetMemoryCategory(EMFX_MEMCATEGORY_MOTIONINSTANCEPOOL); mPoolType = POOLTYPE_DYNAMIC; mData = nullptr; mNumInstances = 0; @@ -59,7 +57,7 @@ namespace EMotionFX { MCore::Free(mData); mData = nullptr; - mFreeList.Clear(); + mFreeList.clear(); } else if (mPoolType == POOLTYPE_DYNAMIC) @@ -67,14 +65,14 @@ namespace EMotionFX MCORE_ASSERT(mData == nullptr); // delete all subpools - const uint32 numSubPools = mSubPools.GetLength(); + const uint32 numSubPools = mSubPools.size(); for (uint32 s = 0; s < numSubPools; ++s) { delete mSubPools[s]; } - mSubPools.Clear(); + mSubPools.clear(); - mFreeList.Clear(); + mFreeList.clear(); } else { @@ -142,7 +140,7 @@ namespace EMotionFX if (poolType == POOLTYPE_STATIC) { mPool->mData = (uint8*)MCore::Allocate(numInitialInstances * sizeof(MotionInstance), EMFX_MEMCATEGORY_MOTIONINSTANCEPOOL);// alloc space - mPool->mFreeList.ResizeFast(numInitialInstances); + mPool->mFreeList.resize_no_construct(numInitialInstances); for (uint32 i = 0; i < numInitialInstances; ++i) { void* memLocation = (void*)(mPool->mData + i * sizeof(MotionInstance)); @@ -153,20 +151,20 @@ namespace EMotionFX else // if we have a dynamic pool if (poolType == POOLTYPE_DYNAMIC) { - mPool->mSubPools.Reserve(32); + mPool->mSubPools.reserve(32); SubPool* subPool = new SubPool(); subPool->mData = (uint8*)MCore::Allocate(numInitialInstances * sizeof(MotionInstance), EMFX_MEMCATEGORY_MOTIONINSTANCEPOOL);// alloc space subPool->mNumInstances = numInitialInstances; - mPool->mFreeList.ResizeFast(numInitialInstances); + mPool->mFreeList.resize_no_construct(numInitialInstances); for (uint32 i = 0; i < numInitialInstances; ++i) { mPool->mFreeList[i].mAddress = (void*)(subPool->mData + i * sizeof(MotionInstance)); mPool->mFreeList[i].mSubPool = subPool; } - mPool->mSubPools.Add(subPool); + mPool->mSubPools.emplace_back(subPool); } else { @@ -186,9 +184,9 @@ namespace EMotionFX } // if there is are free items left - if (mPool->mFreeList.GetLength() > 0) + if (mPool->mFreeList.size() > 0) { - const MemLocation& location = mPool->mFreeList.GetLast(); + const MemLocation& location = mPool->mFreeList.back(); MotionInstance* result = MotionInstance::Create(location.mAddress, motion, actorInstance); if (location.mSubPool) @@ -197,7 +195,7 @@ namespace EMotionFX } result->SetSubPool(location.mSubPool); - mPool->mFreeList.RemoveLast(); // remove it from the free list + mPool->mFreeList.pop_back(); // remove it from the free list mPool->mNumUsedInstances++; return result; } @@ -212,14 +210,14 @@ namespace EMotionFX subPool->mData = (uint8*)MCore::Allocate(numInstances * sizeof(MotionInstance), EMFX_MEMCATEGORY_MOTIONINSTANCEPOOL);// alloc space subPool->mNumInstances = numInstances; - const uint32 startIndex = mPool->mFreeList.GetLength(); + const uint32 startIndex = mPool->mFreeList.size(); //mPool->mFreeList.Reserve( numInstances * 2 ); - if (mPool->mFreeList.GetMaxLength() < mPool->mNumInstances) + if (mPool->mFreeList.capacity() < mPool->mNumInstances) { - mPool->mFreeList.Reserve(mPool->mNumInstances + mPool->mFreeList.GetMaxLength() / 2); + mPool->mFreeList.reserve(mPool->mNumInstances + mPool->mFreeList.capacity() / 2); } - mPool->mFreeList.ResizeFast(startIndex + numInstances); + mPool->mFreeList.resize_no_construct(startIndex + numInstances); for (uint32 i = 0; i < numInstances; ++i) { void* memAddress = (void*)(subPool->mData + i * sizeof(MotionInstance)); @@ -227,16 +225,16 @@ namespace EMotionFX mPool->mFreeList[i + startIndex].mSubPool = subPool; } - mPool->mSubPools.Add(subPool); + mPool->mSubPools.emplace_back(subPool); - const MemLocation& location = mPool->mFreeList.GetLast(); + const MemLocation& location = mPool->mFreeList.back(); MotionInstance* result = MotionInstance::Create(location.mAddress, motion, actorInstance); if (location.mSubPool) { location.mSubPool->mNumInUse++; } result->SetSubPool(location.mSubPool); - mPool->mFreeList.RemoveLast(); // remove it from the free list + mPool->mFreeList.pop_back(); // remove it from the free list mPool->mNumUsedInstances++; return result; } @@ -276,9 +274,9 @@ namespace EMotionFX motionInstance->GetSubPool()->mNumInUse--; } - mPool->mFreeList.AddEmpty(); - mPool->mFreeList.GetLast().mAddress = motionInstance; - mPool->mFreeList.GetLast().mSubPool = motionInstance->GetSubPool(); + mPool->mFreeList.emplace_back(); + mPool->mFreeList.back().mAddress = motionInstance; + mPool->mFreeList.back().mSubPool = motionInstance->GetSubPool(); mPool->mNumUsedInstances--; motionInstance->DecreaseReferenceCount(); @@ -292,7 +290,7 @@ namespace EMotionFX Lock(); MCore::LogInfo("EMotionFX::MotionInstancePool::LogMemoryStats() - Logging motion instance pool info"); - const uint32 numFree = mPool->mFreeList.GetLength(); + const uint32 numFree = mPool->mFreeList.size(); uint32 numUsed = mPool->mNumUsedInstances; uint32 memUsage = 0; uint32 usedMemUsage = 0; @@ -320,12 +318,12 @@ namespace EMotionFX totalUsedInstancesMemUsage += usedMemUsage; totalMemUsage += memUsage; totalMemUsage += sizeof(Pool); - totalMemUsage += mPool->mFreeList.CalcMemoryUsage(false); + totalMemUsage += mPool->mFreeList.capacity() * sizeof(decltype(mPool->mFreeList)::value_type); MCore::LogInfo("Pool:"); if (mPool->mPoolType == POOLTYPE_DYNAMIC) { - MCore::LogInfo(" - Num SubPools: %d", mPool->mSubPools.GetLength()); + MCore::LogInfo(" - Num SubPools: %d", mPool->mSubPools.size()); } MCore::LogInfo(" - Num Instances: %d", mPool->mNumInstances); MCore::LogInfo(" - Num Free: %d", numFree); @@ -377,17 +375,17 @@ namespace EMotionFX { Lock(); - for (uint32 i = 0; i < mPool->mSubPools.GetLength(); ) + for (uint32 i = 0; i < mPool->mSubPools.size(); ) { SubPool* subPool = mPool->mSubPools[i]; if (subPool->mNumInUse == 0) { // remove all free allocations - for (uint32 a = 0; a < mPool->mFreeList.GetLength(); ) + for (uint32 a = 0; a < mPool->mFreeList.size(); ) { if (mPool->mFreeList[a].mSubPool == subPool) { - mPool->mFreeList.Remove(a); + mPool->mFreeList.erase(AZStd::next(begin(mPool->mFreeList), a)); } else { @@ -396,7 +394,7 @@ namespace EMotionFX } mPool->mNumInstances -= subPool->mNumInstances; - mPool->mSubPools.Remove(i); + mPool->mSubPools.erase(AZStd::next(begin(mPool->mSubPools), i)); delete subPool; } else @@ -405,11 +403,11 @@ namespace EMotionFX } } - mPool->mSubPools.Shrink(); + mPool->mSubPools.shrink_to_fit(); //mPool->mFreeList.Shrink(); - if ((mPool->mFreeList.GetMaxLength() - mPool->mFreeList.GetLength()) > 4096) + if ((mPool->mFreeList.capacity() - mPool->mFreeList.size()) > 4096) { - mPool->mFreeList.ReserveExact(mPool->mFreeList.GetLength() + 4096); + mPool->mFreeList.reserve(mPool->mFreeList.size() + 4096); } Unlock(); diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MotionInstancePool.h b/Gems/EMotionFX/Code/EMotionFX/Source/MotionInstancePool.h index 0fd658915e..8cb675bb08 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MotionInstancePool.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MotionInstancePool.h @@ -11,7 +11,7 @@ // include the required headers #include "EMotionFXConfig.h" #include "BaseObject.h" -#include +#include #include @@ -91,8 +91,8 @@ namespace EMotionFX uint32 mNumInstances; uint32 mNumUsedInstances; uint32 mSubPoolSize; - MCore::Array mFreeList; - MCore::Array mSubPools; + AZStd::vector mFreeList; + AZStd::vector mSubPools; EPoolType mPoolType; }; diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MotionLayerSystem.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/MotionLayerSystem.cpp index 14e6b582b4..9cda792890 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MotionLayerSystem.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MotionLayerSystem.cpp @@ -22,8 +22,6 @@ namespace EMotionFX MotionLayerSystem::MotionLayerSystem(ActorInstance* actorInstance) : MotionSystem(actorInstance) { - mLayerPasses.SetMemoryCategory(EMFX_MEMCATEGORY_MOTIONS_MOTIONSYSTEMS); - // set the motion based actor repositioning layer pass mRepositioningPass = RepositioningLayerPass::Create(this); } @@ -50,7 +48,7 @@ namespace EMotionFX void MotionLayerSystem::RemoveAllLayerPasses(bool delFromMem) { // delete all layer passes - const uint32 numLayerPasses = mLayerPasses.GetLength(); + const uint32 numLayerPasses = mLayerPasses.size(); for (uint32 i = 0; i < numLayerPasses; ++i) { if (delFromMem) @@ -59,7 +57,7 @@ namespace EMotionFX } } - mLayerPasses.Clear(); + mLayerPasses.clear(); } @@ -67,23 +65,23 @@ namespace EMotionFX void MotionLayerSystem::StartMotion(MotionInstance* motion, PlayBackInfo* info) { // check if we have any motions playing already - const uint32 numMotionInstances = mMotionInstances.GetLength(); + const uint32 numMotionInstances = mMotionInstances.size(); if (numMotionInstances > 0) { // find the right location in the motion instance array to insert this motion instance uint32 insertPos = FindInsertPos(motion->GetPriorityLevel()); if (insertPos != MCORE_INVALIDINDEX32) { - mMotionInstances.Insert(insertPos, motion); + mMotionInstances.emplace(AZStd::next(begin(mMotionInstances), insertPos), motion); } else { - mMotionInstances.Add(motion); + mMotionInstances.emplace_back(motion); } } else // no motions are playing, so just add it { - mMotionInstances.Add(motion); + mMotionInstances.emplace_back(motion); } // trigger an event @@ -101,7 +99,7 @@ namespace EMotionFX // find the location where to insert a new motion with a given priority uint32 MotionLayerSystem::FindInsertPos(uint32 priorityLevel) const { - const uint32 numInstances = mMotionInstances.GetLength(); + const uint32 numInstances = mMotionInstances.size(); for (uint32 i = 0; i < numInstances; ++i) { if (mMotionInstances[i]->GetPriorityLevel() <= priorityLevel) @@ -127,7 +125,7 @@ namespace EMotionFX mMotionQueue->Update(); // process all layer passes - const uint32 numPasses = mLayerPasses.GetLength(); + const uint32 numPasses = mLayerPasses.size(); for (uint32 i = 0; i < numPasses; ++i) { mLayerPasses[i]->Process(); @@ -153,7 +151,7 @@ namespace EMotionFX // update the motion tree void MotionLayerSystem::UpdateMotionTree() { - for (uint32 i = 0; i < mMotionInstances.GetLength(); ++i) + for (uint32 i = 0; i < mMotionInstances.size(); ++i) { MotionInstance* source = mMotionInstances[i]; @@ -235,7 +233,7 @@ namespace EMotionFX if (source->GetCanOverwrite()) { // remove all motions that got overwritten by the current one - const uint32 numToRemove = mMotionInstances.GetLength() - (i + 1); + const uint32 numToRemove = mMotionInstances.size() - (i + 1); for (uint32 a = 0; a < numToRemove; ++a) { RemoveMotionInstance(mMotionInstances[i + 1]); @@ -253,7 +251,7 @@ namespace EMotionFX uint32 numRemoved = 0; // start from the bottom up - for (uint32 i = mMotionInstances.GetLength() - 1; i != MCORE_INVALIDINDEX32;) + for (uint32 i = mMotionInstances.size() - 1; i != MCORE_INVALIDINDEX32;) { MotionInstance* curInstance = mMotionInstances[i]; @@ -276,7 +274,7 @@ namespace EMotionFX MotionInstance* MotionLayerSystem::FindFirstNonMixingMotionInstance() const { // if there aren't any motion instances, return nullptr - const uint32 numInstances = mMotionInstances.GetLength(); + const uint32 numInstances = mMotionInstances.size(); if (numInstances == 0) { return nullptr; @@ -306,7 +304,7 @@ namespace EMotionFX Pose* tempActorPose = &tempAnimGraphPose->GetPose(); - const uint32 numMotionInstances = mMotionInstances.GetLength(); + const uint32 numMotionInstances = mMotionInstances.size(); if (numMotionInstances > 0) { if (numMotionInstances > 1) @@ -396,14 +394,14 @@ namespace EMotionFX // add a new pass void MotionLayerSystem::AddLayerPass(LayerPass* newPass) { - mLayerPasses.Add(newPass); + mLayerPasses.emplace_back(newPass); } // get the number of layer passes - uint32 MotionLayerSystem::GetNumLayerPasses() const + size_t MotionLayerSystem::GetNumLayerPasses() const { - return mLayerPasses.GetLength(); + return mLayerPasses.size(); } @@ -415,14 +413,17 @@ namespace EMotionFX mLayerPasses[nr]->Destroy(); } - mLayerPasses.Remove(nr); + mLayerPasses.erase(AZStd::next(begin(mLayerPasses), nr)); } // remove a given pass void MotionLayerSystem::RemoveLayerPass(LayerPass* pass, bool delFromMem) { - mLayerPasses.RemoveByValue(pass); + if (const auto it = AZStd::find(begin(mLayerPasses), end(mLayerPasses), pass); it != end(mLayerPasses)) + { + mLayerPasses.erase(it); + } if (delFromMem) { @@ -434,7 +435,7 @@ namespace EMotionFX // insert a layer pass at a given position void MotionLayerSystem::InsertLayerPass(uint32 insertPos, LayerPass* pass) { - mLayerPasses.Insert(insertPos, pass); + mLayerPasses.emplace(AZStd::next(begin(mLayerPasses), insertPos), pass); } diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MotionLayerSystem.h b/Gems/EMotionFX/Code/EMotionFX/Source/MotionLayerSystem.h index ff4761d49c..e207f48fd5 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MotionLayerSystem.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MotionLayerSystem.h @@ -140,7 +140,7 @@ namespace EMotionFX * Get the number of layer passes currently added to this motion layer system. * @result The number of layer passes. */ - uint32 GetNumLayerPasses() const; + size_t GetNumLayerPasses() const; /** * Remove a given layer pass by index. @@ -179,7 +179,7 @@ namespace EMotionFX private: - MCore::Array mLayerPasses; /**< The layer passes. */ + AZStd::vector mLayerPasses; /**< The layer passes. */ RepositioningLayerPass* mRepositioningPass; /**< The motion based actor repositioning layer pass. */ /** diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MotionManager.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/MotionManager.cpp index 13ac1956fa..b193c58175 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MotionManager.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MotionManager.cpp @@ -29,7 +29,7 @@ #include #include #include -#include +#include #include @@ -42,11 +42,8 @@ namespace EMotionFX MotionManager::MotionManager() : BaseObject() { - mMotions.SetMemoryCategory(EMFX_MEMCATEGORY_MOTIONS_MOTIONMANAGER); - mMotionSets.SetMemoryCategory(EMFX_MEMCATEGORY_MOTIONS_MOTIONMANAGER); - // reserve space for 400 motions - mMotions.Reserve(400); + mMotions.reserve(400); m_motionDataFactory = aznew MotionDataFactory(); } @@ -69,13 +66,13 @@ namespace EMotionFX if (delFromMemory) { // destroy all motion sets, they will internally call RemoveMotionSetWithoutLock(this) in their destructor - while (mMotionSets.GetLength() > 0) + while (mMotionSets.size() > 0) { delete mMotionSets[0]; } // destroy all motions, they will internally call RemoveMotionWithoutLock(this) in their destructor - while (mMotions.GetLength() > 0) + while (mMotions.size() > 0) { mMotions[0]->Destroy(); } @@ -84,12 +81,12 @@ namespace EMotionFX { // wait with execution until we can set the lock mSetLock.Lock(); - mMotionSets.Clear(); + mMotionSets.clear(); mSetLock.Unlock(); // clear the arrays without destroying the memory of the entries mLock.Lock(); - mMotions.Clear(); + mMotions.clear(); mLock.Unlock(); } } @@ -99,7 +96,7 @@ namespace EMotionFX Motion* MotionManager::FindMotionByName(const char* motionName, bool isTool) const { // get the number of motions and iterate through them - const uint32 numMotions = mMotions.GetLength(); + const uint32 numMotions = mMotions.size(); for (uint32 i = 0; i < numMotions; ++i) { if (mMotions[i]->GetIsOwnedByRuntime() == isTool) @@ -122,7 +119,7 @@ namespace EMotionFX Motion* MotionManager::FindMotionByFileName(const char* fileName, bool isTool) const { // get the number of motions and iterate through them - const uint32 numMotions = mMotions.GetLength(); + const uint32 numMotions = mMotions.size(); for (uint32 i = 0; i < numMotions; ++i) { if (mMotions[i]->GetIsOwnedByRuntime() == isTool) @@ -145,7 +142,7 @@ namespace EMotionFX MotionSet* MotionManager::FindMotionSetByFileName(const char* fileName, bool isTool) const { // get the number of motion sets and iterate through them - const uint32 numMotionSets = mMotionSets.GetLength(); + const uint32 numMotionSets = mMotionSets.size(); for (uint32 i = 0; i < numMotionSets; ++i) { MotionSet* motionSet = mMotionSets[i]; @@ -169,7 +166,7 @@ namespace EMotionFX MotionSet* MotionManager::FindMotionSetByName(const char* name, bool isOwnedByRuntime) const { // get the number of motion sets and iterate through them - const uint32 numMotionSets = mMotionSets.GetLength(); + const uint32 numMotionSets = mMotionSets.size(); for (uint32 i = 0; i < numMotionSets; ++i) { MotionSet* motionSet = mMotionSets[i]; @@ -192,7 +189,7 @@ namespace EMotionFX uint32 MotionManager::FindMotionIndexByName(const char* motionName, bool isTool) const { // get the number of motions and iterate through them - const uint32 numMotions = mMotions.GetLength(); + const uint32 numMotions = mMotions.size(); for (uint32 i = 0; i < numMotions; ++i) { if (mMotions[i]->GetIsOwnedByRuntime() == isTool) @@ -215,7 +212,7 @@ namespace EMotionFX uint32 MotionManager::FindMotionSetIndexByName(const char* name, bool isTool) const { // get the number of motions and iterate through them - const uint32 numMotionSets = mMotionSets.GetLength(); + const uint32 numMotionSets = mMotionSets.size(); for (uint32 i = 0; i < numMotionSets; ++i) { MotionSet* motionSet = mMotionSets[i]; @@ -240,7 +237,7 @@ namespace EMotionFX uint32 MotionManager::FindMotionIndexByID(uint32 id) const { // get the number of motions and iterate through them - const uint32 numMotions = mMotions.GetLength(); + const uint32 numMotions = mMotions.size(); for (uint32 i = 0; i < numMotions; ++i) { if (mMotions[i]->GetID() == id) @@ -257,7 +254,7 @@ namespace EMotionFX uint32 MotionManager::FindMotionSetIndexByID(uint32 id) const { // get the number of motion sets and iterate through them - const uint32 numMotionSets = mMotionSets.GetLength(); + const uint32 numMotionSets = mMotionSets.size(); for (uint32 i = 0; i < numMotionSets; ++i) { // compare the motion names @@ -275,7 +272,7 @@ namespace EMotionFX Motion* MotionManager::FindMotionByID(uint32 id) const { // get the number of motions and iterate through them - const uint32 numMotions = mMotions.GetLength(); + const uint32 numMotions = mMotions.size(); for (uint32 i = 0; i < numMotions; ++i) { if (mMotions[i]->GetID() == id) @@ -292,7 +289,7 @@ namespace EMotionFX MotionSet* MotionManager::FindMotionSetByID(uint32 id) const { // get the number of motion sets and iterate through them - const uint32 numMotionSets = mMotionSets.GetLength(); + const uint32 numMotionSets = mMotionSets.size(); for (uint32 i = 0; i < numMotionSets; ++i) { if (mMotionSets[i]->GetID() == id) @@ -309,7 +306,7 @@ namespace EMotionFX uint32 MotionManager::FindMotionSetIndex(MotionSet* motionSet) const { // get the number of motion sets and iterate through them - const uint32 numMotionSets = mMotionSets.GetLength(); + const uint32 numMotionSets = mMotionSets.size(); for (uint32 i = 0; i < numMotionSets; ++i) { if (mMotionSets[i] == motionSet) @@ -326,7 +323,7 @@ namespace EMotionFX uint32 MotionManager::FindMotionIndex(Motion* motion) const { // get the number of motions and iterate through them - const uint32 numMotions = mMotions.GetLength(); + const uint32 numMotions = mMotions.size(); for (uint32 i = 0; i < numMotions; ++i) { // compare the motions @@ -345,7 +342,7 @@ namespace EMotionFX { // wait with execution until we can set the lock mLock.Lock(); - mMotions.Add(motion); + mMotions.emplace_back(motion); mLock.Unlock(); } @@ -386,7 +383,7 @@ namespace EMotionFX uint32 MotionManager::FindMotionIndexByFileName(const char* fileName, bool isTool) const { // get the number of motions and iterate through them - const uint32 numMotions = mMotions.GetLength(); + const uint32 numMotions = mMotions.size(); for (uint32 i = 0; i < numMotions; ++i) { if (mMotions[i]->GetIsOwnedByRuntime() == isTool) @@ -494,7 +491,7 @@ namespace EMotionFX } // Reset all motion entries in the motion sets of the current motion. - const uint32 numMotionSets = mMotionSets.GetLength(); + const uint32 numMotionSets = mMotionSets.size(); for (i = 0; i < numMotionSets; ++i) { MotionSet* motionSet = mMotionSets[i]; @@ -525,11 +522,11 @@ namespace EMotionFX // which unregisters the motion from the motion manager motion->SetAutoUnregister(false); motion->Destroy(); - mMotions.Remove(index); // only remove the motion from the motion manager without destroying its memory + mMotions.erase(AZStd::next(begin(mMotions), index)); // only remove the motion from the motion manager without destroying its memory } else { - mMotions.Remove(index); // only remove the motion from the motion manager without destroying its memory + mMotions.erase(AZStd::next(begin(mMotions), index)); // only remove the motion from the motion manager without destroying its memory } return true; @@ -540,7 +537,7 @@ namespace EMotionFX void MotionManager::AddMotionSet(MotionSet* motionSet) { MCore::LockGuard lock(mLock); - mMotionSets.Add(motionSet); + mMotionSets.emplace_back(motionSet); } @@ -578,7 +575,7 @@ namespace EMotionFX delete motionSet; } - mMotionSets.Remove(index); + mMotionSets.erase(AZStd::next(begin(mMotionSets), index)); return true; } @@ -606,7 +603,7 @@ namespace EMotionFX uint32 result = 0; // get the number of motion sets and iterate through them - const uint32 numMotionSets = mMotionSets.GetLength(); + const uint32 numMotionSets = mMotionSets.size(); for (uint32 i = 0; i < numMotionSets; ++i) { // sum up the root motion sets @@ -626,7 +623,7 @@ namespace EMotionFX uint32 currentIndex = 0; // get the number of motion sets and iterate through them - const uint32 numMotionSets = mMotionSets.GetLength(); + const uint32 numMotionSets = mMotionSets.size(); for (uint32 i = 0; i < numMotionSets; ++i) { // get the current motion set diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MotionManager.h b/Gems/EMotionFX/Code/EMotionFX/Source/MotionManager.h index 78d8b0eaa7..98555da9f7 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MotionManager.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MotionManager.h @@ -10,7 +10,7 @@ #include #include -#include +#include #include #include #include @@ -50,7 +50,7 @@ namespace EMotionFX * Get the number of motions in the motion manager. * @return The number of registered motions. */ - MCORE_INLINE uint32 GetNumMotions() const { return mMotions.GetLength(); } + MCORE_INLINE size_t GetNumMotions() const { return mMotions.size(); } /** * Remove the motion with the given name from the motion manager. @@ -160,7 +160,7 @@ namespace EMotionFX * Get the number of motion sets in the motion manager. * @return The number of registered motion sets. */ - MCORE_INLINE uint32 GetNumMotionSets() const { return mMotionSets.GetLength(); } + MCORE_INLINE size_t GetNumMotionSets() const { return mMotionSets.size(); } /** * Calculate the number of root motion sets. @@ -233,8 +233,8 @@ namespace EMotionFX const MotionDataFactory& GetMotionDataFactory() const; private: - MCore::Array mMotions; /**< The array of motions. */ - MCore::Array mMotionSets; /**< The array of motion sets. */ + AZStd::vector mMotions; /**< The array of motions. */ + AZStd::vector mMotionSets; /**< The array of motion sets. */ MCore::Mutex mLock; /**< Motion lock. */ MCore::Mutex mSetLock; /**< The motion set multithread lock. */ MotionDataFactory* m_motionDataFactory = nullptr; /**< The motion data factory. */ diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MotionQueue.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/MotionQueue.cpp index d3a76f7967..ea8826fe9a 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MotionQueue.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MotionQueue.cpp @@ -26,7 +26,6 @@ namespace EMotionFX { MCORE_ASSERT(actorInstance && motionSystem); - mEntries.SetMemoryCategory(EMFX_MEMCATEGORY_MOTIONS_MISC); mActorInstance = actorInstance; mMotionSystem = motionSystem; } @@ -54,7 +53,7 @@ namespace EMotionFX GetMotionInstancePool().Free(mEntries[nr].mMotion); } - mEntries.Remove(nr); + mEntries.erase(AZStd::next(begin(mEntries), nr)); } @@ -168,7 +167,7 @@ namespace EMotionFX void MotionQueue::ClearAllEntries() { - while (mEntries.GetLength()) + while (mEntries.size()) { RemoveEntry(0); } @@ -177,26 +176,26 @@ namespace EMotionFX void MotionQueue::AddEntry(const MotionQueue::QueueEntry& motion) { - mEntries.Add(motion); + mEntries.emplace_back(motion); } - uint32 MotionQueue::GetNumEntries() const + size_t MotionQueue::GetNumEntries() const { - return mEntries.GetLength(); + return mEntries.size(); } MotionQueue::QueueEntry& MotionQueue::GetFirstEntry() { - MCORE_ASSERT(mEntries.GetLength() > 0); + MCORE_ASSERT(mEntries.size() > 0); return mEntries[0]; } void MotionQueue::RemoveFirstEntry() { - mEntries.RemoveFirst(); + mEntries.erase(mEntries.begin()); } diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MotionQueue.h b/Gems/EMotionFX/Code/EMotionFX/Source/MotionQueue.h index 5480f5c40d..9978a16bc6 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MotionQueue.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MotionQueue.h @@ -12,7 +12,7 @@ #include "EMotionFXConfig.h" #include "BaseObject.h" #include "PlayBackInfo.h" -#include +#include namespace EMotionFX @@ -79,7 +79,7 @@ namespace EMotionFX * Get the number of entries currently in the queue. * @result The number of entries currently scheduled in the queue. */ - uint32 GetNumEntries() const; + size_t GetNumEntries() const; /** * Get the first entry. @@ -133,7 +133,7 @@ namespace EMotionFX void PlayNextMotion(); private: - MCore::Array mEntries; /**< The motion queue entries. */ + AZStd::vector mEntries; /**< The motion queue entries. */ MotionSystem* mMotionSystem; /**< Motion system access pointer. */ ActorInstance* mActorInstance; /**< The actor instance where this queue works on. */ diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MotionSystem.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/MotionSystem.cpp index 364ad28d3d..fcd243c95f 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MotionSystem.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MotionSystem.cpp @@ -29,7 +29,6 @@ namespace EMotionFX { MCORE_ASSERT(actorInstance); - mMotionInstances.SetMemoryCategory(EMFX_MEMCATEGORY_MOTIONS_MOTIONSYSTEMS); mActorInstance = actorInstance; mMotionQueue = nullptr; @@ -46,11 +45,11 @@ namespace EMotionFX GetEventManager().OnDeleteMotionSystem(this); // delete the motion infos - while (mMotionInstances.GetLength()) + while (mMotionInstances.size()) { //delete mMotionInstances.GetLast(); - GetMotionInstancePool().Free(mMotionInstances.GetLast()); - mMotionInstances.RemoveLast(); + GetMotionInstancePool().Free(mMotionInstances.back()); + mMotionInstances.pop_back(); } // get rid of the motion queue @@ -138,7 +137,14 @@ namespace EMotionFX bool MotionSystem::RemoveMotionInstance(MotionInstance* instance) { // remove the motion instance from the actor - const bool isSuccess = mMotionInstances.RemoveByValue(instance); + const bool isSuccess = [this, instance] { + if(const auto it = AZStd::find(begin(mMotionInstances), end(mMotionInstances), instance); it != end(mMotionInstances)) + { + mMotionInstances.erase(it); + return true; + } + return false; + }(); // delete the motion instance from memory if (isSuccess) @@ -167,7 +173,7 @@ namespace EMotionFX // stop all the motions that are currently playing void MotionSystem::StopAllMotions() { - const uint32 numInstances = mMotionInstances.GetLength(); + const uint32 numInstances = mMotionInstances.size(); for (uint32 i = 0; i < numInstances; ++i) { mMotionInstances[i]->Stop(); @@ -178,7 +184,7 @@ namespace EMotionFX // stop all motion instances of a given motion void MotionSystem::StopAllMotions(Motion* motion) { - const uint32 numInstances = mMotionInstances.GetLength(); + const uint32 numInstances = mMotionInstances.size(); for (uint32 i = 0; i < numInstances; ++i) { if (mMotionInstances[i]->GetMotion()->GetID() == motion->GetID()) @@ -190,16 +196,16 @@ namespace EMotionFX // remove the given motion - void MotionSystem::RemoveMotion(uint32 nr, bool deleteMem) + void MotionSystem::RemoveMotion(size_t nr, bool deleteMem) { - MCORE_ASSERT(nr < mMotionInstances.GetLength()); + MCORE_ASSERT(nr < mMotionInstances.size()); if (deleteMem) { GetEMotionFX().GetMotionInstancePool()->Free(mMotionInstances[nr]); } - mMotionInstances.Remove(nr); + mMotionInstances.erase(AZStd::next(begin(mMotionInstances), nr)); } @@ -208,15 +214,15 @@ namespace EMotionFX { MCORE_ASSERT(motion); - uint32 nr = mMotionInstances.Find(motion); - MCORE_ASSERT(nr != MCORE_INVALIDINDEX32); + const auto it = AZStd::find(begin(mMotionInstances), end(mMotionInstances), motion); + MCORE_ASSERT(it != end(mMotionInstances)); - if (nr == MCORE_INVALIDINDEX32) + if (it == end(mMotionInstances)) { return; } - RemoveMotion(nr, delMem); + RemoveMotion(AZStd::distance(begin(mMotionInstances), it), delMem); } @@ -224,7 +230,7 @@ namespace EMotionFX void MotionSystem::UpdateMotionInstances(float timePassed) { // update all the motion infos - const uint32 numInstances = mMotionInstances.GetLength(); + const uint32 numInstances = mMotionInstances.size(); for (uint32 i = 0; i < numInstances; ++i) { mMotionInstances[i]->Update(timePassed); @@ -242,7 +248,7 @@ namespace EMotionFX } // for all motion instances currently playing in this actor - const uint32 numInstances = mMotionInstances.GetLength(); + const uint32 numInstances = mMotionInstances.size(); for (uint32 i = 0; i < numInstances; ++i) { // check if this one is the one we are searching for, if so, return that it is still valid @@ -269,7 +275,7 @@ namespace EMotionFX } // for all motion instances currently playing in this actor - const uint32 numInstances = mMotionInstances.GetLength(); + const uint32 numInstances = mMotionInstances.size(); for (uint32 i = 0; i < numInstances; ++i) { const MotionInstance* motionInstance = mMotionInstances[i]; @@ -294,15 +300,15 @@ namespace EMotionFX // return given motion instance MotionInstance* MotionSystem::GetMotionInstance(uint32 nr) const { - MCORE_ASSERT(nr < mMotionInstances.GetLength()); + MCORE_ASSERT(nr < mMotionInstances.size()); return mMotionInstances[nr]; } // return number of motion instances - uint32 MotionSystem::GetNumMotionInstances() const + size_t MotionSystem::GetNumMotionInstances() const { - return mMotionInstances.GetLength(); + return mMotionInstances.size(); } @@ -350,12 +356,12 @@ namespace EMotionFX void MotionSystem::AddMotionInstance(MotionInstance* instance) { - mMotionInstances.Add(instance); + mMotionInstances.emplace_back(instance); } bool MotionSystem::GetIsPlaying() const { - return (mMotionInstances.GetLength() > 0); + return (mMotionInstances.size() > 0); } } // namespace EMotionFX diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MotionSystem.h b/Gems/EMotionFX/Code/EMotionFX/Source/MotionSystem.h index c0cbb779df..dd7ba26170 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MotionSystem.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MotionSystem.h @@ -11,7 +11,7 @@ // include the required headers #include "EMotionFXConfig.h" #include "BaseObject.h" -#include +#include namespace EMotionFX @@ -76,7 +76,7 @@ namespace EMotionFX * @param nr The motion to remove. * @param deleteMem If true the allocated memory of the motion will be deleted. */ - void RemoveMotion(uint32 nr, bool deleteMem = true); + void RemoveMotion(size_t nr, bool deleteMem = true); /** * Remove a given motion. @@ -122,7 +122,7 @@ namespace EMotionFX * @result The number of active motion instances inside this actor. * @see IsValidMotionInstance */ - uint32 GetNumMotionInstances() const; + size_t GetNumMotionInstances() const; /** * Checks if a given motion instance is still valid. @@ -215,7 +215,7 @@ namespace EMotionFX protected: - MCore::Array mMotionInstances; /**< The collection of motion instances. */ + AZStd::vector mMotionInstances; /**< The collection of motion instances. */ ActorInstance* mActorInstance; /**< The actor instance where this motion system belongs to. */ MotionQueue* mMotionQueue; /**< The motion queue. */ diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MultiThreadScheduler.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/MultiThreadScheduler.cpp index 9af9ddf71f..bd339ecb36 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MultiThreadScheduler.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MultiThreadScheduler.cpp @@ -30,9 +30,8 @@ namespace EMotionFX MultiThreadScheduler::MultiThreadScheduler() : ActorUpdateScheduler() { - mSteps.SetMemoryCategory(EMFX_MEMCATEGORY_UPDATESCHEDULERS); mCleanTimer = 0.0f; // time passed since last schedule cleanup, in seconds - mSteps.Reserve(1000); + mSteps.reserve(1000); } @@ -53,7 +52,7 @@ namespace EMotionFX void MultiThreadScheduler::Clear() { Lock(); - mSteps.Clear(); + mSteps.clear(); Unlock(); } @@ -79,7 +78,7 @@ namespace EMotionFX void MultiThreadScheduler::Print() { // for all steps - const uint32 numSteps = mSteps.GetLength(); + const uint32 numSteps = mSteps.size(); for (uint32 i = 0; i < numSteps; ++i) { AZ_Printf("EMotionFX", "STEP %.3d - %d", i, mSteps[i].mActorInstances.size()); @@ -92,7 +91,7 @@ namespace EMotionFX void MultiThreadScheduler::RemoveEmptySteps() { // process all steps - for (uint32 s = 0; s < mSteps.GetLength(); ) + for (uint32 s = 0; s < mSteps.size(); ) { // if the step isn't empty if (mSteps[s].mActorInstances.size() > 0) @@ -101,7 +100,7 @@ namespace EMotionFX } else // otherwise remove it { - mSteps.Remove(s); + mSteps.erase(AZStd::next(begin(mSteps), s)); } } } @@ -112,7 +111,7 @@ namespace EMotionFX { MCore::LockGuardRecursive guard(mMutex); - uint32 numSteps = mSteps.GetLength(); + uint32 numSteps = mSteps.size(); if (numSteps == 0) { return; @@ -124,7 +123,7 @@ namespace EMotionFX { mCleanTimer = 0.0f; RemoveEmptySteps(); - numSteps = mSteps.GetLength(); + numSteps = mSteps.size(); } //----------------------------------------------------------- @@ -216,7 +215,7 @@ namespace EMotionFX bool MultiThreadScheduler::FindNextFreeItem(ActorInstance* actorInstance, uint32 startStep, uint32* outStepNr) { // try out all steps - const uint32 numSteps = mSteps.GetLength(); + const uint32 numSteps = mSteps.size(); for (uint32 s = startStep; s < numSteps; ++s) { // if there is a conflicting dependency, skip this step @@ -236,7 +235,7 @@ namespace EMotionFX bool MultiThreadScheduler::HasActorInstanceInSteps(const ActorInstance* actorInstance) const { - const uint32 numSteps = mSteps.GetLength(); + const uint32 numSteps = mSteps.size(); for (uint32 s = 0; s < numSteps; ++s) { const ScheduleStep& step = mSteps[s]; @@ -258,9 +257,9 @@ namespace EMotionFX uint32 outStep = startStep; if (!FindNextFreeItem(instance, startStep, &outStep)) { - mSteps.Reserve(10); - mSteps.AddEmpty(); - outStep = mSteps.GetLength() - 1; + mSteps.reserve(10); + mSteps.emplace_back(); + outStep = mSteps.size() - 1; } // pre-allocate step size @@ -269,9 +268,9 @@ namespace EMotionFX mSteps[outStep].mActorInstances.reserve(mSteps[outStep].mActorInstances.size() + 10); } - if (mSteps[outStep].mDependencies.GetLength() % 5 == 0) + if (mSteps[outStep].mDependencies.size() % 5 == 0) { - mSteps[outStep].mDependencies.Reserve(mSteps[outStep].mDependencies.GetLength() + 5); + mSteps[outStep].mDependencies.reserve(mSteps[outStep].mDependencies.size() + 5); } // add the actor instance and its dependencies @@ -298,7 +297,7 @@ namespace EMotionFX MCore::LockGuardRecursive guard(mMutex); // for all scheduler steps, starting from the specified start step number - const uint32 numSteps = mSteps.GetLength(); + const uint32 numSteps = mSteps.size(); for (uint32 s = startStep; s < numSteps; ++s) { ScheduleStep& step = mSteps[s]; @@ -312,7 +311,7 @@ namespace EMotionFX if (step.mActorInstances.size() < numActorInstancesPreRemove) { // clear the dependencies (but don't delete the memory) - step.mDependencies.Clear(false); + step.mDependencies.clear(); // calculate the new dependencies for this step for (ActorInstance* stepActorInstance : step.mActorInstances) diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/MultiThreadScheduler.h b/Gems/EMotionFX/Code/EMotionFX/Source/MultiThreadScheduler.h index 75a5a6519a..4deebae866 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/MultiThreadScheduler.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/MultiThreadScheduler.h @@ -50,16 +50,8 @@ namespace EMotionFX */ struct EMFX_API ScheduleStep { - MCore::Array mDependencies; /**< The dependencies of this scheduler step. No actor instances with the same dependencies are allowed to be added to this step. */ + AZStd::vector mDependencies; /**< The dependencies of this scheduler step. No actor instances with the same dependencies are allowed to be added to this step. */ AZStd::vector mActorInstances; /**< The actor instances used inside this step. Each array entry will execute in another thread. */ - - /** - * The constructor. - */ - ScheduleStep() - { - mDependencies.SetMemoryCategory(EMFX_MEMCATEGORY_UPDATESCHEDULERS); - } }; /** @@ -128,10 +120,10 @@ namespace EMotionFX void Unlock(); const ScheduleStep& GetScheduleStep(uint32 index) const { return mSteps[index]; } - uint32 GetNumScheduleSteps() const { return mSteps.GetLength(); } + size_t GetNumScheduleSteps() const { return mSteps.size(); } protected: - MCore::Array< ScheduleStep > mSteps; /**< An array of update steps, that together form the schedule. */ + AZStd::vector< ScheduleStep > mSteps; /**< An array of update steps, that together form the schedule. */ float mCleanTimer; /**< The time passed since the last automatic call to the Optimize method. */ MCore::MutexRecursive mMutex; diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/Node.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/Node.cpp index 8ab7fa540d..a712ffe337 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/Node.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/Node.cpp @@ -20,10 +20,6 @@ namespace EMotionFX Node::Node(const char* name, Skeleton* skeleton) : BaseObject() { - // set the array memory categories - mAttributes.SetMemoryCategory(EMFX_MEMCATEGORY_NODES); - mChildIndices.SetMemoryCategory(EMFX_MEMCATEGORY_NODES); - mParentIndex = MCORE_INVALIDINDEX32; mNodeIndex = MCORE_INVALIDINDEX32; // hasn't been set yet mSkeletalLODs = 0xFFFFFFFF; // set all bits of the integer to 1, which enables this node in all LOD levels on default @@ -45,10 +41,6 @@ namespace EMotionFX Node::Node(uint32 nameID, Skeleton* skeleton) : BaseObject() { - // set the array memory categories - mAttributes.SetMemoryCategory(EMFX_MEMCATEGORY_NODES); - mChildIndices.SetMemoryCategory(EMFX_MEMCATEGORY_NODES); - mParentIndex = MCORE_INVALIDINDEX32; mNodeIndex = MCORE_INVALIDINDEX32; // hasn't been set yet mSkeletalLODs = 0xFFFFFFFF;// set all bits of the integer to 1, which enables this node in all LOD levels on default @@ -167,8 +159,8 @@ namespace EMotionFX result->mSemanticNameID = mSemanticNameID; // copy the node attributes - result->mAttributes.Reserve(mAttributes.GetLength()); - for (uint32 i = 0; i < mAttributes.GetLength(); i++) + result->mAttributes.reserve(mAttributes.size()); + for (uint32 i = 0; i < mAttributes.size(); i++) { result->AddAttribute(mAttributes[i]->Clone()); } @@ -181,10 +173,10 @@ namespace EMotionFX // removes all attributes void Node::RemoveAllAttributes() { - while (mAttributes.GetLength()) + while (mAttributes.size()) { - mAttributes.GetLast()->Destroy(); - mAttributes.RemoveLast(); + mAttributes.back()->Destroy(); + mAttributes.pop_back(); } } @@ -213,7 +205,7 @@ namespace EMotionFX numNodes++; // recurse down the hierarchy - const uint32 numChildNodes = mChildIndices.GetLength(); + const uint32 numChildNodes = mChildIndices.size(); for (uint32 i = 0; i < numChildNodes; ++i) { mSkeleton->GetNode(mChildIndices[i])->RecursiveCountChildNodes(numNodes); @@ -405,20 +397,20 @@ namespace EMotionFX void Node::AddAttribute(NodeAttribute* attribute) { - mAttributes.Add(attribute); + mAttributes.emplace_back(attribute); } - uint32 Node::GetNumAttributes() const + size_t Node::GetNumAttributes() const { - return mAttributes.GetLength(); + return mAttributes.size(); } NodeAttribute* Node::GetAttribute(uint32 attributeNr) { // make sure we are in range - MCORE_ASSERT(attributeNr < mAttributes.GetLength()); + MCORE_ASSERT(attributeNr < mAttributes.size()); // return the attribute return mAttributes[attributeNr]; @@ -428,7 +420,7 @@ namespace EMotionFX uint32 Node::FindAttributeNumber(uint32 attributeTypeID) const { // check all attributes, and find where the specific attribute is - const uint32 numAttributes = mAttributes.GetLength(); + const uint32 numAttributes = mAttributes.size(); for (uint32 i = 0; i < numAttributes; ++i) { if (mAttributes[i]->GetType() == attributeTypeID) @@ -445,7 +437,7 @@ namespace EMotionFX NodeAttribute* Node::GetAttributeByType(uint32 attributeType) { // check all attributes - const uint32 numAttributes = mAttributes.GetLength(); + const uint32 numAttributes = mAttributes.size(); for (uint32 i = 0; i < numAttributes; ++i) { if (mAttributes[i]->GetType() == attributeType) @@ -462,13 +454,13 @@ namespace EMotionFX // remove the given attribute void Node::RemoveAttribute(uint32 index) { - mAttributes.Remove(index); + mAttributes.erase(AZStd::next(begin(mAttributes), index)); } void Node::AddChild(uint32 nodeIndex) { - mChildIndices.AddExact(nodeIndex); + mChildIndices.emplace_back(nodeIndex); } @@ -480,31 +472,34 @@ namespace EMotionFX void Node::SetNumChildNodes(uint32 numChildNodes) { - mChildIndices.Resize(numChildNodes); + mChildIndices.resize(numChildNodes); } void Node::PreAllocNumChildNodes(uint32 numChildNodes) { - mChildIndices.Reserve(numChildNodes); + mChildIndices.reserve(numChildNodes); } void Node::RemoveChild(uint32 nodeIndex) { - mChildIndices.RemoveByValue(nodeIndex); + if (const auto it = AZStd::find(begin(mChildIndices), end(mChildIndices), nodeIndex); it != end(mChildIndices)) + { + mChildIndices.erase(it); + } } void Node::RemoveAllChildNodes() { - mChildIndices.Clear(); + mChildIndices.clear(); } bool Node::GetHasChildNodes() const { - return (mChildIndices.GetLength() > 0); + return (mChildIndices.size() > 0); } diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/Node.h b/Gems/EMotionFX/Code/EMotionFX/Source/Node.h index b8618018d2..73e8a41c01 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/Node.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/Node.h @@ -12,7 +12,7 @@ #include #include "EMotionFXConfig.h" #include "BaseObject.h" -#include +#include #include namespace EMotionFX @@ -168,7 +168,7 @@ namespace EMotionFX * Get the number of child nodes attached to this node. * @result The number of child nodes. */ - MCORE_INLINE uint32 GetNumChildNodes() const { return mChildIndices.GetLength(); } + MCORE_INLINE size_t GetNumChildNodes() const { return mChildIndices.size(); } /** * Get the number of child nodes down the hierarchy of this node. @@ -189,7 +189,7 @@ namespace EMotionFX * @param nodeIndex The node to check whether it is a child or not. * @result True if the given node is a child, false if not. */ - MCORE_INLINE bool CheckIfIsChildNode(uint32 nodeIndex) const { return (mChildIndices.Find(nodeIndex) != MCORE_INVALIDINDEX32); } + MCORE_INLINE bool CheckIfIsChildNode(uint32 nodeIndex) const { return (AZStd::find(begin(mChildIndices), end(mChildIndices), nodeIndex) != end(mChildIndices)); } /** * Add a child to this node. @@ -262,7 +262,7 @@ namespace EMotionFX * Get the number of node attributes. * @result The number of node attributes for this node. */ - uint32 GetNumAttributes() const; + size_t GetNumAttributes() const; /** * Get a given node attribute. @@ -421,8 +421,8 @@ namespace EMotionFX uint32 mNameID; /**< The ID, which is generated from the name. You can use this for fast compares between nodes. */ uint32 mSemanticNameID; /**< The semantic name ID, for example "LeftHand" or "RightFoot" or so, this can be used for retargeting. */ Skeleton* mSkeleton; /**< The skeleton where this node belongs to. */ - MCore::Array mChildIndices; /**< The indices that point to the child nodes. */ - MCore::Array mAttributes; /**< The node attributes. */ + AZStd::vector mChildIndices; /**< The indices that point to the child nodes. */ + AZStd::vector mAttributes; /**< The node attributes. */ uint8 mNodeFlags; /**< The node flags are used to store boolean attributes of the node as single bits. */ /** diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/NodeMap.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/NodeMap.cpp index 8f2e752917..edc1ea37cd 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/NodeMap.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/NodeMap.cpp @@ -41,14 +41,14 @@ namespace EMotionFX // preallocate space void NodeMap::Reserve(uint32 numEntries) { - mEntries.Reserve(numEntries); + mEntries.reserve(numEntries); } // resize the entries array void NodeMap::Resize(uint32 numEntries) { - mEntries.Resize(numEntries); + mEntries.resize(numEntries); } @@ -101,15 +101,15 @@ namespace EMotionFX void NodeMap::AddEntry(const char* firstName, const char* secondName) { MCORE_ASSERT(GetHasEntry(firstName) == false); // prevent duplicates - mEntries.AddEmpty(); - SetEntry(mEntries.GetLength() - 1, firstName, secondName); + mEntries.emplace_back(); + SetEntry(mEntries.size() - 1, firstName, secondName); } // remove a given entry by its index void NodeMap::RemoveEntryByIndex(uint32 entryIndex) { - mEntries.Remove(entryIndex); + mEntries.erase(AZStd::next(begin(mEntries), entryIndex)); } @@ -122,7 +122,7 @@ namespace EMotionFX return; } - mEntries.Remove(entryIndex); + mEntries.erase(AZStd::next(begin(mEntries), entryIndex)); } @@ -135,7 +135,7 @@ namespace EMotionFX return; } - mEntries.Remove(entryIndex); + mEntries.erase(AZStd::next(begin(mEntries), entryIndex)); } @@ -211,7 +211,7 @@ namespace EMotionFX uint32 numBytes = sizeof(FileFormat::NodeMapChunk); // for all entries - const uint32 numEntries = mEntries.GetLength(); + const uint32 numEntries = mEntries.size(); for (uint32 i = 0; i < numEntries; ++i) { numBytes += CalcFileStringSize(GetFirstNameString(i)); @@ -265,7 +265,7 @@ namespace EMotionFX // the main info FileFormat::NodeMapChunk nodeMapChunk{}; - nodeMapChunk.mNumEntries = mEntries.GetLength(); + nodeMapChunk.mNumEntries = mEntries.size(); MCore::Endian::ConvertUnsignedInt32To(&nodeMapChunk.mNumEntries, targetEndianType); if (f.Write(&nodeMapChunk, sizeof(FileFormat::NodeMapChunk)) == 0) { @@ -282,7 +282,7 @@ namespace EMotionFX } // for all entries - const uint32 numEntries = mEntries.GetLength(); + const uint32 numEntries = mEntries.size(); for (uint32 i = 0; i < numEntries; ++i) { if (WriteFileString(&f, GetFirstNameString(i), targetEndianType) == false) @@ -320,9 +320,9 @@ namespace EMotionFX // get the number of entries - uint32 NodeMap::GetNumEntries() const + size_t NodeMap::GetNumEntries() const { - return mEntries.GetLength(); + return mEntries.size(); } @@ -364,7 +364,7 @@ namespace EMotionFX // find an entry index by its name uint32 NodeMap::FindEntryIndexByName(const char* firstName) const { - const uint32 numEntries = mEntries.GetLength(); + const uint32 numEntries = mEntries.size(); for (uint32 i = 0; i < numEntries; ++i) { const AZStd::string& firstNameEntry = GetFirstName(i); @@ -381,7 +381,7 @@ namespace EMotionFX // find an entry index by its name ID uint32 NodeMap::FindEntryIndexByNameID(uint32 firstNameID) const { - const uint32 numEntries = mEntries.GetLength(); + const uint32 numEntries = mEntries.size(); for (uint32 i = 0; i < numEntries; ++i) { if (mEntries[i].mFirstNameID == firstNameID) diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/NodeMap.h b/Gems/EMotionFX/Code/EMotionFX/Source/NodeMap.h index d033d0a36f..6db38efc32 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/NodeMap.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/NodeMap.h @@ -11,7 +11,7 @@ // include required files #include "EMotionFXConfig.h" #include "BaseObject.h" -#include +#include #include #include @@ -54,7 +54,7 @@ namespace EMotionFX void Resize(uint32 numEntries); // get data - uint32 GetNumEntries() const; + size_t GetNumEntries() const; const char* GetFirstName(uint32 entryIndex) const; const char* GetSecondName(uint32 entryIndex) const; const AZStd::string& GetFirstNameString(uint32 entryIndex) const; @@ -88,7 +88,7 @@ namespace EMotionFX bool Save(const char* fileName, MCore::Endian::EEndianType targetEndianType) const; private: - MCore::Array mEntries; /**< The array of entries. */ + AZStd::vector mEntries; /**< The array of entries. */ AZStd::string mFileName; /**< The filename. */ Actor* mSourceActor; /**< The source actor. */ diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/Recorder.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/Recorder.cpp index 6c2c070e50..41c7c1e929 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/Recorder.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/Recorder.cpp @@ -7,6 +7,7 @@ */ #include +#include #include "Recorder.h" #include "RecorderBus.h" #include "ActorInstance.h" @@ -101,7 +102,6 @@ namespace EMotionFX mLastRecordTime = 0.0f; mCurrentPlayTime = 0.0f; - mObjects.SetMemoryCategory(EMFX_MEMCATEGORY_RECORDER); EMotionFX::ActorInstanceNotificationBus::Handler::BusConnect(); } @@ -345,7 +345,7 @@ namespace EMotionFX if (mRecordSettings.mRecordMorphs) { const uint32 numMorphs = actorInstance->GetMorphSetupInstance()->GetNumMorphTargets(); - actorInstanceData.mMorphTracks.Resize(numMorphs); + actorInstanceData.mMorphTracks.resize(numMorphs); for (uint32 m = 0; m < numMorphs; ++m) { actorInstanceData.mMorphTracks[m].Reserve(256); @@ -547,32 +547,31 @@ namespace EMotionFX const AnimGraph* animGraph = animGraphInstance->GetAnimGraph(); // add a new frame - MCore::Array& frames = animGraphInstanceData.mFrames; - if (frames.GetLength() > 0) + AZStd::vector& frames = animGraphInstanceData.mFrames; + if (frames.size() > 0) { - const uint32 byteOffset = frames.GetLast().mByteOffset + frames.GetLast().mNumBytes; - frames.AddEmpty(); - frames.GetLast().mByteOffset = byteOffset; - frames.GetLast().mNumBytes = 0; + const uint32 byteOffset = frames.back().mByteOffset + frames.back().mNumBytes; + frames.emplace_back(); + frames.back().mByteOffset = byteOffset; + frames.back().mNumBytes = 0; } else { - frames.AddEmpty(); - frames.GetLast().mByteOffset = 0; - frames.GetLast().mNumBytes = 0; + frames.emplace_back(); + frames.back().mByteOffset = 0; + frames.back().mNumBytes = 0; } // get the current frame - AnimGraphAnimFrame& currentFrame = frames.GetLast(); + AnimGraphAnimFrame& currentFrame = frames.back(); currentFrame.mTimeValue = mRecordTime; // save the parameter values const uint32 numParams = static_cast(animGraphInstance->GetAnimGraph()->GetNumValueParameters()); - currentFrame.mParameterValues.SetMemoryCategory(EMFX_MEMCATEGORY_RECORDER); - currentFrame.mParameterValues.Resize(numParams); + currentFrame.mParameterValues.resize(numParams); for (uint32 p = 0; p < numParams; ++p) { - currentFrame.mParameterValues[p] = animGraphInstance->GetParameterValue(p)->Clone(); + currentFrame.mParameterValues[p] = AZStd::unique_ptr(animGraphInstance->GetParameterValue(p)->Clone()); } // recursively save all unique datas @@ -595,19 +594,19 @@ namespace EMotionFX bool Recorder::SaveUniqueData(AnimGraphInstance* animGraphInstance, AnimGraphObject* object, AnimGraphInstanceData& animGraphInstanceData) { // get the current frame's data pointer - AnimGraphAnimFrame& currentFrame = animGraphInstanceData.mFrames.GetLast(); + AnimGraphAnimFrame& currentFrame = animGraphInstanceData.mFrames.back(); const uint32 frameOffset = currentFrame.mByteOffset; // prepare the objects array - mObjects.Clear(false); - mObjects.Reserve(1024); + mObjects.clear(); + mObjects.reserve(1024); // collect the objects we are going to save for this frame object->RecursiveCollectObjects(mObjects); // resize the object infos array - const uint32 numObjects = mObjects.GetLength(); - currentFrame.mObjectInfos.Resize(numObjects); + const uint32 numObjects = mObjects.size(); + currentFrame.mObjectInfos.resize(numObjects); // calculate how much memory we need for this frame uint32 requiredFrameBytes = 0; @@ -773,7 +772,7 @@ namespace EMotionFX { const size_t index = iterator - recordedActorInstances.begin(); const ActorInstanceData& actorInstanceData = *m_actorInstanceDatas[index]; - const uint32 numMorphs = actorInstanceData.mMorphTracks.GetLength(); + const uint32 numMorphs = actorInstanceData.mMorphTracks.size(); if (numMorphs == actorInstance->GetMorphSetupInstance()->GetNumMorphTargets()) { for (uint32 i = 0; i < numMorphs; ++i) @@ -848,27 +847,27 @@ namespace EMotionFX AnimGraphInstance* animGraphInstance = animGraphInstanceData.mAnimGraphInstance; // get the real frame number (clamped) - const uint32 realFrameNumber = MCore::Min(frameNumber, animGraphInstanceData.mFrames.GetLength() - 1); + const uint32 realFrameNumber = MCore::Min(frameNumber, animGraphInstanceData.mFrames.size() - 1); const AnimGraphAnimFrame& currentFrame = animGraphInstanceData.mFrames[realFrameNumber]; // get the data and objects buffers const uint32 byteOffset = currentFrame.mByteOffset; const uint8* frameDataBuffer = &animGraphInstanceData.mDataBuffer[byteOffset]; - const MCore::Array& frameObjects = currentFrame.mObjectInfos; + const AZStd::vector& frameObjects = currentFrame.mObjectInfos; // first lets update all parameter values - MCORE_ASSERT(currentFrame.mParameterValues.GetLength() == animGraphInstance->GetAnimGraph()->GetNumParameters()); - const uint32 numParameters = currentFrame.mParameterValues.GetLength(); + MCORE_ASSERT(currentFrame.mParameterValues.size() == animGraphInstance->GetAnimGraph()->GetNumParameters()); + const uint32 numParameters = currentFrame.mParameterValues.size(); for (uint32 p = 0; p < numParameters; ++p) { // make sure the parameters are of the same type MCORE_ASSERT(animGraphInstance->GetParameterValue(p)->GetType() == currentFrame.mParameterValues[p]->GetType()); - animGraphInstance->GetParameterValue(p)->InitFrom(currentFrame.mParameterValues[p]); + animGraphInstance->GetParameterValue(p)->InitFrom(currentFrame.mParameterValues[p].get()); } // process all objects for this frame uint32 totalBytesRead = 0; - const uint32 numObjects = frameObjects.GetLength(); + const uint32 numObjects = frameObjects.size(); for (uint32 a = 0; a < numObjects; ++a) { const AnimGraphAnimObjectInfo& objectInfo = frameObjects[a]; @@ -917,11 +916,11 @@ namespace EMotionFX animGraphInstance->CollectActiveAnimGraphNodes(&mActiveNodes); // get the history items as shortcut - MCore::Array& historyItems = actorInstanceData->mNodeHistoryItems; + AZStd::vector& historyItems = actorInstanceData->mNodeHistoryItems; // finalize items const size_t numActiveNodes = mActiveNodes.size(); - const uint32 numHistoryItems = historyItems.GetLength(); + const uint32 numHistoryItems = historyItems.size(); for (uint32 h = 0; h < numHistoryItems; ++h) { NodeHistoryItem* curItem = historyItems[h]; @@ -1023,7 +1022,7 @@ namespace EMotionFX } } - historyItems.Add(item); + historyItems.emplace_back(item); } // add the weight key and update infos @@ -1053,8 +1052,8 @@ namespace EMotionFX // try to find a given node history item Recorder::NodeHistoryItem* Recorder::FindNodeHistoryItem(const ActorInstanceData& actorInstanceData, AnimGraphNode* node, float recordTime) const { - const MCore::Array& historyItems = actorInstanceData.mNodeHistoryItems; - const uint32 numItems = historyItems.GetLength(); + const AZStd::vector& historyItems = actorInstanceData.mNodeHistoryItems; + const uint32 numItems = historyItems.size(); for (uint32 i = 0; i < numItems; ++i) { NodeHistoryItem* curItem = historyItems[i]; @@ -1076,8 +1075,8 @@ namespace EMotionFX // find a free track uint32 Recorder::FindFreeNodeHistoryItemTrack(const ActorInstanceData& actorInstanceData, NodeHistoryItem* item) const { - const MCore::Array& historyItems = actorInstanceData.mNodeHistoryItems; - const uint32 numItems = historyItems.GetLength(); + const AZStd::vector& historyItems = actorInstanceData.mNodeHistoryItems; + const uint32 numItems = historyItems.size(); bool found = false; uint32 trackIndex = 0; @@ -1144,8 +1143,8 @@ namespace EMotionFX uint32 Recorder::CalcMaxNodeHistoryTrackIndex(const ActorInstanceData& actorInstanceData) const { uint32 result = 0; - const MCore::Array& historyItems = actorInstanceData.mNodeHistoryItems; - const uint32 numItems = historyItems.GetLength(); + const AZStd::vector& historyItems = actorInstanceData.mNodeHistoryItems; + const uint32 numItems = historyItems.size(); for (uint32 i = 0; i < numItems; ++i) { NodeHistoryItem* curItem = historyItems[i]; @@ -1163,8 +1162,8 @@ namespace EMotionFX uint32 Recorder::CalcMaxEventHistoryTrackIndex(const ActorInstanceData& actorInstanceData) const { uint32 result = 0; - const MCore::Array& historyItems = actorInstanceData.mEventHistoryItems; - const uint32 numItems = historyItems.GetLength(); + const AZStd::vector& historyItems = actorInstanceData.mEventHistoryItems; + const uint32 numItems = historyItems.size(); for (uint32 i = 0; i < numItems; ++i) { EventHistoryItem* curItem = historyItems[i]; @@ -1210,10 +1209,10 @@ namespace EMotionFX animGraphInstance->CollectActiveAnimGraphNodes(&mActiveNodes); // get the history items as shortcut - const MCore::Array& historyItems = actorInstanceData->mNodeHistoryItems; + const AZStd::vector& historyItems = actorInstanceData->mNodeHistoryItems; // finalize all items - const uint32 numItems = historyItems.GetLength(); + const uint32 numItems = historyItems.size(); for (uint32 i = 0; i < numItems; ++i) { // remove unneeded key frames @@ -1246,7 +1245,7 @@ namespace EMotionFX const AnimGraphEventBuffer& eventBuffer = animGraphInstance->GetEventBuffer(); // iterate over all events - MCore::Array& historyItems = actorInstanceData->mEventHistoryItems; + AZStd::vector& historyItems = actorInstanceData->mEventHistoryItems; const uint32 numEvents = eventBuffer.GetNumEvents(); for (uint32 i = 0; i < numEvents; ++i) { @@ -1271,7 +1270,7 @@ namespace EMotionFX item->mTrackIndex = FindFreeEventHistoryItemTrack(*actorInstanceData, item); - historyItems.Add(item); + historyItems.emplace_back(item); } item->mEndTime = mRecordTime; @@ -1284,8 +1283,8 @@ namespace EMotionFX Recorder::EventHistoryItem* Recorder::FindEventHistoryItem(const ActorInstanceData& actorInstanceData, const EventInfo& eventInfo, float recordTime) { MCORE_UNUSED(recordTime); - const MCore::Array& historyItems = actorInstanceData.mEventHistoryItems; - const uint32 numItems = historyItems.GetLength(); + const AZStd::vector& historyItems = actorInstanceData.mEventHistoryItems; + const uint32 numItems = historyItems.size(); for (uint32 i = 0; i < numItems; ++i) { EventHistoryItem* curItem = historyItems[i]; @@ -1303,8 +1302,8 @@ namespace EMotionFX // find a free event track index uint32 Recorder::FindFreeEventHistoryItemTrack(const ActorInstanceData& actorInstanceData, EventHistoryItem* item) const { - const MCore::Array& historyItems = actorInstanceData.mEventHistoryItems; - const uint32 numItems = historyItems.GetLength(); + const AZStd::vector& historyItems = actorInstanceData.mEventHistoryItems; + const uint32 numItems = historyItems.size(); bool found = false; uint32 trackIndex = 0; while (found == false) @@ -1341,7 +1340,7 @@ namespace EMotionFX // find the frame number for a time value - uint32 Recorder::FindAnimGraphDataFrameNumber(float timeValue) const + size_t Recorder::FindAnimGraphDataFrameNumber(float timeValue) const { // check if we recorded any actor instances at all if (m_actorInstanceDatas.empty()) @@ -1357,7 +1356,7 @@ namespace EMotionFX return MCORE_INVALIDINDEX32; } - const uint32 numFrames = animGraphData->mFrames.GetLength(); + const uint32 numFrames = animGraphData->mFrames.size(); if (numFrames == 0) { return MCORE_INVALIDINDEX32; @@ -1373,9 +1372,9 @@ namespace EMotionFX return 0; } - if (timeValue > animGraphData->mFrames.GetLast().mTimeValue) + if (timeValue > animGraphData->mFrames.back().mTimeValue) { - return animGraphData->mFrames.GetLength() - 1; + return animGraphData->mFrames.size() - 1; } for (uint32 i = 0; i < numFrames - 1; ++i) @@ -1459,11 +1458,11 @@ namespace EMotionFX // extract sorted active items - void Recorder::ExtractNodeHistoryItems(const ActorInstanceData& actorInstanceData, float timeValue, bool sort, EValueType valueType, MCore::Array* outItems, MCore::Array* outMap) + void Recorder::ExtractNodeHistoryItems(const ActorInstanceData& actorInstanceData, float timeValue, bool sort, EValueType valueType, AZStd::vector* outItems, AZStd::vector* outMap) { // clear the map array const uint32 maxIndex = CalcMaxNodeHistoryTrackIndex(actorInstanceData); - outItems->Resize(maxIndex + 1); + outItems->resize(maxIndex + 1); for (uint32 i = 0; i <= maxIndex; ++i) { ExtractedNodeHistoryItem item; @@ -1471,12 +1470,12 @@ namespace EMotionFX item.mValue = 0.0f; item.mKeyTrackSampleTime = 0.0f; item.mNodeHistoryItem = nullptr; - outItems->SetElem(i, item); + outItems->emplace(AZStd::next(begin(*outItems), i), AZStd::move(item)); } // find all node history items - const MCore::Array& historyItems = actorInstanceData.mNodeHistoryItems; - const uint32 numItems = historyItems.GetLength(); + const AZStd::vector& historyItems = actorInstanceData.mNodeHistoryItems; + const uint32 numItems = historyItems.size(); for (uint32 i = 0; i < numItems; ++i) { NodeHistoryItem* curItem = historyItems[i]; @@ -1506,25 +1505,25 @@ namespace EMotionFX item.mValue = curItem->mGlobalWeights.GetValueAtTime(item.mKeyTrackSampleTime, nullptr, nullptr, mRecordSettings.mInterpolate); } - outItems->SetElem(curItem->mTrackIndex, item); + outItems->emplace(AZStd::next(begin(*outItems), curItem->mTrackIndex), item); } } // build the map - outMap->Resize(maxIndex + 1); + outMap->resize(maxIndex + 1); for (uint32 i = 0; i <= maxIndex; ++i) { - outMap->SetElem(i, i); + outMap->emplace(AZStd::next(begin(*outMap), i), i); } // sort if desired if (sort) { - outItems->Sort(); + AZStd::sort(begin(*outItems), end(*outItems)); for (uint32 i = 0; i <= maxIndex; ++i) { - outMap->SetElem(outItems->GetItem(i).mTrackIndex, i); + outMap->emplace(AZStd::next(begin(*outMap), outItems->at(i).mTrackIndex), i); } } } @@ -1539,7 +1538,7 @@ namespace EMotionFX const size_t maxNumTracks = static_cast(CalcMaxNodeHistoryTrackIndex()) + 1; trackFlags.resize(maxNumTracks); - const uint32 numNodeHistoryItems = actorInstanceData.mNodeHistoryItems.GetLength(); + const uint32 numNodeHistoryItems = actorInstanceData.mNodeHistoryItems.size(); for (uint32 i = 0; i < numNodeHistoryItems; ++i) { EMotionFX::Recorder::NodeHistoryItem* item = actorInstanceData.mNodeHistoryItems[i]; diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/Recorder.h b/Gems/EMotionFX/Code/EMotionFX/Source/Recorder.h index 3c9ec5ece8..02a61627a4 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/Recorder.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/Recorder.h @@ -15,7 +15,7 @@ #include "BaseObject.h" #include #include "MCore/Source/Color.h" -#include +#include #include #include #include @@ -201,43 +201,59 @@ namespace EMotionFX struct EMFX_API AnimGraphAnimFrame { - float mTimeValue; - uint32 mByteOffset; - uint32 mNumBytes; - MCore::Array mObjectInfos; - MCore::Array mParameterValues; - - AnimGraphAnimFrame() - { - mTimeValue = 0.0f; - mByteOffset = 0; - mNumBytes = 0; - } - - ~AnimGraphAnimFrame() - { - const uint32 numParams = mParameterValues.GetLength(); - for (uint32 i = 0; i < numParams; ++i) - { - delete mParameterValues[i]; - } - } + float mTimeValue = 0.0f; + uint32 mByteOffset = 0; + uint32 mNumBytes = 0; + AZStd::vector mObjectInfos{}; + AZStd::vector> mParameterValues{}; }; struct EMFX_API AnimGraphInstanceData { - AnimGraphInstance* mAnimGraphInstance; - uint32 mNumFrames; - uint32 mDataBufferSize; - uint8* mDataBuffer; - MCore::Array mFrames; + AnimGraphInstance* mAnimGraphInstance = nullptr; + uint32 mNumFrames = 0; + uint32 mDataBufferSize = 0; + uint8* mDataBuffer = nullptr; + AZStd::vector mFrames{}; - AnimGraphInstanceData() + AnimGraphInstanceData() = default; + AnimGraphInstanceData(const AnimGraphInstanceData&) = delete; + AnimGraphInstanceData(AnimGraphInstanceData&& rhs) { - mAnimGraphInstance = nullptr; - mNumFrames = 0; - mDataBufferSize = 0; - mDataBuffer = nullptr; + if (&rhs == this) + { + return; + } + mAnimGraphInstance = rhs.mAnimGraphInstance; + mNumFrames = rhs.mNumFrames; + mDataBufferSize = rhs.mDataBufferSize; + mDataBuffer = rhs.mDataBuffer; + mFrames = AZStd::move(rhs.mFrames); + rhs.mAnimGraphInstance = nullptr; + rhs.mNumFrames = 0; + rhs.mDataBufferSize = 0; + rhs.mDataBuffer = nullptr; + rhs.mFrames = {}; + } + + AnimGraphInstanceData& operator=(const AnimGraphInstanceData&) = delete; + AnimGraphInstanceData& operator=(AnimGraphInstanceData&& rhs) + { + if (&rhs == this) + { + return *this; + } + mAnimGraphInstance = rhs.mAnimGraphInstance; + mNumFrames = rhs.mNumFrames; + mDataBufferSize = rhs.mDataBufferSize; + mDataBuffer = rhs.mDataBuffer; + mFrames = AZStd::move(rhs.mFrames); + rhs.mAnimGraphInstance = nullptr; + rhs.mNumFrames = 0; + rhs.mDataBufferSize = 0; + rhs.mDataBuffer = nullptr; + rhs.mFrames = {}; + return *this; } ~AnimGraphInstanceData() @@ -254,19 +270,16 @@ namespace EMotionFX ActorInstance* mActorInstance; // the actor instance this data is about AnimGraphInstanceData* mAnimGraphData; // the anim graph instance data AZStd::vector m_transformTracks; // the transformation tracks, one for each node - MCore::Array mNodeHistoryItems; // node history items - MCore::Array mEventHistoryItems; // event history item + AZStd::vector mNodeHistoryItems; // node history items + AZStd::vector mEventHistoryItems; // event history item TransformTracks mActorLocalTransform; // the actor instance's local transformation - MCore::Array< KeyTrackLinearDynamic > mMorphTracks; // morph animation data + AZStd::vector< KeyTrackLinearDynamic > mMorphTracks; // morph animation data ActorInstanceData() { - mNodeHistoryItems.SetMemoryCategory(EMFX_MEMCATEGORY_RECORDER); - mEventHistoryItems.SetMemoryCategory(EMFX_MEMCATEGORY_RECORDER); - mMorphTracks.SetMemoryCategory(EMFX_MEMCATEGORY_RECORDER); - mNodeHistoryItems.Reserve(64); - mEventHistoryItems.Reserve(1024); - mMorphTracks.Reserve(32); + mNodeHistoryItems.reserve(64); + mEventHistoryItems.reserve(1024); + mMorphTracks.reserve(32); mAnimGraphData = nullptr; mActorInstance = nullptr; } @@ -274,20 +287,20 @@ namespace EMotionFX ~ActorInstanceData() { // clear the node history items - const uint32 numMotionItems = mNodeHistoryItems.GetLength(); + const uint32 numMotionItems = mNodeHistoryItems.size(); for (uint32 i = 0; i < numMotionItems; ++i) { delete mNodeHistoryItems[i]; } - mNodeHistoryItems.Clear(); + mNodeHistoryItems.clear(); // clear the event history items - const uint32 numEventItems = mEventHistoryItems.GetLength(); + const uint32 numEventItems = mEventHistoryItems.size(); for (uint32 i = 0; i < numEventItems; ++i) { delete mEventHistoryItems[i]; } - mEventHistoryItems.Clear(); + mEventHistoryItems.clear(); delete mAnimGraphData; } @@ -345,7 +358,7 @@ namespace EMotionFX AZ::u32 CalcMaxNumActiveMotions(const ActorInstanceData& actorInstanceData) const; AZ::u32 CalcMaxNumActiveMotions() const; - void ExtractNodeHistoryItems(const ActorInstanceData& actorInstanceData, float timeValue, bool sort, EValueType valueType, MCore::Array* outItems, MCore::Array* outMap); + void ExtractNodeHistoryItems(const ActorInstanceData& actorInstanceData, float timeValue, bool sort, EValueType valueType, AZStd::vector* outItems, AZStd::vector* outMap); void StartPlayBack(); void StopPlayBack(); @@ -360,7 +373,7 @@ namespace EMotionFX RecordSettings mRecordSettings; AZStd::vector m_actorInstanceDatas; AZStd::vector m_timeDeltas; // The value of the time deltas whenever a key is made - MCore::Array mObjects; + AZStd::vector mObjects; AZStd::vector mActiveNodes; /**< A temp array to store active animgraph nodes in. */ MCore::Mutex mLock; AZ::TypeId m_sessionUuid; @@ -396,6 +409,6 @@ namespace EMotionFX void FinalizeAllNodeHistoryItems(); EventHistoryItem* FindEventHistoryItem(const ActorInstanceData& actorInstanceData, const EventInfo& eventInfo, float recordTime); uint32 FindFreeEventHistoryItemTrack(const ActorInstanceData& actorInstanceData, EventHistoryItem* item) const; - uint32 FindAnimGraphDataFrameNumber(float timeValue) const; + size_t FindAnimGraphDataFrameNumber(float timeValue) const; }; } // namespace EMotionFX diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/RepositioningLayerPass.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/RepositioningLayerPass.cpp index afa3d8099d..68c2f2a5c3 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/RepositioningLayerPass.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/RepositioningLayerPass.cpp @@ -26,7 +26,6 @@ namespace EMotionFX RepositioningLayerPass::RepositioningLayerPass(MotionLayerSystem* motionLayerSystem) : LayerPass(motionLayerSystem) { - mHierarchyPath.SetMemoryCategory(EMFX_MEMCATEGORY_MOTIONS_MOTIONSYSTEMS); mLastReposNode = MCORE_INVALIDINDEX32; } diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/RepositioningLayerPass.h b/Gems/EMotionFX/Code/EMotionFX/Source/RepositioningLayerPass.h index a704f83e21..05f09d6329 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/RepositioningLayerPass.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/RepositioningLayerPass.h @@ -11,7 +11,7 @@ // include required headers #include "EMotionFXConfig.h" #include "LayerPass.h" -#include +#include namespace EMotionFX @@ -59,7 +59,7 @@ namespace EMotionFX private: - MCore::Array mHierarchyPath; /**< The path of node indices to the repositioning node. */ + AZStd::vector mHierarchyPath; /**< The path of node indices to the repositioning node. */ uint32 mLastReposNode; /**< The last repositioning node index that was used. When this changes, the hierarchy path has to be updated. */ /** diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/Skeleton.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/Skeleton.cpp index e1c6ca88f7..5860a0b452 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/Skeleton.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/Skeleton.cpp @@ -22,8 +22,6 @@ namespace EMotionFX // constructor Skeleton::Skeleton() { - m_nodes.SetMemoryCategory(EMFX_MEMCATEGORY_SKELETON); - m_rootNodes.SetMemoryCategory(EMFX_MEMCATEGORY_SKELETON); } @@ -46,7 +44,7 @@ namespace EMotionFX { Skeleton* result = Skeleton::Create(); - const uint32 numNodes = m_nodes.GetLength(); + const uint32 numNodes = m_nodes.size(); result->ReserveNodes(numNodes); result->m_rootNodes = m_rootNodes; @@ -65,14 +63,14 @@ namespace EMotionFX // reserve memory void Skeleton::ReserveNodes(uint32 numNodes) { - m_nodes.Reserve(numNodes); + m_nodes.reserve(numNodes); } // add a node void Skeleton::AddNode(Node* node) { - m_nodes.Add(node); + m_nodes.emplace_back(node); m_nodesMap[node->GetNameString()] = node; } @@ -86,7 +84,7 @@ namespace EMotionFX m_nodes[nodeIndex]->Destroy(); } - m_nodes.Remove(nodeIndex); + m_nodes.erase(AZStd::next(begin(m_nodes), nodeIndex)); } @@ -95,14 +93,14 @@ namespace EMotionFX { if (delFromMem) { - const uint32 numNodes = m_nodes.GetLength(); + const uint32 numNodes = m_nodes.size(); for (uint32 i = 0; i < numNodes; ++i) { m_nodes[i]->Destroy(); } } - m_nodes.Clear(); + m_nodes.clear(); m_nodesMap.clear(); m_bindPose.Clear(); } @@ -134,7 +132,7 @@ namespace EMotionFX Node* Skeleton::FindNodeByNameNoCase(const char* name) const { // check the names for all nodes - const uint32 numNodes = m_nodes.GetLength(); + const uint32 numNodes = m_nodes.size(); for (uint32 i = 0; i < numNodes; ++i) { if (AzFramework::StringFunc::Equal(m_nodes[i]->GetNameString().c_str(), name, false /* no case */)) @@ -151,7 +149,7 @@ namespace EMotionFX Node* Skeleton::FindNodeByID(uint32 id) const { // check the ID's for all nodes - const uint32 numNodes = m_nodes.GetLength(); + const uint32 numNodes = m_nodes.size(); for (uint32 i = 0; i < numNodes; ++i) { if (m_nodes[i]->GetID() == id) @@ -180,8 +178,8 @@ namespace EMotionFX // set the number of nodes void Skeleton::SetNumNodes(uint32 numNodes) { - uint32 oldLength = m_nodes.GetLength(); - m_nodes.Resize(numNodes); + uint32 oldLength = m_nodes.size(); + m_nodes.resize(numNodes); for (uint32 i = oldLength; i < numNodes; ++i) { m_nodes[i] = nullptr; @@ -193,7 +191,7 @@ namespace EMotionFX // update the node indices void Skeleton::UpdateNodeIndexValues(uint32 startNode) { - const uint32 numNodes = m_nodes.GetLength(); + const uint32 numNodes = m_nodes.size(); for (uint32 i = startNode; i < numNodes; ++i) { m_nodes[i]->SetNodeIndex(i); @@ -204,35 +202,35 @@ namespace EMotionFX // reserve memory for the root nodes array void Skeleton::ReserveRootNodes(uint32 numNodes) { - m_rootNodes.Reserve(numNodes); + m_rootNodes.reserve(numNodes); } // add a root node void Skeleton::AddRootNode(uint32 nodeIndex) { - m_rootNodes.Add(nodeIndex); + m_rootNodes.emplace_back(nodeIndex); } // remove a given root node void Skeleton::RemoveRootNode(uint32 nr) { - m_rootNodes.Remove(nr); + m_rootNodes.erase(AZStd::next(begin(m_rootNodes), nr)); } // remove all root nodes void Skeleton::RemoveAllRootNodes() { - m_rootNodes.Clear(); + m_rootNodes.clear(); } // log all node names void Skeleton::LogNodes() { - const uint32 numNodes = m_nodes.GetLength(); + const uint32 numNodes = m_nodes.size(); for (uint32 i = 0; i < numNodes; ++i) { MCore::LogInfo("%d = '%s'", i, m_nodes[i]->GetName()); diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/Skeleton.h b/Gems/EMotionFX/Code/EMotionFX/Source/Skeleton.h index 1b9c09749c..e5887df0f6 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/Skeleton.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/Skeleton.h @@ -12,7 +12,7 @@ #include "EMotionFXConfig.h" #include "BaseObject.h" #include "Pose.h" -#include +#include namespace EMotionFX @@ -32,7 +32,7 @@ namespace EMotionFX Skeleton* Clone(); - MCORE_INLINE uint32 GetNumNodes() const { return m_nodes.GetLength(); } + MCORE_INLINE size_t GetNumNodes() const { return m_nodes.size(); } MCORE_INLINE Node* GetNode(uint32 index) const { return m_nodes[index]; } void ReserveNodes(uint32 numNodes); @@ -103,7 +103,7 @@ namespace EMotionFX * Get the number of root nodes in the actor. A root node is a node without any parent. * @result The number of root nodes inside the actor. */ - MCORE_INLINE uint32 GetNumRootNodes() const { return m_rootNodes.GetLength(); } + MCORE_INLINE size_t GetNumRootNodes() const { return m_rootNodes.size(); } /** * Get the node number/index of a given root node. @@ -144,9 +144,9 @@ namespace EMotionFX uint32 CalcHierarchyDepthForNode(uint32 nodeIndex) const; private: - MCore::Array m_nodes; /**< The nodes, including root nodes. */ + AZStd::vector m_nodes; /**< The nodes, including root nodes. */ mutable AZStd::unordered_map m_nodesMap; - MCore::Array m_rootNodes; /**< The root nodes only. */ + AZStd::vector m_rootNodes; /**< The root nodes only. */ Pose m_bindPose; /**< The bind pose. */ Skeleton(); diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/StandardMaterial.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/StandardMaterial.cpp index 8147116048..98a192936e 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/StandardMaterial.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/StandardMaterial.cpp @@ -356,8 +356,6 @@ namespace EMotionFX mIOR = 1.5f; mDoubleSided = true; mWireFrame = false; - - mLayers.SetMemoryCategory(EMFX_MEMCATEGORY_GEOMETRY_MATERIALS); } @@ -398,8 +396,8 @@ namespace EMotionFX standardMaterial->mWireFrame = mWireFrame; // copy the layers - const uint32 numLayers = mLayers.GetLength(); - standardMaterial->mLayers.Resize(numLayers); + const uint32 numLayers = mLayers.size(); + standardMaterial->mLayers.resize(numLayers); for (uint32 i = 0; i < numLayers; ++i) { standardMaterial->mLayers[i] = StandardMaterialLayer::Create(); @@ -420,7 +418,10 @@ namespace EMotionFX { layer->Destroy(); } - mLayers.RemoveByValue(layer); + if (const auto it = AZStd::find(begin(mLayers), end(mLayers), layer); it != end(mLayers)) + { + mLayers.erase(it); + } } } @@ -547,52 +548,52 @@ namespace EMotionFX StandardMaterialLayer* StandardMaterial::AddLayer(StandardMaterialLayer* layer) { - mLayers.Add(layer); + mLayers.emplace_back(layer); return layer; } - uint32 StandardMaterial::GetNumLayers() const + size_t StandardMaterial::GetNumLayers() const { - return mLayers.GetLength(); + return mLayers.size(); } StandardMaterialLayer* StandardMaterial::GetLayer(uint32 nr) { - MCORE_ASSERT(nr < mLayers.GetLength()); + MCORE_ASSERT(nr < mLayers.size()); return mLayers[nr]; } void StandardMaterial::RemoveLayer(uint32 nr, bool delFromMem) { - MCORE_ASSERT(nr < mLayers.GetLength()); + MCORE_ASSERT(nr < mLayers.size()); if (delFromMem) { mLayers[nr]->Destroy(); } - mLayers.Remove(nr); + mLayers.erase(AZStd::next(begin(mLayers), nr)); } void StandardMaterial::RemoveAllLayers() { - const uint32 numLayers = mLayers.GetLength(); + const uint32 numLayers = mLayers.size(); for (uint32 i = 0; i < numLayers; ++i) { mLayers[i]->Destroy(); } - mLayers.Clear(); + mLayers.clear(); } uint32 StandardMaterial::FindLayer(uint32 layerType) const { // search through all layers - const uint32 numLayers = mLayers.GetLength(); + const uint32 numLayers = mLayers.size(); for (uint32 i = 0; i < numLayers; ++i) { if (mLayers[i]->GetType() == layerType) @@ -607,6 +608,6 @@ namespace EMotionFX void StandardMaterial::ReserveLayers(uint32 numLayers) { - mLayers.Reserve(numLayers); + mLayers.reserve(numLayers); } } // namespace EMotionFX diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/StandardMaterial.h b/Gems/EMotionFX/Code/EMotionFX/Source/StandardMaterial.h index 659157d96d..de637cf3df 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/StandardMaterial.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/StandardMaterial.h @@ -415,7 +415,7 @@ namespace EMotionFX * Get the number of texture layers in this material. * @result The number of layers. */ - uint32 GetNumLayers() const; + size_t GetNumLayers() const; /** * Get a specific layer. @@ -471,7 +471,7 @@ namespace EMotionFX protected: - MCore::Array< StandardMaterialLayer* > mLayers; /**< StandardMaterial layers. */ + AZStd::vector< StandardMaterialLayer* > mLayers; /**< StandardMaterial layers. */ MCore::RGBAColor mAmbient; /**< Ambient color. */ MCore::RGBAColor mDiffuse; /**< Diffuse color. */ MCore::RGBAColor mSpecular; /**< Specular color. */ diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/SubMesh.cpp b/Gems/EMotionFX/Code/EMotionFX/Source/SubMesh.cpp index df7a38486a..fa60ed4033 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/SubMesh.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Source/SubMesh.cpp @@ -30,7 +30,6 @@ namespace EMotionFX mStartPolygon = startPolygon; mMaterial = materialIndex; - mBones.SetMemoryCategory(EMFX_MEMCATEGORY_GEOMETRY_MESHES); SetNumBones(numBones); } @@ -51,7 +50,7 @@ namespace EMotionFX // clone the submesh SubMesh* SubMesh::Clone(Mesh* newParentMesh) { - SubMesh* clone = aznew SubMesh(newParentMesh, mStartVertex, mStartIndex, mStartPolygon, mNumVertices, mNumIndices, mNumPolygons, mMaterial, mBones.GetLength()); + SubMesh* clone = aznew SubMesh(newParentMesh, mStartVertex, mStartIndex, mStartPolygon, mNumVertices, mNumIndices, mNumPolygons, mMaterial, mBones.size()); clone->mBones = mBones; return clone; } @@ -61,7 +60,7 @@ namespace EMotionFX void SubMesh::RemapBone(uint16 oldNodeNr, uint16 newNodeNr) { // get the number of bones stored inside the submesh - const uint32 numBones = mBones.GetLength(); + const uint32 numBones = mBones.size(); // iterate through all bones and remap the bones for (uint32 i = 0; i < numBones; ++i) @@ -79,7 +78,7 @@ namespace EMotionFX void SubMesh::ReinitBonesArray(SkinningInfoVertexAttributeLayer* skinLayer) { // clear the bones array - mBones.Clear(false); + mBones.clear(); // get shortcuts to the original vertex numbers const uint32* orgVertices = (uint32*)mParentMesh->FindOriginalVertexData(Mesh::ATTRIB_ORGVTXNUMBERS); @@ -101,9 +100,9 @@ namespace EMotionFX const uint32 nodeNr = influence->GetNodeNr(); // put the node index in the bones array in case it isn't in already - if (mBones.Contains(nodeNr) == false) + if (AZStd::find(begin(mBones), end(mBones), nodeNr) == end(mBones)) { - mBones.Add(nodeNr); + mBones.emplace_back(nodeNr); } } } @@ -231,7 +230,7 @@ namespace EMotionFX uint32 SubMesh::FindBoneIndex(uint32 nodeNr) const { - const uint32 numBones = mBones.GetLength(); + const uint32 numBones = mBones.size(); for (uint32 i = 0; i < numBones; ++i) { if (mBones[i] == nodeNr) @@ -247,7 +246,7 @@ namespace EMotionFX // remove the given bone void SubMesh::RemoveBone(uint16 index) { - mBones.Remove(index); + mBones.erase(AZStd::next(begin(mBones), index)); } @@ -255,11 +254,11 @@ namespace EMotionFX { if (numBones == 0) { - mBones.Clear(); + mBones.clear(); } else { - mBones.Resize(numBones); + mBones.resize(numBones); } } diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/SubMesh.h b/Gems/EMotionFX/Code/EMotionFX/Source/SubMesh.h index df798536da..1cec56efc6 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/SubMesh.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/SubMesh.h @@ -11,7 +11,7 @@ // include the required headers #include "EMotionFXConfig.h" #include "BaseObject.h" -#include +#include namespace EMotionFX @@ -191,7 +191,7 @@ namespace EMotionFX * Get the number of bones used by this submesh. * @result The number of bones used by this submesh. */ - MCORE_INLINE uint32 GetNumBones() const { return mBones.GetLength(); } + MCORE_INLINE size_t GetNumBones() const { return mBones.size(); } /** * Get the node index for a given bone. @@ -205,21 +205,21 @@ namespace EMotionFX * Each integer in the array represents the node number that acts as bone on this submesh. * @result A pointer to the array of bones used by this submesh. */ - MCORE_INLINE uint32* GetBones() { return mBones.GetPtr(); } + MCORE_INLINE uint32* GetBones() { return mBones.data(); } /** * Get direct access to the bones array. * Each integer in the array represents the node number that acts as bone on this submesh. * @result A read only reference to the array of bones used by this submesh. */ - MCORE_INLINE const MCore::Array& GetBonesArray() const { return mBones; } + MCORE_INLINE const AZStd::vector& GetBonesArray() const { return mBones; } /** * Get direct access to the bones array. * Each integer in the array represents the node number that acts as bone on this submesh. * @result A reference to the array of bones used by this submesh. */ - MCORE_INLINE MCore::Array& GetBonesArray() { return mBones; } + MCORE_INLINE AZStd::vector& GetBonesArray() { return mBones; } /** * Reinitialize the bones. @@ -268,7 +268,7 @@ namespace EMotionFX protected: - MCore::Array mBones; /**< The collection of bones. These are stored as node numbers that point into the actor. */ + AZStd::vector mBones; /**< The collection of bones. These are stored as node numbers that point into the actor. */ uint32 mStartVertex; /**< The start vertex number in the vertex data arrays of the parent mesh. */ uint32 mStartIndex; /**< The start index number in the index array of the parent mesh. */ uint32 mStartPolygon; /**< The start polygon number in the polygon vertex count array of the parent mesh. */ diff --git a/Gems/EMotionFX/Code/EMotionFX/Source/ThreadData.h b/Gems/EMotionFX/Code/EMotionFX/Source/ThreadData.h index 1cee75200c..cf66a1543e 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Source/ThreadData.h +++ b/Gems/EMotionFX/Code/EMotionFX/Source/ThreadData.h @@ -13,7 +13,7 @@ #include "BaseObject.h" #include "AnimGraphPosePool.h" #include "AnimGraphRefCountedDataPool.h" -#include +#include namespace EMotionFX diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.cpp index 93073891de..c0867139e7 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.cpp @@ -432,7 +432,7 @@ namespace EMStudio } // add and return the manipulator - mTransformationManipulators.Add(manipulator); + mTransformationManipulators.emplace_back(manipulator); return manipulator; } @@ -440,12 +440,15 @@ namespace EMStudio // remove the given gizmo from the array void EMStudioManager::RemoveTransformationManipulator(MCommon::TransformationManipulator* manipulator) { - mTransformationManipulators.RemoveByValue(manipulator); + if (const auto it = AZStd::find(begin(mTransformationManipulators), end(mTransformationManipulators), manipulator); it != end(mTransformationManipulators)) + { + mTransformationManipulators.erase(it); + } } // returns the gizmo array - MCore::Array* EMStudioManager::GetTransformationManipulators() + AZStd::vector* EMStudioManager::GetTransformationManipulators() { return &mTransformationManipulators; } diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.h index c485d15b01..62c4b5e115 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/EMStudioManager.h @@ -104,7 +104,7 @@ namespace EMStudio // functions for adding/removing gizmos MCommon::TransformationManipulator* AddTransformationManipulator(MCommon::TransformationManipulator* manipulator); void RemoveTransformationManipulator(MCommon::TransformationManipulator* manipulator); - MCore::Array* GetTransformationManipulators(); + AZStd::vector* GetTransformationManipulators(); void ClearScene(); // remove animgraphs, animgraph instances and actors @@ -115,7 +115,7 @@ namespace EMStudio MCORE_INLINE bool GetSkipSourceControlCommands() { return m_skipSourceControlCommands; } MCORE_INLINE void SetSkipSourceControlCommands(bool skip) { m_skipSourceControlCommands = skip; } private: - MCore::Array mTransformationManipulators; + AZStd::vector mTransformationManipulators; QPointer mMainWindow; QApplication* mApp; PluginManager* mPluginManager; diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/FileManager.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/FileManager.h index e27a9c23b5..baf721d2ce 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/FileManager.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/FileManager.h @@ -21,7 +21,7 @@ #include #include "EMStudioConfig.h" #include -#include +#include #include #include #include diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.cpp index b3e47725c7..c1c48b3480 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.cpp @@ -6,6 +6,7 @@ * */ +#include #include #include #include @@ -1089,14 +1090,14 @@ namespace EMStudio const uint32 numPlugins = pluginManager->GetNumPlugins(); // add each plugin name in an array to sort them - MCore::Array sortedPlugins; - sortedPlugins.Reserve(numPlugins); + AZStd::vector sortedPlugins; + sortedPlugins.reserve(numPlugins); for (uint32 p = 0; p < numPlugins; ++p) { EMStudioPlugin* plugin = pluginManager->GetPlugin(p); - sortedPlugins.Add(plugin->GetName()); + sortedPlugins.emplace_back(plugin->GetName()); } - sortedPlugins.Sort(); + AZStd::sort(begin(sortedPlugins), end(sortedPlugins)); // clear the window menu mCreateWindowMenu->clear(); @@ -1839,7 +1840,7 @@ namespace EMStudio dir.setSorting(QDir::Name); // add each layout - mLayoutNames.Clear(); + mLayoutNames.clear(); AZStd::string filename; const QFileInfoList list = dir.entryInfoList(); const int listSize = list.size(); @@ -1856,12 +1857,12 @@ namespace EMStudio if (extension == "layout") { AzFramework::StringFunc::Path::GetFileName(filename.c_str(), filename); - mLayoutNames.Add(filename); + mLayoutNames.emplace_back(filename); } } // add each menu - const uint32 numLayoutNames = mLayoutNames.GetLength(); + const uint32 numLayoutNames = mLayoutNames.size(); for (uint32 i = 0; i < numLayoutNames; ++i) { QAction* action = mLayoutsMenu->addAction(mLayoutNames[i].c_str()); diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.h index a8909380ef..7217259bcb 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/MainWindow.h @@ -12,7 +12,7 @@ #include #include #include -#include +#include #include #include #include @@ -148,7 +148,7 @@ namespace EMStudio FileManager* GetFileManager() const { return mFileManager; } PreferencesWindow* GetPreferencesWindow() const { return mPreferencesWindow; } - uint32 GetNumLayouts() const { return mLayoutNames.GetLength(); } + size_t GetNumLayouts() const { return mLayoutNames.size(); } const char* GetLayoutName(uint32 index) const { return mLayoutNames[index].c_str(); } const char* GetCurrentLayoutName() const; @@ -195,7 +195,7 @@ namespace EMStudio MysticQt::KeyboardShortcutManager* mShortcutManager; // layouts (application modes) - MCore::Array mLayoutNames; + AZStd::vector mLayoutNames; bool mLayoutLoaded; // menu actions diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NodeHierarchyWidget.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NodeHierarchyWidget.cpp index 6d0355ead0..4aaebc3e3e 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NodeHierarchyWidget.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NodeHierarchyWidget.cpp @@ -51,8 +51,6 @@ namespace EMStudio mMeshIcon = new QIcon(meshIconFilename); mCharacterIcon = new QIcon(iconFilename("Character.svg")); - mActorInstanceIDs.SetMemoryCategory(MEMCATEGORY_EMSTUDIOSDK); - QVBoxLayout* layout = new QVBoxLayout(); layout->setMargin(0); @@ -142,7 +140,7 @@ namespace EMStudio } - void NodeHierarchyWidget::Update(const MCore::Array& actorInstanceIDs, CommandSystem::SelectionList* selectionList) + void NodeHierarchyWidget::Update(const AZStd::vector& actorInstanceIDs, CommandSystem::SelectionList* selectionList) { mActorInstanceIDs = actorInstanceIDs; ConvertFromSelectionList(selectionList); @@ -153,7 +151,7 @@ namespace EMStudio void NodeHierarchyWidget::Update(uint32 actorInstanceID, CommandSystem::SelectionList* selectionList) { - mActorInstanceIDs.Clear(); + mActorInstanceIDs.clear(); if (actorInstanceID == MCORE_INVALIDINDEX32) { @@ -169,12 +167,12 @@ namespace EMStudio continue; } - mActorInstanceIDs.Add(actorInstance->GetID()); + mActorInstanceIDs.emplace_back(actorInstance->GetID()); } } else { - mActorInstanceIDs.Add(actorInstanceID); + mActorInstanceIDs.emplace_back(actorInstanceID); } Update(mActorInstanceIDs, selectionList); @@ -189,7 +187,7 @@ namespace EMStudio mHierarchy->clear(); // get the number actor instances and iterate over them - const uint32 numActorInstances = mActorInstanceIDs.GetLength(); + const uint32 numActorInstances = mActorInstanceIDs.size(); for (uint32 i = 0; i < numActorInstances; ++i) { // get the actor instance by its id @@ -267,7 +265,7 @@ namespace EMStudio AZStd::to_lower(nodeName.begin(), nodeName.end()); EMotionFX::Mesh* mesh = actorInstance->GetActor()->GetMesh(actorInstance->GetLODLevel(), nodeIndex); const bool isMeshNode = (mesh); - const bool isBone = (mBoneList.Find(nodeIndex) != MCORE_INVALIDINDEX32); + const bool isBone = (AZStd::find(begin(mBoneList), end(mBoneList), nodeIndex) != end(mBoneList)); const bool isNode = (isMeshNode == false && isBone == false); return CheckIfNodeVisible(nodeName, isMeshNode, isBone, isNode); @@ -296,7 +294,7 @@ namespace EMStudio const uint32 numChildren = node->GetNumChildNodes(); EMotionFX::Mesh* mesh = actor->GetMesh(actorInstance->GetLODLevel(), nodeIndex); const bool isMeshNode = (mesh); - const bool isBone = (mBoneList.Find(nodeIndex) != MCORE_INVALIDINDEX32); + const bool isBone = (AZStd::find(begin(mBoneList), end(mBoneList), nodeIndex) != end(mBoneList)); const bool isNode = (isMeshNode == false && isBone == false); if (CheckIfNodeVisible(nodeName, isMeshNode, isBone, isNode)) @@ -563,7 +561,6 @@ namespace EMStudio UpdateSelection(); emit OnDoubleClicked(m_selectedNodes); - emit OnDoubleClicked(GetSelectedItemsAsMCoreArray()); } @@ -634,7 +631,6 @@ namespace EMStudio void NodeHierarchyWidget::FireSelectionDoneSignal() { emit OnSelectionDone(m_selectedNodes); - emit OnSelectionDone(GetSelectedItemsAsMCoreArray()); } @@ -645,23 +641,6 @@ namespace EMStudio } - MCore::Array NodeHierarchyWidget::GetSelectedItemsAsMCoreArray() - { - AZStd::vector& selectedItems = GetSelectedItems(); - MCore::Array result; - - const AZ::u32 numSelectedItems = static_cast(selectedItems.size()); - result.Resize(numSelectedItems); - - for (AZ::u32 i = 0; i < numSelectedItems; ++i) - { - result[i] = selectedItems[i]; - } - - return result; - } - - // check if the node with the given name is selected in the window bool NodeHierarchyWidget::CheckIfNodeSelected(const char* nodeName, uint32 actorInstanceID) { @@ -706,7 +685,7 @@ namespace EMStudio m_selectedNodes.clear(); // get the number actor instances and iterate over them - const uint32 numActorInstances = mActorInstanceIDs.GetLength(); + const uint32 numActorInstances = mActorInstanceIDs.size(); for (uint32 i = 0; i < numActorInstances; ++i) { // add the actor to the node hierarchy widget diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NodeHierarchyWidget.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NodeHierarchyWidget.h index 3f0ca1a639..b55062f57b 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NodeHierarchyWidget.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NodeHierarchyWidget.h @@ -68,7 +68,7 @@ namespace EMStudio void SetSelectionMode(bool useSingleSelection); void Update(uint32 actorInstanceID, CommandSystem::SelectionList* selectionList = nullptr); - void Update(const MCore::Array& actorInstanceIDs, CommandSystem::SelectionList* selectionList = nullptr); + void Update(const AZStd::vector& actorInstanceIDs, CommandSystem::SelectionList* selectionList = nullptr); void FireSelectionDoneSignal(); MCORE_INLINE QTreeWidget* GetTreeWidget() { return mHierarchy; } MCORE_INLINE AzQtComponents::FilteredSearchWidget* GetSearchWidget() { return m_searchWidget; } @@ -78,7 +78,6 @@ namespace EMStudio bool CheckIfNodeVisible(const AZStd::string& nodeName, bool isMeshNode, bool isBone, bool isNode); // this calls UpdateSelection() and then returns the member array containing the selected items - MCore::Array GetSelectedItemsAsMCoreArray(); AZStd::vector& GetSelectedItems(); const AZStd::string& GetSearchWidgetText() const { return m_searchWidgetText; } @@ -98,10 +97,6 @@ namespace EMStudio Q_DECLARE_FLAGS(FilterTypes, FilterType) signals: - // Deprecated - void OnSelectionDone(MCore::Array selectedNodes); - void OnDoubleClicked(MCore::Array selectedNodes); - void OnSelectionDone(AZStd::vector selectedNodes); void OnDoubleClicked(AZStd::vector selectedNodes); @@ -138,8 +133,8 @@ namespace EMStudio QIcon* mNodeIcon; QIcon* mMeshIcon; QIcon* mCharacterIcon; - MCore::Array mBoneList; - MCore::Array mActorInstanceIDs; + AZStd::vector mBoneList; + AZStd::vector mActorInstanceIDs; AZStd::string mItemName; AZStd::string mActorInstanceIDString; bool mUseSingleSelection; diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NodeSelectionWindow.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NodeSelectionWindow.cpp index 4033ae55a8..e0d562ee0f 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NodeSelectionWindow.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NodeSelectionWindow.cpp @@ -49,7 +49,7 @@ namespace EMStudio connect(mOKButton, &QPushButton::clicked, this, &NodeSelectionWindow::accept); connect(mCancelButton, &QPushButton::clicked, this, &NodeSelectionWindow::reject); connect(this, &NodeSelectionWindow::accepted, this, &NodeSelectionWindow::OnAccept); - connect(mHierarchyWidget, static_cast)>(&NodeHierarchyWidget::OnDoubleClicked), this, &NodeSelectionWindow::OnDoubleClicked); + connect(mHierarchyWidget, static_cast)>(&NodeHierarchyWidget::OnDoubleClicked), this, &NodeSelectionWindow::OnDoubleClicked); // connect the window activation signal to refresh if reactivated //connect( this, SIGNAL(visibilityChanged(bool)), this, SLOT(OnVisibilityChanged(bool)) ); @@ -63,7 +63,7 @@ namespace EMStudio } - void NodeSelectionWindow::OnDoubleClicked(MCore::Array selection) + void NodeSelectionWindow::OnDoubleClicked(AZStd::vector selection) { MCORE_UNUSED(selection); accept(); diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NodeSelectionWindow.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NodeSelectionWindow.h index af106c50ce..46eabf7b58 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NodeSelectionWindow.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NodeSelectionWindow.h @@ -30,7 +30,7 @@ namespace EMStudio * Example: * connect( mNodeSelectionWindow, SIGNAL(rejected()), this, SLOT(UserWantsToCancel_1()) ); * connect( mNodeSelectionWindow->GetNodeHierarchyWidget()->GetTreeWidget(), SIGNAL(itemSelectionChanged()), this, SLOT(SelectionChanged_2()) ); - * connect( mNodeSelectionWindow->GetNodeHierarchyWidget(), SIGNAL(OnSelectionDone(MCore::Array)), this, SLOT(FinishedSelectionAndPressedOK_3(MCore::Array)) ); + * connect( mNodeSelectionWindow->GetNodeHierarchyWidget(), SIGNAL(OnSelectionDone(AZStd::vector)), this, SLOT(FinishedSelectionAndPressedOK_3(AZStd::vector)) ); */ class EMSTUDIO_API NodeSelectionWindow : public QDialog @@ -43,11 +43,11 @@ namespace EMStudio MCORE_INLINE NodeHierarchyWidget* GetNodeHierarchyWidget() { return mHierarchyWidget; } void Update(uint32 actorInstanceID, CommandSystem::SelectionList* selectionList = nullptr) { mHierarchyWidget->Update(actorInstanceID, selectionList); } - void Update(const MCore::Array& actorInstanceIDs, CommandSystem::SelectionList* selectionList = nullptr) { mHierarchyWidget->Update(actorInstanceIDs, selectionList); } + void Update(const AZStd::vector& actorInstanceIDs, CommandSystem::SelectionList* selectionList = nullptr) { mHierarchyWidget->Update(actorInstanceIDs, selectionList); } public slots: void OnAccept(); - void OnDoubleClicked(MCore::Array selection); + void OnDoubleClicked(AZStd::vector selection); private: NodeHierarchyWidget* mHierarchyWidget; diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NotificationWindowManager.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NotificationWindowManager.cpp index a42bc1d54b..9eb2c7f23e 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NotificationWindowManager.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NotificationWindowManager.cpp @@ -33,7 +33,7 @@ namespace EMStudio // compute the height of all notification windows with the spacing int allNotificationWindowsHeight = 0; - const uint32 numNotificationWindows = mNotificationWindows.GetLength(); + const uint32 numNotificationWindows = mNotificationWindows.size(); for (uint32 i = 0; i < numNotificationWindows; ++i) { allNotificationWindowsHeight += mNotificationWindows[i]->geometry().height() + notificationWindowSpacing; @@ -45,7 +45,7 @@ namespace EMStudio notificationWindow->move(mainWindowBottomRight.x() - notificationWindowGeometry.width() - notificationWindowMainWindowPadding, mainWindowBottomRight.y() - allNotificationWindowsHeight - notificationWindowGeometry.height() - notificationWindowMainWindowPadding); // add the notification window in the array - mNotificationWindows.Add(notificationWindow); + mNotificationWindows.emplace_back(notificationWindow); } @@ -53,25 +53,24 @@ namespace EMStudio void NotificationWindowManager::RemoveNotificationWindow(NotificationWindow* notificationWindow) { // find the notification window - const uint32 index = mNotificationWindows.Find(notificationWindow); + auto windowIt = AZStd::find(begin(mNotificationWindows), end(mNotificationWindows), notificationWindow); // if not found, stop here - if (index == MCORE_INVALIDINDEX32) + if (windowIt == end(mNotificationWindows)) { return; } // move down each notification window after this one, spacing is added on the height const int notificationWindowHeight = notificationWindow->geometry().height() + notificationWindowSpacing; - const uint32 numNotificationWindows = mNotificationWindows.GetLength(); - for (uint32 i = index + 1; i < numNotificationWindows; ++i) + for (auto it = windowIt + 1; it != end(mNotificationWindows); ++it) { - const QPoint pos = mNotificationWindows[i]->pos(); - mNotificationWindows[i]->move(pos.x(), pos.y() + notificationWindowHeight); + const QPoint pos = (*it)->pos(); + (*it)->move(pos.x(), pos.y() + notificationWindowHeight); } // remove the notification window - mNotificationWindows.Remove(index); + mNotificationWindows.erase(windowIt); } @@ -83,7 +82,7 @@ namespace EMStudio // move each notification window int currentNotificationWindowHeight = notificationWindowMainWindowPadding; - const uint32 numNotificationWindows = mNotificationWindows.GetLength(); + const uint32 numNotificationWindows = mNotificationWindows.size(); for (uint32 i = 0; i < numNotificationWindows; ++i) { // add the height of the notification window diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NotificationWindowManager.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NotificationWindowManager.h index f71f60fde6..8817f3d451 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NotificationWindowManager.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/NotificationWindowManager.h @@ -11,7 +11,7 @@ #if !defined(Q_MOC_RUN) #include "EMStudioConfig.h" #include "NotificationWindow.h" -#include +#include #endif @@ -35,9 +35,9 @@ namespace EMStudio return mNotificationWindows[index]; } - MCORE_INLINE uint32 GetNumNotificationWindow() const + MCORE_INLINE size_t GetNumNotificationWindow() const { - return mNotificationWindows.GetLength(); + return mNotificationWindows.size(); } void OnMovedOrResized(); @@ -53,7 +53,7 @@ namespace EMStudio } private: - MCore::Array mNotificationWindows; + AZStd::vector mNotificationWindows; int32 mVisibleTime; }; } // namespace EMStudio diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderPlugin.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderPlugin.cpp index ef281b8301..abbb9b7d81 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderPlugin.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderPlugin.cpp @@ -27,8 +27,6 @@ namespace EMStudio RenderPlugin::RenderPlugin() : DockWidgetPlugin() { - mActors.SetMemoryCategory(MEMCATEGORY_EMSTUDIOSDK_RENDERPLUGINBASE); - mIsVisible = true; mRenderUtil = nullptr; mUpdateCallback = nullptr; @@ -130,7 +128,7 @@ namespace EMStudio void RenderPlugin::CleanEMStudioActors() { // get rid of the actors - const uint32 numActors = mActors.GetLength(); + const uint32 numActors = mActors.size(); for (uint32 i = 0; i < numActors; ++i) { if (mActors[i]) @@ -138,7 +136,7 @@ namespace EMStudio delete mActors[i]; } } - mActors.Clear(); + mActors.clear(); } @@ -159,7 +157,7 @@ namespace EMStudio // get rid of the emstudio actor delete emstudioActor; - mActors.Remove(index); + mActors.erase(AZStd::next(begin(mActors), index)); return true; } @@ -168,8 +166,8 @@ namespace EMStudio MCommon::TransformationManipulator* RenderPlugin::GetActiveManipulator(MCommon::Camera* camera, int32 mousePosX, int32 mousePosY) { // get the current manipulator - MCore::Array* transformationManipulators = GetManager()->GetTransformationManipulators(); - const uint32 numGizmos = transformationManipulators->GetLength(); + AZStd::vector* transformationManipulators = GetManager()->GetTransformationManipulators(); + const uint32 numGizmos = transformationManipulators->size(); // init the active manipulator to nullptr MCommon::TransformationManipulator* activeManipulator = nullptr; @@ -180,7 +178,7 @@ namespace EMStudio for (uint32 i = 0; i < numGizmos; ++i) { // get the current manipulator and check if it exists - MCommon::TransformationManipulator* currentManipulator = transformationManipulators->GetItem(i); + MCommon::TransformationManipulator* currentManipulator = transformationManipulators->at(i); if (currentManipulator == nullptr || currentManipulator->GetIsVisible() == false) { continue; @@ -319,7 +317,7 @@ namespace EMStudio RenderPlugin::EMStudioRenderActor* RenderPlugin::FindEMStudioActor(EMotionFX::ActorInstance* actorInstance, bool doubleCheckInstance) { // get the number of emstudio actors and iterate through them - const uint32 numEMStudioRenderActors = mActors.GetLength(); + const uint32 numEMStudioRenderActors = mActors.size(); for (uint32 i = 0; i < numEMStudioRenderActors; ++i) { EMStudioRenderActor* EMStudioRenderActor = mActors[i]; @@ -331,7 +329,7 @@ namespace EMStudio if (doubleCheckInstance) { // now double check if the actor instance really is in the array of instances of this emstudio actor - const uint32 numActorInstances = EMStudioRenderActor->mActorInstances.GetLength(); + const uint32 numActorInstances = EMStudioRenderActor->mActorInstances.size(); for (uint32 a = 0; a < numActorInstances; ++a) { if (EMStudioRenderActor->mActorInstances[a] == actorInstance) @@ -359,7 +357,7 @@ namespace EMStudio return nullptr; } - const uint32 numEMStudioRenderActors = mActors.GetLength(); + const uint32 numEMStudioRenderActors = mActors.size(); for (uint32 i = 0; i < numEMStudioRenderActors; ++i) { EMStudioRenderActor* EMStudioRenderActor = mActors[i]; @@ -378,7 +376,7 @@ namespace EMStudio uint32 RenderPlugin::FindEMStudioActorIndex(EMStudioRenderActor* EMStudioRenderActor) { // get the number of emstudio actors and iterate through them - const uint32 numEMStudioRenderActors = mActors.GetLength(); + const uint32 numEMStudioRenderActors = mActors.size(); for (uint32 i = 0; i < numEMStudioRenderActors; ++i) { // compare the two emstudio actors and return the current index in case of success @@ -407,7 +405,7 @@ namespace EMStudio void RenderPlugin::AddEMStudioActor(EMStudioRenderActor* emstudioActor) { // add the actor to the list and return success - mActors.Add(emstudioActor); + mActors.emplace_back(emstudioActor); } @@ -440,8 +438,7 @@ namespace EMStudio } } - // 2. Remove invalid, not ready or unused emstudio actors - for (uint32 i = 0; i < mActors.GetLength(); ++i) + for (uint32 i = 0; i < mActors.size(); ++i) { EMStudioRenderActor* emstudioActor = mActors[i]; EMotionFX::Actor* actor = emstudioActor->mActor; @@ -479,7 +476,7 @@ namespace EMStudio if (!emstudioActor) { - for (uint32 j = 0; j < mActors.GetLength(); ++j) + for (uint32 j = 0; j < mActors.size(); ++j) { EMStudioRenderActor* currentEMStudioActor = mActors[j]; if (actor == currentEMStudioActor->mActor) @@ -496,19 +493,17 @@ namespace EMStudio actorInstance->SetCustomData(emstudioActor->mRenderActor); // add the actor instance to the emstudio actor instances in case it is not in yet - if (emstudioActor->mActorInstances.Find(actorInstance) == MCORE_INVALIDINDEX32) + if (AZStd::find(begin(emstudioActor->mActorInstances), end(emstudioActor->mActorInstances), actorInstance) == end(emstudioActor->mActorInstances)) { - emstudioActor->mActorInstances.Add(actorInstance); + emstudioActor->mActorInstances.emplace_back(actorInstance); } } } // 4. Unlink invalid actor instances from the emstudio actors - for (uint32 i = 0; i < mActors.GetLength(); ++i) + for (EMStudioRenderActor* emstudioActor : mActors) { - EMStudioRenderActor* emstudioActor = mActors[i]; - - for (uint32 j = 0; j < emstudioActor->mActorInstances.GetLength();) + for (uint32 j = 0; j < emstudioActor->mActorInstances.size();) { EMotionFX::ActorInstance* emstudioActorInstance = emstudioActor->mActorInstances[j]; bool found = false; @@ -524,7 +519,7 @@ namespace EMStudio if (found == false) { - emstudioActor->mActorInstances.Remove(j); + emstudioActor->mActorInstances.erase(AZStd::next(begin(emstudioActor->mActorInstances), j)); } else { @@ -571,7 +566,7 @@ namespace EMStudio RenderPlugin::EMStudioRenderActor::~EMStudioRenderActor() { // get the number of actor instances and iterate through them - const uint32 numActorInstances = mActorInstances.GetLength(); + const uint32 numActorInstances = mActorInstances.size(); for (uint32 i = 0; i < numActorInstances; ++i) { EMotionFX::ActorInstance* actorInstance = mActorInstances[i]; @@ -1038,7 +1033,7 @@ namespace EMStudio MCommon::RenderUtil::TrajectoryTracePath* tracePath = new MCommon::RenderUtil::TrajectoryTracePath(); tracePath->mActorInstance = actorInstance; - tracePath->mTraceParticles.Reserve(512); + tracePath->mTraceParticles.reserve(512); m_trajectoryTracePaths.emplace_back(tracePath); return tracePath; @@ -1079,13 +1074,13 @@ namespace EMStudio const EMotionFX::Transform& worldTM = actorInstance->GetWorldSpaceTransform(); bool distanceTraveledEnough = false; - if (trajectoryPath->mTraceParticles.GetIsEmpty()) + if (trajectoryPath->mTraceParticles.empty()) { distanceTraveledEnough = true; } else { - const uint32 numParticles = trajectoryPath->mTraceParticles.GetLength(); + const uint32 numParticles = trajectoryPath->mTraceParticles.size(); const EMotionFX::Transform& oldWorldTM = trajectoryPath->mTraceParticles[numParticles - 1].mWorldTM; const AZ::Vector3& oldPos = oldWorldTM.mPosition; @@ -1109,7 +1104,7 @@ namespace EMStudio // create the particle, fill its data and add it to the trajectory trace path MCommon::RenderUtil::TrajectoryPathParticle trajectoryParticle; trajectoryParticle.mWorldTM = worldTM; - trajectoryPath->mTraceParticles.Add(trajectoryParticle); + trajectoryPath->mTraceParticles.emplace_back(trajectoryParticle); // reset the time passed as we just added a new particle trajectoryPath->mTimePassed = 0.0f; @@ -1117,9 +1112,9 @@ namespace EMStudio } // make sure we don't have too many items in our array - if (trajectoryPath->mTraceParticles.GetLength() > 50) + if (trajectoryPath->mTraceParticles.size() > 50) { - trajectoryPath->mTraceParticles.RemoveFirst(); + trajectoryPath->mTraceParticles.erase(begin(trajectoryPath->mTraceParticles)); } } } diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderPlugin.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderPlugin.h index 7fa0a880d0..27e5504e72 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderPlugin.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderPlugin.h @@ -53,9 +53,9 @@ namespace EMStudio MCORE_MEMORYOBJECTCATEGORY(RenderPlugin::EMStudioRenderActor, MCore::MCORE_DEFAULT_ALIGNMENT, MEMCATEGORY_EMSTUDIOSDK_RENDERPLUGINBASE); EMotionFX::Actor* mActor; - MCore::Array mBoneList; + AZStd::vector mBoneList; RenderGL::GLActor* mRenderActor; - MCore::Array mActorInstances; + AZStd::vector mActorInstances; float mNormalsScaleMultiplier; float mCharacterHeight; float mOffsetFromTrajectoryNode; @@ -203,7 +203,7 @@ namespace EMStudio RenderUpdateCallback* mUpdateCallback; RenderOptions mRenderOptions; - MCore::Array mActors; + AZStd::vector mActors; // view widgets AZStd::vector m_viewWidgets; diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderUpdateCallback.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderUpdateCallback.cpp index 6de228fa52..24b4471280 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderUpdateCallback.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderUpdateCallback.cpp @@ -84,13 +84,13 @@ namespace EMStudio const EMotionFX::Transform globalTM = transformData->GetCurrentPose()->GetWorldSpaceTransform(motionExtractionNode->GetNodeIndex()).ProjectedToGroundPlane(); bool distanceTraveledEnough = false; - if (trajectoryPath->mTraceParticles.GetIsEmpty()) + if (trajectoryPath->mTraceParticles.empty()) { distanceTraveledEnough = true; } else { - const uint32 numParticles = trajectoryPath->mTraceParticles.GetLength(); + const uint32 numParticles = trajectoryPath->mTraceParticles.size(); const EMotionFX::Transform& oldGlobalTM = trajectoryPath->mTraceParticles[numParticles - 1].mWorldTM; const AZ::Vector3& oldPos = oldGlobalTM.mPosition; @@ -115,7 +115,7 @@ namespace EMStudio // create the particle, fill its data and add it to the trajectory trace path MCommon::RenderUtil::TrajectoryPathParticle trajectoryParticle; trajectoryParticle.mWorldTM = globalTM; - trajectoryPath->mTraceParticles.Add(trajectoryParticle); + trajectoryPath->mTraceParticles.emplace_back(trajectoryParticle); // reset the time passed as we just added a new particle trajectoryPath->mTimePassed = 0.0f; @@ -123,9 +123,9 @@ namespace EMStudio } // make sure we don't have too many items in our array - if (trajectoryPath->mTraceParticles.GetLength() > 50) + if (trajectoryPath->mTraceParticles.size() > 50) { - trajectoryPath->mTraceParticles.RemoveFirst(); + trajectoryPath->mTraceParticles.erase(begin(trajectoryPath->mTraceParticles)); } } } diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderWidget.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderWidget.cpp index 25ae2ba2d4..b123f62ac5 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderWidget.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderWidget.cpp @@ -38,8 +38,6 @@ namespace EMStudio //mLines.SetMemoryCategory(MEMCATEGORY_EMSTUDIOSDK_RENDERPLUGINBASE); //mLines.Reserve(2048); - mSelectedActorInstances.SetMemoryCategory(MEMCATEGORY_EMSTUDIOSDK_RENDERPLUGINBASE); - // camera used to render the little axis on the bottom left mAxisFakeCamera = new MCommon::OrthographicCamera(MCommon::OrthographicCamera::VIEWMODE_FRONT); @@ -255,13 +253,13 @@ namespace EMStudio } // update size/bounding volumes volumes of all existing gizmos - const MCore::Array* transformationManipulators = GetManager()->GetTransformationManipulators(); + const AZStd::vector* transformationManipulators = GetManager()->GetTransformationManipulators(); // render all visible gizmos - const uint32 numGizmos = transformationManipulators->GetLength(); + const uint32 numGizmos = transformationManipulators->size(); for (uint32 i = 0; i < numGizmos; ++i) { - MCommon::TransformationManipulator* activeManipulator = transformationManipulators->GetItem(i); + MCommon::TransformationManipulator* activeManipulator = transformationManipulators->at(i); if (activeManipulator == nullptr) { continue; @@ -619,7 +617,7 @@ namespace EMStudio } } - mSelectedActorInstances.Clear(false); + mSelectedActorInstances.clear(); if (ctrlPressed) { @@ -627,13 +625,13 @@ namespace EMStudio const uint32 numSelectedActorInstances = selection.GetNumSelectedActorInstances(); for (uint32 i = 0; i < numSelectedActorInstances; ++i) { - mSelectedActorInstances.Add(selection.GetActorInstance(i)); + mSelectedActorInstances.emplace_back(selection.GetActorInstance(i)); } } if (selectedActorInstance) { - mSelectedActorInstances.Add(selectedActorInstance); + mSelectedActorInstances.emplace_back(selectedActorInstance); } CommandSystem::SelectActorInstancesUsingCommands(mSelectedActorInstances); @@ -1008,14 +1006,14 @@ namespace EMStudio return; } - MCore::Array* transformationManipulators = GetManager()->GetTransformationManipulators(); - const uint32 numGizmos = transformationManipulators->GetLength(); + AZStd::vector* transformationManipulators = GetManager()->GetTransformationManipulators(); + const uint32 numGizmos = transformationManipulators->size(); // render all visible gizmos for (uint32 i = 0; i < numGizmos; ++i) { // update the gizmos - MCommon::TransformationManipulator* activeManipulator = transformationManipulators->GetItem(i); + MCommon::TransformationManipulator* activeManipulator = transformationManipulators->at(i); // update the gizmos if there is an active manipulator if (activeManipulator == nullptr) @@ -1048,7 +1046,7 @@ namespace EMStudio } // render custom triangles - const uint32 numTriangles = mTriangles.GetLength(); + const uint32 numTriangles = mTriangles.size(); for (uint32 i = 0; i < numTriangles; ++i) { const Triangle& curTri = mTriangles[i]; diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderWidget.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderWidget.h index 10722f744a..d2ec5d71ea 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderWidget.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/EMStudioSDK/Source/RenderPlugin/RenderWidget.h @@ -98,8 +98,8 @@ namespace EMStudio virtual void Update() = 0; // line rendering helper functions - MCORE_INLINE void AddTriangle(const AZ::Vector3& posA, const AZ::Vector3& posB, const AZ::Vector3& posC, const AZ::Vector3& normalA, const AZ::Vector3& normalB, const AZ::Vector3& normalC, uint32 color) { mTriangles.Add(Triangle(posA, posB, posC, normalA, normalB, normalC, color)); } - MCORE_INLINE void ClearTriangles() { mTriangles.Clear(false); } + MCORE_INLINE void AddTriangle(const AZ::Vector3& posA, const AZ::Vector3& posB, const AZ::Vector3& posC, const AZ::Vector3& normalA, const AZ::Vector3& normalB, const AZ::Vector3& normalC, uint32 color) { mTriangles.emplace_back(Triangle(posA, posB, posC, normalA, normalB, normalC, color)); } + MCORE_INLINE void ClearTriangles() { mTriangles.clear(); } void RenderTriangles(); // helper rendering functions @@ -139,10 +139,10 @@ namespace EMStudio RenderPlugin* mPlugin; RenderViewWidget* mViewWidget; - MCore::Array mTriangles; + AZStd::vector mTriangles; EventHandler mEventHandler; - MCore::Array mSelectedActorInstances; + AZStd::vector mSelectedActorInstances; MCommon::TransformationManipulator* mActiveTransformManip; diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/AnimGraphPlugin.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/AnimGraphPlugin.cpp index 20d4b04acc..5026af3b06 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/AnimGraphPlugin.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/AnimGraphPlugin.cpp @@ -808,11 +808,11 @@ namespace EMStudio const AZStd::string& paramName = animGraphInstance->GetAnimGraph()->FindParameter(paramIndex)->GetName(); // iterate over all gizmos that are active - MCore::Array* gizmos = manager->GetTransformationManipulators(); - const uint32 numGizmos = gizmos->GetLength(); + AZStd::vector* gizmos = manager->GetTransformationManipulators(); + const uint32 numGizmos = gizmos->size(); for (uint32 i = 0; i < numGizmos; ++i) { - MCommon::TransformationManipulator* gizmo = gizmos->GetItem(i); + MCommon::TransformationManipulator* gizmo = gizmos->at(i); // check the gizmo name if (paramName == gizmo->GetName()) diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/AnimGraphPlugin.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/AnimGraphPlugin.h index c741b0cc6e..ad4098308d 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/AnimGraphPlugin.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/AnimGraphPlugin.h @@ -17,7 +17,7 @@ #include "../../../../EMStudioSDK/Source/EMStudioManager.h" #include -#include +#include #include #include diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/BlendGraphWidgetCallback.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/BlendGraphWidgetCallback.cpp deleted file mode 100644 index 42550753ca..0000000000 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/BlendGraphWidgetCallback.cpp +++ /dev/null @@ -1,409 +0,0 @@ -/* - * 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 the required headers -#include "BlendGraphWidgetCallback.h" -//#include "GraphNode.h" -#include "AnimGraphPlugin.h" -#include "NodeGraph.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -namespace EMStudio -{ - // constructor - BlendGraphWidgetCallback::BlendGraphWidgetCallback(BlendGraphWidget* widget) - : GraphWidgetCallback(widget) - { - mBlendGraphWidget = widget; - - mFont.setPixelSize(12); - mTextOptions.setAlignment(Qt::AlignCenter); - mFontMetrics = new QFontMetrics(mFont); - } - - - // destructor - BlendGraphWidgetCallback::~BlendGraphWidgetCallback() - { - delete mFontMetrics; - } - - - void BlendGraphWidgetCallback::DrawOverlay(QPainter& painter) - { - // get the plugin and return directly in case we're not showing the processed nodes - AnimGraphPlugin* plugin = mBlendGraphWidget->GetPlugin(); - //if (plugin->GetShowProcessed() == false) - // return; - - // if we're going to display some visualization information - // if (plugin->GetDisplayPlaySpeeds() || plugin->GetDisplayGlobalWeights() || plugin->GetDisplaySyncStatus()) - if (plugin->GetDisplayFlags() != 0) - { - // get the active graph and the corresponding emfx node and return if they are invalid or in case the opened node is no blend tree - NodeGraph* activeGraph = mBlendGraphWidget->GetActiveGraph(); - EMotionFX::AnimGraphNode* currentNode = mBlendGraphWidget->GetCurrentNode(); - if (activeGraph == nullptr || currentNode == nullptr) - { - return; - } - - // get the currently selected actor instance and its anim graph instance and return if they are not valid - EMotionFX::ActorInstance* actorInstance = GetCommandManager()->GetCurrentSelection().GetSingleActorInstance(); - if (actorInstance == nullptr || actorInstance->GetAnimGraphInstance() == nullptr) - { - return; - } - - EMotionFX::AnimGraphInstance* animGraphInstance = actorInstance->GetAnimGraphInstance(); - - // get the number of nodes and iterate through them - const uint32 numNodes = activeGraph->GetNumNodes(); - for (uint32 i = 0; i < numNodes; ++i) - { - GraphNode* graphNode = activeGraph->GetNode(i); - EMotionFX::AnimGraphNode* emfxNode = currentNode->RecursiveFindNodeById(graphNode->GetId()); - - // skip invisible graph nodes - if (graphNode->GetIsVisible() == false) - { - continue; - } - - // make sure the corresponding anim graph node is valid - if (emfxNode == nullptr) - { - continue; - } - - // skip non-processed nodes and nodes that have no output pose - if (emfxNode->GetHasOutputPose() == false || graphNode->GetIsProcessed() == false) - { - continue; - } - - if (graphNode->GetIsHighlighted()) - { - continue; - } - - // get the unique data - EMotionFX::AnimGraphNodeData* uniqueData = emfxNode->FindUniqueNodeData(animGraphInstance); - - // draw the background darkened rect - uint32 requiredHeight = 5; - const uint32 rectWidth = 155; - const uint32 heightSpacing = 11; - if (plugin->GetIsDisplayFlagEnabled(AnimGraphPlugin::DISPLAYFLAG_PLAYSPEED)) - { - requiredHeight += heightSpacing; - } - if (plugin->GetIsDisplayFlagEnabled(AnimGraphPlugin::DISPLAYFLAG_GLOBALWEIGHT)) - { - requiredHeight += heightSpacing; - } - if (plugin->GetIsDisplayFlagEnabled(AnimGraphPlugin::DISPLAYFLAG_SYNCSTATUS)) - { - requiredHeight += heightSpacing; - } - if (plugin->GetIsDisplayFlagEnabled(AnimGraphPlugin::DISPLAYFLAG_PLAYPOSITION)) - { - requiredHeight += heightSpacing; - } - const QRect& nodeRect = graphNode->GetFinalRect(); - QRect textRect(nodeRect.center().x() - rectWidth / 2, nodeRect.center().y() - requiredHeight / 2, rectWidth, requiredHeight); - const uint32 alpha = (graphNode->GetIsHighlighted()) ? 225 : 175; - const QColor backgroundColor(0, 0, 0, alpha); - painter.setBrush(backgroundColor); - painter.setPen(Qt::black); - painter.drawRect(textRect); - - QColor textColor(255, 255, 0); - //textColor = graphNode->GetBaseColor(); - if (graphNode->GetIsHighlighted()) - { - textColor = QColor(0, 255, 0); - } - - painter.setPen(textColor); - painter.setFont(mFont); - - QPoint textPosition = textRect.topLeft(); - textPosition.setX(textPosition.x() + 3); - textPosition.setY(textPosition.y() + 11); - - // add the playspeed - if (plugin->GetIsDisplayFlagEnabled(AnimGraphPlugin::DISPLAYFLAG_PLAYSPEED)) - { - mQtTempString.sprintf("Play Speed = %.2f", emfxNode->GetPlaySpeed(animGraphInstance)); - painter.drawText(textPosition, mQtTempString); - textPosition.setY(textPosition.y() + heightSpacing); - } - - // add the global weight - if (plugin->GetIsDisplayFlagEnabled(AnimGraphPlugin::DISPLAYFLAG_GLOBALWEIGHT)) - { - mQtTempString.sprintf("Global Weight = %.2f", uniqueData->GetGlobalWeight()); - painter.drawText(textPosition, mQtTempString); - textPosition.setY(textPosition.y() + heightSpacing); - } - - // add the sync - if (plugin->GetIsDisplayFlagEnabled(AnimGraphPlugin::DISPLAYFLAG_SYNCSTATUS)) - { - mQtTempString.sprintf("Synced = %s", animGraphInstance->GetIsSynced(emfxNode->GetObjectIndex()) ? "Yes" : "No"); - painter.drawText(textPosition, mQtTempString); - textPosition.setY(textPosition.y() + heightSpacing); - } - - // add the play position - if (plugin->GetIsDisplayFlagEnabled(AnimGraphPlugin::DISPLAYFLAG_PLAYPOSITION)) - { - mQtTempString.sprintf("Play Time = %.3f / %.3f", uniqueData->GetCurrentPlayTime(), uniqueData->GetDuration()); - painter.drawText(textPosition, mQtTempString); - textPosition.setY(textPosition.y() + heightSpacing); - } - } - } - - - const EMotionFX::ActorInstance* actorInstance = GetCommandManager()->GetCurrentSelection().GetSingleActorInstance(); - if (!actorInstance) - { - return; - } - - EMotionFX::AnimGraphInstance* animGraphInstance = actorInstance->GetAnimGraphInstance(); - if (!animGraphInstance) - { - return; - } - - // get the active graph and the corresponding emfx node and return if they are invalid or in case the opened node is no blend tree - NodeGraph* activeGraph = mBlendGraphWidget->GetActiveGraph(); - EMotionFX::AnimGraphNode* currentNode = mBlendGraphWidget->GetCurrentNode(); - - if (!activeGraph || !currentNode || azrtti_typeid(currentNode) != azrtti_typeid()) - { - return; - } - - const EMotionFX::AnimGraph* simulatedAnimGraph = animGraphInstance->GetAnimGraph(); - const EMotionFX::AnimGraph* renderedAnimGraph = currentNode->GetAnimGraph(); - if (simulatedAnimGraph != renderedAnimGraph) - { - AzFramework::StringFunc::Path::GetFileName(simulatedAnimGraph->GetFileName(), m_tempStringA); - AzFramework::StringFunc::Path::GetFileName(renderedAnimGraph->GetFileName(), m_tempStringB); - - m_tempStringC = AZStd::string::format("Simulated anim graph on character (%s) differs from the currently shown one (%s).", m_tempStringA.c_str(), m_tempStringB.c_str()); - GraphNode::RenderText(painter, m_tempStringC.c_str(), QColor(255, 0, 0), mFont, *mFontMetrics, Qt::AlignLeft, QRect(8, 0, 50, 20)); - } - - if (activeGraph->GetScale() < 0.5f) - { - return; - } - - // get the number of nodes and iterate through them - const uint32 numNodes = activeGraph->GetNumNodes(); - for (uint32 i = 0; i < numNodes; ++i) - { - GraphNode* graphNode = activeGraph->GetNode(i); - EMotionFX::AnimGraphNode* emfxNode = currentNode->RecursiveFindNodeById(graphNode->GetId()); - - // make sure the corresponding anim graph node is valid - if (emfxNode == nullptr) - { - continue; - } - - // iterate through all connections connected to this node - const uint32 numConnections = graphNode->GetNumConnections(); - for (uint32 c = 0; c < numConnections; ++c) - { - NodeConnection* visualConnection = graphNode->GetConnection(c); - - // get the source and target nodes - GraphNode* sourceNode = visualConnection->GetSourceNode(); - EMotionFX::AnimGraphNode* emfxSourceNode = currentNode->RecursiveFindNodeById(sourceNode->GetId()); - GraphNode* targetNode = visualConnection->GetTargetNode(); - EMotionFX::AnimGraphNode* emfxTargetNode = currentNode->RecursiveFindNodeById(targetNode->GetId()); - - //QColor color(255,0,255); - QColor color = visualConnection->GetTargetNode()->GetInputPort(visualConnection->GetInputPortNr())->GetColor(); - - // only show values for connections that are processed - if (visualConnection->GetIsProcessed() == false) - { - continue; - } - - const uint32 inputPortNr = visualConnection->GetInputPortNr(); - const uint32 outputPortNr = visualConnection->GetOutputPortNr(); - MCore::Attribute* attribute = emfxSourceNode->GetOutputValue(animGraphInstance, outputPortNr); - - // fill the string with data - m_tempStringA.clear(); - switch (attribute->GetType()) - { - // float attributes - case MCore::AttributeFloat::TYPE_ID: - { - MCore::AttributeFloat* floatAttribute = static_cast(attribute); - m_tempStringA = AZStd::string::format("%.2f", floatAttribute->GetValue()); - break; - } - - // vector 2 attributes - case MCore::AttributeVector2::TYPE_ID: - { - MCore::AttributeVector2* vecAttribute = static_cast(attribute); - AZ::Vector2 vec = vecAttribute->GetValue(); - m_tempStringA = AZStd::string::format("(%.2f, %.2f)", static_cast(vec.GetX()), static_cast(vec.GetY())); - break; - } - - // vector 3 attributes - case MCore::AttributeVector3::TYPE_ID: - { - MCore::AttributeVector3* vecAttribute = static_cast(attribute); - AZ::PackedVector3f vec = vecAttribute->GetValue(); - m_tempStringA = AZStd::string::format("(%.2f, %.2f, %.2f)", static_cast(vec.GetX()), static_cast(vec.GetY()), static_cast(vec.GetZ())); - break; - } - - // vector 4 attributes - case MCore::AttributeVector4::TYPE_ID: - { - MCore::AttributeVector4* vecAttribute = static_cast(attribute); - AZ::Vector4 vec = vecAttribute->GetValue(); - m_tempStringA = AZStd::string::format("(%.2f, %.2f, %.2f, %.2f)", static_cast(vec.GetX()), static_cast(vec.GetY()), static_cast(vec.GetZ()), static_cast(vec.GetW())); - break; - } - - // boolean attributes - case MCore::AttributeBool::TYPE_ID: - { - MCore::AttributeBool* boolAttribute = static_cast(attribute); - m_tempStringA = AZStd::string::format("%s", AZStd::to_string(boolAttribute->GetValue()).c_str()); - break; - } - - // rotation attributes - case MCore::AttributeQuaternion::TYPE_ID: - { - MCore::AttributeQuaternion* quatAttribute = static_cast(attribute); - const AZ::Vector3 eulerAngles = quatAttribute->GetValue().ToEuler(); - m_tempStringA = AZStd::string::format("(%.2f, %.2f, %.2f)", static_cast(eulerAngles.GetX()), static_cast(eulerAngles.GetY()), static_cast(eulerAngles.GetZ())); - break; - } - - - // pose attribute - case EMotionFX::AttributePose::TYPE_ID: - { - // handle blend 2 nodes - if (azrtti_typeid(emfxTargetNode) == azrtti_typeid()) - { - // type-cast the target node to our blend node - EMotionFX::BlendTreeBlend2Node* blendNode = static_cast(emfxTargetNode); - - // get the weight from the input port - float weight = blendNode->GetInputNumberAsFloat(animGraphInstance, EMotionFX::BlendTreeBlend2Node::INPUTPORT_WEIGHT); - weight = MCore::Clamp(weight, 0.0f, 1.0f); - - // map the weight to the connection - if (inputPortNr == 0) - { - m_tempStringA = AZStd::string::format("%.2f", 1.0f - weight); - } - else - { - m_tempStringA = AZStd::string::format("%.2f", weight); - } - } - - // handle blend N nodes - if (azrtti_typeid(emfxTargetNode) == azrtti_typeid()) - { - // type-cast the target node to our blend node - EMotionFX::BlendTreeBlendNNode* blendNode = static_cast(emfxTargetNode); - - // get two nodes that we receive input poses from, and get the blend weight - float weight; - EMotionFX::AnimGraphNode* nodeA; - EMotionFX::AnimGraphNode* nodeB; - uint32 poseIndexA; - uint32 poseIndexB; - blendNode->FindBlendNodes(animGraphInstance, &nodeA, &nodeB, &poseIndexA, &poseIndexB, &weight); - - // map the weight to the connection - if (inputPortNr == poseIndexA) - { - m_tempStringA = AZStd::string::format("%.2f", 1.0f - weight); - } - else - { - m_tempStringA = AZStd::string::format("%.2f", weight); - } - } - break; - } - - default: - { - attribute->ConvertToString(m_mcoreTempString); - m_tempStringA = m_mcoreTempString.c_str(); - } - } - - // only display the value in case it is not empty - if (!m_tempStringA.empty()) - { - QPoint connectionAttachPoint = visualConnection->CalcFinalRect().center(); - - int halfTextHeight = 6; - int textWidth = mFontMetrics->width(m_tempStringA.c_str()); - int halfTextWidth = textWidth / 2; - - QRect textRect(connectionAttachPoint.x() - halfTextWidth - 1, connectionAttachPoint.y() - halfTextHeight, textWidth + 4, halfTextHeight * 2); - QPoint textPosition = textRect.bottomLeft(); - textPosition.setY(textPosition.y() - 1); - textPosition.setX(textPosition.x() + 2); - - const QColor backgroundColor(30, 30, 30); - - // draw the background rect for the text - painter.setBrush(backgroundColor); - painter.setPen(Qt::black); - painter.drawRect(textRect); - - // draw the text - painter.setPen(color); - painter.setFont(mFont); - // OLD: - //painter.drawText( textPosition, mTempString.c_str() ); - // NEW: - GraphNode::RenderText(painter, m_tempStringA.c_str(), color, mFont, *mFontMetrics, Qt::AlignCenter, textRect); - } - } - } - } -} // namespace EMStudio - -#include diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/BlendGraphWidgetCallback.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/BlendGraphWidgetCallback.h deleted file mode 100644 index 399c679a29..0000000000 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/BlendGraphWidgetCallback.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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 - * - */ - -#ifndef __EMSTUDIO_BLENDGRAPHWIDGETCALLBACK_H -#define __EMSTUDIO_BLENDGRAPHWIDGETCALLBACK_H - -// include required headers -#if !defined(Q_MOC_RUN) -#include -#include "../StandardPluginsConfig.h" -#include "GraphWidgetCallback.h" -#include "BlendGraphWidget.h" -#include -#include -#include -#endif - - -namespace EMStudio -{ - // blend graph widget callback - class BlendGraphWidgetCallback - : public GraphWidgetCallback - { - MCORE_MEMORYOBJECTCATEGORY(BlendGraphWidgetCallback, EMFX_DEFAULT_ALIGNMENT, MEMCATEGORY_STANDARDPLUGINS_ANIMGRAPH); - - public: - BlendGraphWidgetCallback(BlendGraphWidget* widget); - virtual ~BlendGraphWidgetCallback(); - - void DrawOverlay(QPainter& painter); - - private: - BlendGraphWidget* mBlendGraphWidget; - - QFont mFont; - QString mQtTempString; - QTextOption mTextOptions; - QFontMetrics* mFontMetrics; - AZStd::string m_tempStringA; - AZStd::string m_tempStringB; - AZStd::string m_tempStringC; - AZStd::string m_mcoreTempString; - }; -} // namespace EMStudio - - -#endif diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/BlendNodeSelectionWindow.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/BlendNodeSelectionWindow.h index 048d79a696..4ec48bbffb 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/BlendNodeSelectionWindow.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/BlendNodeSelectionWindow.h @@ -29,7 +29,7 @@ namespace EMStudio * Example: * connect( mNodeSelectionWindow, SIGNAL(rejected()), this, SLOT(UserWantsToCancel_1()) ); * connect( mNodeSelectionWindow->GetNodeHierarchyWidget()->GetTreeWidget(), SIGNAL(itemSelectionChanged()), this, SLOT(SelectionChanged_2()) ); - * connect( mNodeSelectionWindow->GetNodeHierarchyWidget(), SIGNAL(OnSelectionDone(MCore::Array)), this, SLOT(FinishedSelectionAndPressedOK_3(MCore::Array)) ); + * connect( mNodeSelectionWindow->GetNodeHierarchyWidget(), SIGNAL(OnSelectionDone(AZStd::vector)), this, SLOT(FinishedSelectionAndPressedOK_3(AZStd::vector)) ); */ class BlendNodeSelectionWindow : public QDialog diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/BlendTreeVisualNode.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/BlendTreeVisualNode.cpp index 2f86196068..43225692ac 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/BlendTreeVisualNode.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/BlendTreeVisualNode.cpp @@ -40,7 +40,7 @@ namespace EMStudio // add all input ports const AZStd::vector& inPorts = mEMFXNode->GetInputPorts(); const uint32 numInputs = static_cast(inPorts.size()); - mInputPorts.Reserve(numInputs); + mInputPorts.reserve(numInputs); for (uint32 i = 0; i < numInputs; ++i) { NodePort* port = AddInputPort(false); @@ -53,7 +53,7 @@ namespace EMStudio // add all output ports const AZStd::vector& outPorts = mEMFXNode->GetOutputPorts(); const uint32 numOutputs = static_cast(outPorts.size()); - mOutputPorts.Reserve(numOutputs); + mOutputPorts.reserve(numOutputs); for (uint32 i = 0; i < numOutputs; ++i) { NodePort* port = AddOutputPort(false); @@ -112,7 +112,6 @@ namespace EMStudio default: return QColor(50, 250, 250); } - ; } @@ -303,7 +302,7 @@ namespace EMStudio { // draw the input ports QColor portBrushColor, portPenColor; - const uint32 numInputs = mInputPorts.GetLength(); + const uint32 numInputs = mInputPorts.size(); for (uint32 i = 0; i < numInputs; ++i) { // get the input port and the corresponding rect @@ -322,7 +321,7 @@ namespace EMStudio if (GetHasVisualOutputPorts()) { // draw the output ports - const uint32 numOutputs = mOutputPorts.GetLength(); + const uint32 numOutputs = mOutputPorts.size(); for (uint32 i = 0; i < numOutputs; ++i) { // get the output port and the corresponding rect @@ -456,7 +455,7 @@ namespace EMStudio painter.setFont(mPortNameFont); // draw input port text - const uint32 numInputs = mInputPorts.GetLength(); + const uint32 numInputs = mInputPorts.size(); for (uint32 i = 0; i < numInputs; ++i) { NodePort* inputPort = &mInputPorts[i]; @@ -469,7 +468,7 @@ namespace EMStudio } // draw output port text - const uint32 numOutputs = mOutputPorts.GetLength(); + const uint32 numOutputs = mOutputPorts.size(); for (uint32 i = 0; i < numOutputs; ++i) { NodePort* outputPort = &mOutputPorts[i]; diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/GameControllerWindow.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/GameControllerWindow.cpp index 47bb9660a8..5ce488ee70 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/GameControllerWindow.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/GameControllerWindow.cpp @@ -346,11 +346,11 @@ namespace EMStudio // add all parameters // uint32 startRow = 0; - mParameterInfos.Clear(); + mParameterInfos.clear(); const EMotionFX::ValueParameterVector& parameters = animGraph->RecursivelyGetValueParameters(); const size_t numParameters = parameters.size(); - mParameterInfos.Reserve(static_cast(numParameters)); + mParameterInfos.reserve(static_cast(numParameters)); for (size_t parameterIndex = 0; parameterIndex < numParameters; ++parameterIndex) { @@ -478,7 +478,7 @@ namespace EMStudio paramInfo.mMode = modeComboBox; paramInfo.mInvert = invertCheckbox; paramInfo.mValue = valueEdit; - mParameterInfos.Add(paramInfo); + mParameterInfos.emplace_back(paramInfo); // update the interface UpdateParameterInterface(¶mInfo); @@ -490,7 +490,7 @@ namespace EMStudio mButtonGridLayout->setMargin(0); // clear the button infos - mButtonInfos.Clear(); + mButtonInfos.clear(); // get the number of buttons and iterate through them #if AZ_TRAIT_EMOTIONFX_HAS_GAME_CONTROLLER @@ -520,15 +520,15 @@ namespace EMStudio modeComboBox->setCurrentIndex(settingsInfo->m_mode); mButtonGridLayout->addWidget(modeComboBox, i, 1); - mButtonInfos.Add(ButtonInfo(i, modeComboBox)); + mButtonInfos.emplace_back(ButtonInfo(i, modeComboBox)); // reinit the dynamic part of the button layout ReInitButtonInterface(i); } // real time preview of the controller - mPreviewLabels.Clear(); - mPreviewLabels.Resize(GameController::NUM_ELEMENTS + 1); + mPreviewLabels.clear(); + mPreviewLabels.resize(GameController::NUM_ELEMENTS + 1); QVBoxLayout* realtimePreviewLayout = new QVBoxLayout(); QGridLayout* previewGridLayout = new QGridLayout(); previewGridLayout->setAlignment(Qt::AlignTop); @@ -701,7 +701,7 @@ namespace EMStudio GameControllerWindow::ButtonInfo* GameControllerWindow::FindButtonInfo(QWidget* widget) { // get the number of button infos and iterate through them - const uint32 numButtonInfos = mButtonInfos.GetLength(); + const uint32 numButtonInfos = mButtonInfos.size(); for (uint32 i = 0; i < numButtonInfos; ++i) { if (mButtonInfos[i].mWidget == widget) @@ -718,7 +718,7 @@ namespace EMStudio GameControllerWindow::ParameterInfo* GameControllerWindow::FindParamInfoByModeComboBox(QComboBox* comboBox) { // get the number of parameter infos and iterate through them - const uint32 numParamInfos = mParameterInfos.GetLength(); + const uint32 numParamInfos = mParameterInfos.size(); for (uint32 i = 0; i < numParamInfos; ++i) { if (mParameterInfos[i].mMode == comboBox) @@ -736,7 +736,7 @@ namespace EMStudio GameControllerWindow::ParameterInfo* GameControllerWindow::FindButtonInfoByAttributeInfo(const EMotionFX::Parameter* parameter) { // get the number of parameter infos and iterate through them - const uint32 numParamInfos = mParameterInfos.GetLength(); + const uint32 numParamInfos = mParameterInfos.size(); for (uint32 i = 0; i < numParamInfos; ++i) { if (mParameterInfos[i].mParameter == parameter) @@ -1154,7 +1154,7 @@ namespace EMStudio GameControllerWindow::ParameterInfo* GameControllerWindow::FindParamInfoByAxisComboBox(QComboBox* comboBox) { // get the number of parameter infos and iterate through them - const uint32 numParamInfos = mParameterInfos.GetLength(); + const uint32 numParamInfos = mParameterInfos.size(); for (uint32 i = 0; i < numParamInfos; ++i) { if (mParameterInfos[i].mAxis == comboBox) @@ -1232,7 +1232,7 @@ namespace EMStudio GameControllerWindow::ParameterInfo* GameControllerWindow::FindParamInfoByCheckBox(QCheckBox* checkBox) { // get the number of parameter infos and iterate through them - const uint32 numParamInfos = mParameterInfos.GetLength(); + const uint32 numParamInfos = mParameterInfos.size(); for (uint32 i = 0; i < numParamInfos; ++i) { if (mParameterInfos[i].mInvert == checkBox) diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/GameControllerWindow.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/GameControllerWindow.h index 7236842ef0..c9ea776337 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/GameControllerWindow.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/GameControllerWindow.h @@ -14,7 +14,7 @@ #include -#include +#include #include #include #include @@ -154,9 +154,9 @@ namespace EMStudio void UpdateGameControllerComboBox(); AnimGraphPlugin* mPlugin; - MCore::Array mPreviewLabels; - MCore::Array mParameterInfos; - MCore::Array mButtonInfos; + AZStd::vector mPreviewLabels; + AZStd::vector mParameterInfos; + AZStd::vector mButtonInfos; QBasicTimer mInterfaceTimer; QBasicTimer mGameControllerTimer; AZ::Debug::Timer mDeltaTimer; diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/GraphNode.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/GraphNode.cpp index fe2e5894c4..6bf1c4d45a 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/GraphNode.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/GraphNode.cpp @@ -25,10 +25,6 @@ namespace EMStudio GraphNode::GraphNode(const QModelIndex& modelIndex, const char* name, uint32 numInputs, uint32 numOutputs) : m_modelIndex(modelIndex) { - mConnections.SetMemoryCategory(MEMCATEGORY_STANDARDPLUGINS_ANIMGRAPH); - mInputPorts.SetMemoryCategory(MEMCATEGORY_STANDARDPLUGINS_ANIMGRAPH); - mOutputPorts.SetMemoryCategory(MEMCATEGORY_STANDARDPLUGINS_ANIMGRAPH); - mRect = QRect(0, 0, 200, 128); mBaseColor = QColor(74, 63, 238); mVisualizeColor = QColor(0, 255, 0); @@ -66,8 +62,8 @@ namespace EMStudio mTextOptionsAlignRight.setAlignment(Qt::AlignRight | Qt::AlignVCenter); mTextOptionsAlignLeft.setAlignment(Qt::AlignLeft | Qt::AlignVCenter); - mInputPorts.Resize(numInputs); - mOutputPorts.Resize(numOutputs); + mInputPorts.resize(numInputs); + mOutputPorts.resize(numOutputs); // initialize the port metrics mPortFontMetrics = new QFontMetrics(mPortNameFont); @@ -123,8 +119,8 @@ namespace EMStudio mInfoText.prepare(QTransform(), mSubTitleFont); // input ports - const uint32 numInputs = mInputPorts.GetLength(); - mInputPortText.Resize(numInputs); + const uint32 numInputs = mInputPorts.size(); + mInputPortText.resize(numInputs); for (uint32 i = 0; i < numInputs; ++i) { QStaticText& staticText = mInputPortText[i]; @@ -136,8 +132,8 @@ namespace EMStudio } // output ports - const uint32 numOutputs = mOutputPorts.GetLength(); - mOutputPortText.Resize(numOutputs); + const uint32 numOutputs = mOutputPorts.size(); + mOutputPortText.resize(numOutputs); for (uint32 i = 0; i < numOutputs; ++i) { QStaticText& staticText = mOutputPortText[i]; @@ -241,13 +237,13 @@ namespace EMStudio // remove all node connections void GraphNode::RemoveAllConnections() { - const uint32 numConnections = mConnections.GetLength(); + const uint32 numConnections = mConnections.size(); for (uint32 i = 0; i < numConnections; ++i) { delete mConnections[i]; } - mConnections.Clear(); + mConnections.clear(); } @@ -338,7 +334,7 @@ namespace EMStudio // update the input ports and reset the port highlight flags uint32 i; - const uint32 numInputPorts = mInputPorts.GetLength(); + const uint32 numInputPorts = mInputPorts.size(); for (i = 0; i < numInputPorts; ++i) { mInputPorts[i].SetRect(CalcInputPortRect(i)); @@ -346,7 +342,7 @@ namespace EMStudio } // update the output ports and reset the port highlight flags - const uint32 numOutputPorts = mOutputPorts.GetLength(); + const uint32 numOutputPorts = mOutputPorts.size(); for (i = 0; i < numOutputPorts; ++i) { mOutputPorts[i].SetRect(CalcOutputPortRect(i)); @@ -574,7 +570,7 @@ namespace EMStudio // draw the input ports QColor portBrushColor, portPenColor; - const uint32 numInputs = mInputPorts.GetLength(); + const uint32 numInputs = mInputPorts.size(); for (uint32 i = 0; i < numInputs; ++i) { // get the input port and the corresponding rect @@ -599,7 +595,7 @@ namespace EMStudio if (GetHasVisualOutputPorts()) { // draw the output ports - const uint32 numOutputs = mOutputPorts.GetLength(); + const uint32 numOutputs = mOutputPorts.size(); for (uint32 i = 0; i < numOutputs; ++i) { // get the output port and the corresponding rect @@ -827,7 +823,7 @@ namespace EMStudio const bool alwaysColor = GetAlwaysColor(); // for all connections - const uint32 numConnections = mConnections.GetLength(); + const uint32 numConnections = mConnections.size(); for (uint32 c = 0; c < numConnections; ++c) { NodeConnection* nodeConnection = mConnections[c]; @@ -922,7 +918,7 @@ namespace EMStudio { if (mIsCollapsed == false) { - uint32 numPorts = MCore::Max(mInputPorts.GetLength(), mOutputPorts.GetLength()); + uint32 numPorts = MCore::Max(mInputPorts.size(), mOutputPorts.size()); uint32 result = (numPorts * 15) + 34; return MCore::Math::Align(result, 10); } @@ -939,7 +935,7 @@ namespace EMStudio // calc the maximum input port width uint32 maxInputWidth = 0; uint32 width; - const uint32 numInputPorts = mInputPorts.GetLength(); + const uint32 numInputPorts = mInputPorts.size(); for (uint32 i = 0; i < numInputPorts; ++i) { const NodePort* nodePort = &mInputPorts[i]; @@ -956,7 +952,7 @@ namespace EMStudio // calc the maximum output port width uint32 width; uint32 maxOutputWidth = 0; - const uint32 numOutputPorts = mOutputPorts.GetLength(); + const uint32 numOutputPorts = mOutputPorts.size(); for (uint32 i = 0; i < numOutputPorts; ++i) { width = mPortFontMetrics->horizontalAdvance(mOutputPorts[i].GetName()); @@ -1052,40 +1048,40 @@ namespace EMStudio // remove all input ports void GraphNode::RemoveAllInputPorts() { - mInputPorts.Clear(false); + mInputPorts.clear(); } // remove all output ports void GraphNode::RemoveAllOutputPorts() { - mOutputPorts.Clear(false); + mOutputPorts.clear(); } // add a new input port NodePort* GraphNode::AddInputPort(bool updateTextPixMap) { - mInputPorts.AddEmpty(); - mInputPorts.GetLast().SetNode(this); + mInputPorts.emplace_back(); + mInputPorts.back().SetNode(this); if (updateTextPixMap) { UpdateTextPixmap(); } - return &mInputPorts.GetLast(); + return &mInputPorts.back(); } // add a new output port NodePort* GraphNode::AddOutputPort(bool updateTextPixMap) { - mOutputPorts.AddEmpty(); - mOutputPorts.GetLast().SetNode(this); + mOutputPorts.emplace_back(); + mOutputPorts.back().SetNode(this); if (updateTextPixMap) { UpdateTextPixmap(); } - return &mOutputPorts.GetLast(); + return &mOutputPorts.back(); } /* @@ -1129,7 +1125,7 @@ namespace EMStudio // check the input ports if (includeInputPorts) { - const uint32 numInputPorts = mInputPorts.GetLength(); + const uint32 numInputPorts = mInputPorts.size(); for (i = 0; i < numInputPorts; ++i) { QRect rect = CalcInputPortRect(i); @@ -1143,7 +1139,7 @@ namespace EMStudio } // check the output ports - const uint32 numOutputPorts = mOutputPorts.GetLength(); + const uint32 numOutputPorts = mOutputPorts.size(); for (i = 0; i < numOutputPorts; ++i) { QRect rect = CalcOutputPortRect(i); @@ -1161,7 +1157,7 @@ namespace EMStudio // remove a given connection bool GraphNode::RemoveConnection(const void* connection, bool removeFromMemory) { - const uint32 numConnections = mConnections.GetLength(); + const uint32 numConnections = mConnections.size(); for (uint32 i = 0; i < numConnections; ++i) { // if this is the connection we're searching for @@ -1171,7 +1167,7 @@ namespace EMStudio { delete mConnections[i]; } - mConnections.Remove(i); + mConnections.erase(AZStd::next(begin(mConnections), i)); return true; } } @@ -1182,7 +1178,7 @@ namespace EMStudio // Remove a given connection by model index bool GraphNode::RemoveConnection(const QModelIndex& modelIndex, bool removeFromMemory) { - const uint32 numConnections = mConnections.GetLength(); + const uint32 numConnections = mConnections.size(); for (uint32 i = 0; i < numConnections; ++i) { // if this is the connection we're searching for @@ -1192,7 +1188,7 @@ namespace EMStudio { delete mConnections[i]; } - mConnections.Remove(i); + mConnections.erase(AZStd::next(begin(mConnections), i)); return true; } } diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/GraphNode.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/GraphNode.h index 42c5c7e123..ba6be3de28 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/GraphNode.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/GraphNode.h @@ -9,7 +9,7 @@ #pragma once #include -#include +#include #include #include #include "../StandardPluginsConfig.h" @@ -44,7 +44,6 @@ namespace EMStudio public: NodePort() : mIsHighlighted(false) { mNode = nullptr; mNameID = MCORE_INVALIDINDEX32; mColor.setRgb(50, 150, 250); } - ~NodePort() {} MCORE_INLINE void SetName(const char* name) { mNameID = MCore::GetStringIdPool().GenerateIdForString(name); OnNameChanged(); } MCORE_INLINE const char* GetName() const { return MCore::GetStringIdPool().GetName(mNameID).c_str(); } @@ -85,10 +84,10 @@ namespace EMStudio const QModelIndex& GetModelIndex() const { return m_modelIndex; } MCORE_INLINE void UpdateNameAndPorts() { mNameAndPortsUpdated = false; } - MCORE_INLINE MCore::Array& GetConnections() { return mConnections; } - MCORE_INLINE uint32 GetNumConnections() { return mConnections.GetLength(); } + MCORE_INLINE AZStd::vector& GetConnections() { return mConnections; } + MCORE_INLINE size_t GetNumConnections() { return mConnections.size(); } MCORE_INLINE NodeConnection* GetConnection(uint32 index) { return mConnections[index]; } - MCORE_INLINE NodeConnection* AddConnection(NodeConnection* con) { mConnections.Add(con); return con; } + MCORE_INLINE NodeConnection* AddConnection(NodeConnection* con) { mConnections.emplace_back(con); return con; } MCORE_INLINE void SetParentGraph(NodeGraph* graph) { mParentGraph = graph; } MCORE_INLINE NodeGraph* GetParentGraph() { return mParentGraph; } MCORE_INLINE NodePort* GetInputPort(uint32 index) { return &mInputPorts[index]; } @@ -135,8 +134,8 @@ namespace EMStudio MCORE_INLINE float GetOpacity() const { return mOpacity; } MCORE_INLINE void SetOpacity(float opacity) { mOpacity = opacity; } - uint32 GetNumInputPorts() const { return mInputPorts.GetLength(); } - uint32 GetNumOutputPorts() const { return mOutputPorts.GetLength(); } + size_t GetNumInputPorts() const { return mInputPorts.size(); } + size_t GetNumOutputPorts() const { return mOutputPorts.size(); } NodePort* AddInputPort(bool updateTextPixMap); NodePort* AddOutputPort(bool updateTextPixMap); @@ -227,7 +226,7 @@ namespace EMStudio QColor mBorderColor; QColor mVisualizeColor; QColor mHasChildIndicatorColor; - MCore::Array mConnections; + AZStd::vector mConnections; float mOpacity; bool mIsVisible; static QColor mPortHighlightColor; @@ -251,15 +250,15 @@ namespace EMStudio QStaticText mSubTitleText; QStaticText mInfoText; - MCore::Array mInputPortText; - MCore::Array mOutputPortText; + AZStd::vector mInputPortText; + AZStd::vector mOutputPortText; int32 mRequiredWidth; bool mNameAndPortsUpdated; NodeGraph* mParentGraph; - MCore::Array mInputPorts; - MCore::Array mOutputPorts; + AZStd::vector mInputPorts; + AZStd::vector mOutputPorts; bool mConFromOutputOnly; bool mIsDeletable; bool mIsCollapsed; diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/NodeGraph.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/NodeGraph.cpp index 761baaffcf..39a9a0630d 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/NodeGraph.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/NodeGraph.cpp @@ -2013,8 +2013,8 @@ namespace EMStudio // So we have to rely on the UI data. for (const GraphNodeByModelIndex::value_type& target : m_graphNodeByModelIndex) { - MCore::Array& connections = target.second->GetConnections(); - const uint32 connectionsCount = connections.GetLength(); + AZStd::vector& connections = target.second->GetConnections(); + const uint32 connectionsCount = connections.size(); for (uint32 i = 0; i < connectionsCount; ++i) { if (connections[i]->GetType() == StateConnection::TYPE_ID) @@ -2023,7 +2023,7 @@ namespace EMStudio if (visualStateConnection->GetModelIndex() == modelIndex) { delete connections[i]; - connections.Remove(i); + connections.erase(AZStd::next(begin(connections), i)); break; } } @@ -2086,8 +2086,8 @@ namespace EMStudio GraphNode* targetGraphNode = FindGraphNode(targetNode); bool foundConnection = false; - MCore::Array& connections = targetGraphNode->GetConnections(); - const uint32 connectionsCount = connections.GetLength(); + AZStd::vector& connections = targetGraphNode->GetConnections(); + const uint32 connectionsCount = connections.size(); for (uint32 i = 0; i < connectionsCount; ++i) { if (connections[i]->GetType() == StateConnection::TYPE_ID) @@ -2110,13 +2110,11 @@ namespace EMStudio { GraphNode* visualNode = indexAndGraphNode.second.get(); - MCore::Array& connections2 = visualNode->GetConnections(); - const uint32 connectionsCount2 = connections2.GetLength(); - for (uint32 i = 0; i < connectionsCount2; ++i) + for (NodeConnection* connection : visualNode->GetConnections()) { - if (connections2[i]->GetType() == StateConnection::TYPE_ID) + if (connection->GetType() == StateConnection::TYPE_ID) { - StateConnection* visualStateConnection = static_cast(connections2[i]); + StateConnection* visualStateConnection = static_cast(connection); if (visualStateConnection->GetModelIndex() == modelIndex) { // Transfer ownership from the previous visual node to where we relinked the transition to. @@ -2176,8 +2174,8 @@ namespace EMStudio // We have to rely on the UI data. for (const GraphNodeByModelIndex::value_type& target : m_graphNodeByModelIndex) { - MCore::Array& connections = target.second->GetConnections(); - const uint32 connectionsCount = connections.GetLength(); + AZStd::vector& connections = target.second->GetConnections(); + const uint32 connectionsCount = connections.size(); for (uint32 i = 0; i < connectionsCount; ++i) { if (connections[i]->GetType() == StateConnection::TYPE_ID) @@ -2205,8 +2203,8 @@ namespace EMStudio GraphNode* target = FindGraphNode(parentModelIndex); if (target) { - MCore::Array& connections = target->GetConnections(); - const uint32 connectionsCount = connections.GetLength(); + AZStd::vector& connections = target->GetConnections(); + const uint32 connectionsCount = connections.size(); for (uint32 i = 0; i < connectionsCount; ++i) { if (connections[i]->GetType() == NodeConnection::TYPE_ID) diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/NodeGroupWindow.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/NodeGroupWindow.cpp index 8ab7aa8d72..51b170c5aa 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/NodeGroupWindow.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/NodeGroupWindow.cpp @@ -8,6 +8,7 @@ #include #include +#include #include #include #include @@ -160,8 +161,6 @@ namespace EMStudio mTableWidget = nullptr; mAddAction = nullptr; - mWidgetTable.SetMemoryCategory(MEMCATEGORY_STANDARDPLUGINS_ANIMGRAPH); - // create and register the command callbacks mCreateCallback = new CommandAnimGraphAddNodeGroupCallback(false); mRemoveCallback = new CommandAnimGraphRemoveNodeGroupCallback(false); @@ -280,7 +279,7 @@ namespace EMStudio void NodeGroupWindow::Init() { // selected node groups array - MCore::Array selectedNodeGroups; + AZStd::vector selectedNodeGroups; // get the current selection const QList selectedItems = mTableWidget->selectedItems(); @@ -289,19 +288,19 @@ namespace EMStudio const uint32 numSelectedItems = selectedItems.count(); // filter the items - selectedNodeGroups.Reserve(numSelectedItems); + selectedNodeGroups.reserve(numSelectedItems); for (uint32 i = 0; i < numSelectedItems; ++i) { const uint32 rowIndex = selectedItems[i]->row(); const AZStd::string nodeGroupName = FromQtString(mTableWidget->item(rowIndex, 2)->text()); - if (selectedNodeGroups.Find(nodeGroupName) == MCORE_INVALIDINDEX32) + if (AZStd::find(begin(selectedNodeGroups), end(selectedNodeGroups), nodeGroupName) == end(selectedNodeGroups)) { - selectedNodeGroups.Add(nodeGroupName); + selectedNodeGroups.emplace_back(nodeGroupName); } } // clear the lookup array - mWidgetTable.Clear(false); + mWidgetTable.clear(); // get the anim graph EMotionFX::AnimGraph* animGraph = mPlugin->GetActiveAnimGraph(); @@ -331,7 +330,7 @@ namespace EMStudio EMotionFX::AnimGraphNodeGroup* nodeGroup = animGraph->GetNodeGroup(i); // check if the node group is selected - const bool itemSelected = selectedNodeGroups.Find(nodeGroup->GetNameString().c_str()) != MCORE_INVALIDINDEX32; + const bool itemSelected = AZStd::find(begin(selectedNodeGroups), end(selectedNodeGroups), nodeGroup->GetNameString()) != end(selectedNodeGroups); // get the color and convert to Qt color AZ::Color color; @@ -365,7 +364,7 @@ namespace EMStudio colorLayout->addWidget(colorWidget); colorLayoutWidget->setLayout(colorLayout); - mWidgetTable.Add(WidgetLookup(colorWidget, i)); + mWidgetTable.emplace_back(WidgetLookup{colorWidget, i}); connect(colorWidget, &AzQtComponents::ColorLabel::colorChanged, this, &NodeGroupWindow::OnColorChanged); // add the color label in the table @@ -456,7 +455,7 @@ namespace EMStudio uint32 NodeGroupWindow::FindGroupIndexByWidget(QObject* widget) const { // for all table entries - const uint32 numWidgets = mWidgetTable.GetLength(); + const uint32 numWidgets = mWidgetTable.size(); for (uint32 i = 0; i < numWidgets; ++i) { if (mWidgetTable[i].mWidget == widget) // this is button we search for @@ -582,23 +581,23 @@ namespace EMStudio } // filter the items - MCore::Array rowIndices; - rowIndices.Reserve(numSelectedItems); + AZStd::vector rowIndices; + rowIndices.reserve(numSelectedItems); for (uint32 i = 0; i < numSelectedItems; ++i) { const uint32 rowIndex = selectedItems[i]->row(); - if (rowIndices.Find(rowIndex) == MCORE_INVALIDINDEX32) + if (AZStd::find(begin(rowIndices), end(rowIndices), rowIndex) == end(rowIndices)) { - rowIndices.Add(rowIndex); + rowIndices.emplace_back(rowIndex); } } // sort the rows // it's used to select the next row - rowIndices.Sort(); + AZStd::sort(begin(rowIndices), end(rowIndices)); // get the number of selected rows - const uint32 numRowIndices = rowIndices.GetLength(); + const uint32 numRowIndices = rowIndices.size(); // set the command group name AZStd::string commandGroupName; @@ -731,14 +730,14 @@ namespace EMStudio } // filter the items - MCore::Array rowIndices; - rowIndices.Reserve(numSelectedItems); + AZStd::vector rowIndices; + rowIndices.reserve(numSelectedItems); for (uint32 i = 0; i < numSelectedItems; ++i) { const uint32 rowIndex = selectedItems[i]->row(); - if (rowIndices.Find(rowIndex) == MCORE_INVALIDINDEX32) + if (AZStd::find(begin(rowIndices), end(rowIndices), rowIndex) == end(rowIndices)) { - rowIndices.Add(rowIndex); + rowIndices.emplace_back(rowIndex); } } @@ -746,14 +745,14 @@ namespace EMStudio QMenu menu(this); // add rename if only one selected - if (rowIndices.GetLength() == 1) + if (rowIndices.size() == 1) { QAction* renameAction = menu.addAction("Rename Selected Node Group"); connect(renameAction, &QAction::triggered, this, &NodeGroupWindow::OnRenameSelectedNodeGroup); } // at least one selected, remove action is possible - if (rowIndices.GetLength() > 0) + if (rowIndices.size() > 0) { menu.addSeparator(); QAction* removeAction = menu.addAction("Remove Selected Node Groups"); diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/NodeGroupWindow.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/NodeGroupWindow.h index 4dd55a733f..5f0354b223 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/NodeGroupWindow.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/NodeGroupWindow.h @@ -10,7 +10,7 @@ #if !defined(Q_MOC_RUN) #include -#include +#include #include @@ -104,15 +104,8 @@ namespace EMStudio struct WidgetLookup { - MCORE_MEMORYOBJECTCATEGORY(NodeGroupWindow::WidgetLookup, EMFX_DEFAULT_ALIGNMENT, MEMCATEGORY_STANDARDPLUGINS_ANIMGRAPH); QObject* mWidget; uint32 mGroupIndex; - - WidgetLookup(QObject* widget, uint32 index) - { - mWidget = widget; - mGroupIndex = index; - } }; AnimGraphPlugin* mPlugin; @@ -121,6 +114,6 @@ namespace EMStudio QAction* mAddAction; AzQtComponents::FilteredSearchWidget* m_searchWidget; AZStd::string m_searchWidgetText; - MCore::Array mWidgetTable; + AZStd::vector mWidgetTable; }; } // namespace EMStudio diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/ParameterSelectionWindow.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/ParameterSelectionWindow.h index 6e0bad9d10..25e717f473 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/ParameterSelectionWindow.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/ParameterSelectionWindow.h @@ -28,7 +28,7 @@ namespace EMStudio * Example: * connect( mParameterSelectionWindow, SIGNAL(rejected()), this, SLOT(UserWantsToCancel_1()) ); * connect( mParameterSelectionWindow->GetNodeHierarchyWidget()->GetTreeWidget(), SIGNAL(itemSelectionChanged()), this, SLOT(SelectionChanged_2()) ); - * connect( mParameterSelectionWindow->GetNodeHierarchyWidget(), SIGNAL(OnSelectionDone(MCore::Array)), this, SLOT(FinishedSelectionAndPressedOK_3(MCore::Array)) ); + * connect( mParameterSelectionWindow->GetNodeHierarchyWidget(), SIGNAL(OnSelectionDone(AZStd::vector)), this, SLOT(FinishedSelectionAndPressedOK_3(AZStd::vector)) ); */ class ParameterSelectionWindow : public QDialog diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/StateGraphNode.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/StateGraphNode.cpp index 2cb9b8334d..0c4f8b8138 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/StateGraphNode.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/AnimGraph/StateGraphNode.cpp @@ -649,8 +649,8 @@ namespace EMStudio // mTextOptions.setAlignment( Qt::AlignCenter ); - mInputPorts.Resize(1); - mOutputPorts.Resize(4); + mInputPorts.resize(1); + mOutputPorts.resize(4); } StateGraphNode::~StateGraphNode() @@ -856,7 +856,6 @@ namespace EMStudio MCORE_ASSERT(false); return QRect(); } - ; //MCore::LOG("CalcOutputPortRect: (%i, %i, %i, %i)", rect.top(), rect.left(), rect.bottom(), rect.right()); } diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/Attachments/AttachmentNodesWindow.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/Attachments/AttachmentNodesWindow.cpp index 2cf03ca998..3b24552035 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/Attachments/AttachmentNodesWindow.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/Attachments/AttachmentNodesWindow.cpp @@ -110,8 +110,8 @@ namespace EMStudio connect(mAddNodesButton, &QToolButton::clicked, this, &AttachmentNodesWindow::SelectNodesButtonPressed); connect(mRemoveNodesButton, &QToolButton::clicked, this, &AttachmentNodesWindow::RemoveNodesButtonPressed); connect(mNodeTable, &QTableWidget::itemSelectionChanged, this, &AttachmentNodesWindow::OnItemSelectionChanged); - connect(mNodeSelectionWindow->GetNodeHierarchyWidget(), static_cast)>(&NodeHierarchyWidget::OnSelectionDone), this, &AttachmentNodesWindow::NodeSelectionFinished); - connect(mNodeSelectionWindow->GetNodeHierarchyWidget(), static_cast)>(&NodeHierarchyWidget::OnDoubleClicked), this, &AttachmentNodesWindow::NodeSelectionFinished); + connect(mNodeSelectionWindow->GetNodeHierarchyWidget(), &NodeHierarchyWidget::OnSelectionDone, this, &AttachmentNodesWindow::NodeSelectionFinished); + connect(mNodeSelectionWindow->GetNodeHierarchyWidget(), &NodeHierarchyWidget::OnDoubleClicked, this, &AttachmentNodesWindow::NodeSelectionFinished); } @@ -322,10 +322,10 @@ namespace EMStudio // add / select nodes - void AttachmentNodesWindow::NodeSelectionFinished(MCore::Array selectionList) + void AttachmentNodesWindow::NodeSelectionFinished(AZStd::vector selectionList) { // return if no nodes are selected - if (selectionList.GetLength() == 0) + if (selectionList.size() == 0) { return; } @@ -333,7 +333,7 @@ namespace EMStudio // generate node list string AZStd::string nodeList; nodeList.reserve(16384); - const uint32 numSelectedNodes = selectionList.GetLength(); + const uint32 numSelectedNodes = selectionList.size(); for (uint32 i = 0; i < numSelectedNodes; ++i) { nodeList += AZStd::string::format("%s;", selectionList[i].GetNodeName()); diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/Attachments/AttachmentNodesWindow.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/Attachments/AttachmentNodesWindow.h index 89bc06be7f..3a3c3f096e 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/Attachments/AttachmentNodesWindow.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/Attachments/AttachmentNodesWindow.h @@ -57,7 +57,7 @@ namespace EMStudio // the slots void SelectNodesButtonPressed(); void RemoveNodesButtonPressed(); - void NodeSelectionFinished(MCore::Array selectionList); + void NodeSelectionFinished(AZStd::vector selectionList); void OnItemSelectionChanged(); private: diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/Attachments/AttachmentsWindow.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/Attachments/AttachmentsWindow.cpp index 2498ec1b0e..c78d37dd7b 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/Attachments/AttachmentsWindow.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/Attachments/AttachmentsWindow.cpp @@ -204,7 +204,7 @@ namespace EMStudio connect(mOpenDeformableAttachmentButton, &QToolButton::clicked, this, &AttachmentsWindow::OnOpenDeformableAttachmentButtonClicked); connect(mRemoveButton, &QToolButton::clicked, this, &AttachmentsWindow::OnRemoveButtonClicked); connect(mClearButton, &QToolButton::clicked, this, &AttachmentsWindow::OnClearButtonClicked); - connect(mNodeSelectionWindow->GetNodeHierarchyWidget(), static_cast)>(&NodeHierarchyWidget::OnSelectionDone), this, &AttachmentsWindow::OnAttachmentNodesSelected); + connect(mNodeSelectionWindow->GetNodeHierarchyWidget(), &NodeHierarchyWidget::OnSelectionDone, this, &AttachmentsWindow::OnAttachmentNodesSelected); connect(mNodeSelectionWindow, &NodeSelectionWindow::rejected, this, &AttachmentsWindow::OnCancelAttachmentNodeSelection); connect(mNodeSelectionWindow->GetNodeHierarchyWidget()->GetTreeWidget(), &QTreeWidget::itemSelectionChanged, this, &AttachmentsWindow::OnNodeChanged); connect(mEscapeShortcut, &QShortcut::activated, this, &AttachmentsWindow::OnEscapeButtonPressed); @@ -766,10 +766,10 @@ namespace EMStudio // called when the node selection is done - void AttachmentsWindow::OnAttachmentNodesSelected(MCore::Array selection) + void AttachmentsWindow::OnAttachmentNodesSelected(AZStd::vector selection) { // check if selection is valid - if (selection.GetLength() != 1) + if (selection.size() != 1) { MCore::LogDebug("No valid attachment selected."); return; diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/Attachments/AttachmentsWindow.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/Attachments/AttachmentsWindow.h index dd00ae6cb0..b3bd45fb22 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/Attachments/AttachmentsWindow.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/Attachments/AttachmentsWindow.h @@ -78,7 +78,7 @@ namespace EMStudio void OnDroppedAttachmentsActors(); void OnDroppedDeformableActors(); void OnVisibilityChanged(int visibility); - void OnAttachmentNodesSelected(MCore::Array selection); + void OnAttachmentNodesSelected(AZStd::vector selection); void OnCancelAttachmentNodeSelection(); void OnEscapeButtonPressed(); void OnUpdateButtonsEnabled(); diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/LogWindow/LogWindowCallback.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/LogWindow/LogWindowCallback.cpp index b4bef2faea..51c7e1d8de 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/LogWindow/LogWindowCallback.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/LogWindow/LogWindowCallback.cpp @@ -6,6 +6,7 @@ * */ +#include #include "LogWindowCallback.h" #include #include @@ -289,22 +290,22 @@ namespace EMStudio } // filter the items - MCore::Array rowIndices; - rowIndices.Reserve(numSelectedItems); + AZStd::vector rowIndices; + rowIndices.reserve(numSelectedItems); for (uint32 i = 0; i < numSelectedItems; ++i) { const uint32 rowIndex = items[i]->row(); - if (rowIndices.Find(rowIndex) == MCORE_INVALIDINDEX32) + if (AZStd::find(begin(rowIndices), end(rowIndices), rowIndex) == end(rowIndices)) { - rowIndices.Add(rowIndex); + rowIndices.emplace_back(rowIndex); } } // sort the array to copy the item in order - rowIndices.Sort(); + AZStd::sort(begin(rowIndices), end(rowIndices)); // get the number of selected rows - const uint32 numSelectedRows = rowIndices.GetLength(); + const uint32 numSelectedRows = rowIndices.size(); // genereate the clipboard text QString clipboardText; diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionSetsWindow/MotionSetManagementWindow.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionSetsWindow/MotionSetManagementWindow.cpp index 53b60c715f..441c9555a7 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionSetsWindow/MotionSetManagementWindow.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionSetsWindow/MotionSetManagementWindow.cpp @@ -33,7 +33,7 @@ namespace EMStudio { - MotionSetManagementRemoveMotionsFailedWindow::MotionSetManagementRemoveMotionsFailedWindow(QWidget* parent, const MCore::Array& motions) + MotionSetManagementRemoveMotionsFailedWindow::MotionSetManagementRemoveMotionsFailedWindow(QWidget* parent, const AZStd::vector& motions) : QDialog(parent) { // set the window title @@ -70,7 +70,7 @@ namespace EMStudio tableWidget->verticalHeader()->setVisible(false); // set the number of rows - const uint32 numMotions = motions.GetLength(); + const uint32 numMotions = motions.size(); tableWidget->setRowCount(numMotions); // add each motion in the table diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionSetsWindow/MotionSetManagementWindow.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionSetsWindow/MotionSetManagementWindow.h index f5b354c5a4..368f5bd9c7 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionSetsWindow/MotionSetManagementWindow.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionSetsWindow/MotionSetManagementWindow.h @@ -43,7 +43,7 @@ namespace EMStudio MCORE_MEMORYOBJECTCATEGORY(MotionSetManagementRemoveMotionsFailedWindow, MCore::MCORE_DEFAULT_ALIGNMENT, MEMCATEGORY_STANDARDPLUGINS); public: - MotionSetManagementRemoveMotionsFailedWindow(QWidget* parent, const MCore::Array& motions); + MotionSetManagementRemoveMotionsFailedWindow(QWidget* parent, const AZStd::vector& motions); }; diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionWindow/MotionExtractionWindow.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionWindow/MotionExtractionWindow.cpp index 9910384133..ac284a5777 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionWindow/MotionExtractionWindow.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionWindow/MotionExtractionWindow.cpp @@ -130,7 +130,7 @@ namespace EMStudio // create the node selection windows mMotionExtractionNodeSelectionWindow = new NodeSelectionWindow(this, true); - connect(mMotionExtractionNodeSelectionWindow->GetNodeHierarchyWidget(), static_cast)>(&NodeHierarchyWidget::OnSelectionDone), this, &MotionExtractionWindow::OnMotionExtractionNodeSelected); + connect(mMotionExtractionNodeSelectionWindow->GetNodeHierarchyWidget(), &NodeHierarchyWidget::OnSelectionDone, this, &MotionExtractionWindow::OnMotionExtractionNodeSelected); // set some layout for our window mMainVerticalLayout = new QVBoxLayout(); @@ -393,7 +393,7 @@ namespace EMStudio } - void MotionExtractionWindow::OnMotionExtractionNodeSelected(MCore::Array selection) + void MotionExtractionWindow::OnMotionExtractionNodeSelected(AZStd::vector selection) { // get the selected node name uint32 actorID; diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionWindow/MotionExtractionWindow.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionWindow/MotionExtractionWindow.h index efe89c49dc..cb7371a74d 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionWindow/MotionExtractionWindow.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/MotionWindow/MotionExtractionWindow.h @@ -53,7 +53,7 @@ namespace EMStudio void OnMotionExtractionFlagsUpdated(); void OnSelectMotionExtractionNode(); - void OnMotionExtractionNodeSelected(MCore::Array selection); + void OnMotionExtractionNodeSelected(AZStd::vector selection); private: // callbacks diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeGroups/NodeGroupWidget.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeGroups/NodeGroupWidget.cpp index 39ee1c4f5b..481718ab66 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeGroups/NodeGroupWidget.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeGroups/NodeGroupWidget.cpp @@ -9,6 +9,7 @@ // inlude required headers #include "NodeGroupWidget.h" #include "../../../../EMStudioSDK/Source/EMStudioManager.h" +#include "AzCore/std/iterator.h" #include #include @@ -127,11 +128,8 @@ namespace EMStudio connect(mAddNodesButton, &QPushButton::clicked, this, &NodeGroupWidget::SelectNodesButtonPressed); connect(mRemoveNodesButton, &QPushButton::clicked, this, &NodeGroupWidget::RemoveNodesButtonPressed); connect(mNodeTable, &QTableWidget::itemSelectionChanged, this, &NodeGroupWidget::OnItemSelectionChanged); - //connect( mEnabledOnDefaultCheckbox, SIGNAL(clicked()), this, SLOT(EnabledOnDefaultChanged()) ); - //connect( mNodeGroupNameEdit, SIGNAL(editingFinished()), this, SLOT(NodeGroupNameEditingFinished()) ); - //connect( mNodeGroupNameEdit, SIGNAL(textChanged(QString)), this, SLOT(NodeGroupNameEditChanged(QString)) ); - connect(mNodeSelectionWindow->GetNodeHierarchyWidget(), static_cast)>(&NodeHierarchyWidget::OnSelectionDone), this, &NodeGroupWidget::NodeSelectionFinished); - connect(mNodeSelectionWindow->GetNodeHierarchyWidget(), static_cast)>(&NodeHierarchyWidget::OnDoubleClicked), this, &NodeGroupWidget::NodeSelectionFinished); + connect(mNodeSelectionWindow->GetNodeHierarchyWidget(), &NodeHierarchyWidget::OnSelectionDone, this, &NodeGroupWidget::NodeSelectionFinished); + connect(mNodeSelectionWindow->GetNodeHierarchyWidget(), &NodeHierarchyWidget::OnDoubleClicked, this, &NodeGroupWidget::NodeSelectionFinished); } @@ -334,21 +332,21 @@ namespace EMStudio // add / select nodes - void NodeGroupWidget::NodeSelectionFinished(MCore::Array selectionList) + void NodeGroupWidget::NodeSelectionFinished(AZStd::vector selectionList) { // return if no nodes are selected - if (selectionList.GetLength() == 0) + if (selectionList.size() == 0) { return; } // generate node list string AZStd::vector nodeList; - const uint32 selectionListSize = selectionList.GetLength(); - for (uint32 i = 0; i < selectionListSize; ++i) + nodeList.reserve(selectionList.size()); + AZStd::transform(begin(selectionList), end(selectionList), AZStd::back_inserter(nodeList), [](const auto& item) { - nodeList.emplace_back(selectionList[i].GetNodeName()); - } + return item.GetNodeName(); + }); AZStd::string outResult; auto* command = aznew CommandSystem::CommandAdjustNodeGroup( diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeGroups/NodeGroupWidget.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeGroups/NodeGroupWidget.h index 2b4cad06de..f128fd8082 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeGroups/NodeGroupWidget.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeGroups/NodeGroupWidget.h @@ -45,7 +45,7 @@ namespace EMStudio public slots: void SelectNodesButtonPressed(); void RemoveNodesButtonPressed(); - void NodeSelectionFinished(MCore::Array selectionList); + void NodeSelectionFinished(AZStd::vector selectionList); void OnItemSelectionChanged(); private: diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeWindow/NodeWindowPlugin.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeWindow/NodeWindowPlugin.cpp index 0c1778aa23..3d7e44dac3 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeWindow/NodeWindowPlugin.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/NodeWindow/NodeWindowPlugin.cpp @@ -292,7 +292,7 @@ namespace EMStudio m_visibleNodeIndices.reserve(numNodes); // extract the bones from the actor - MCore::Array boneList; + AZStd::vector boneList; actor->ExtractBoneList(actorInstance->GetLODLevel(), &boneList); // iterate through all nodes and check if the node is visible @@ -308,7 +308,7 @@ namespace EMStudio const uint32 nodeIndex = node->GetNodeIndex(); EMotionFX::Mesh* mesh = actor->GetMesh(actorInstance->GetLODLevel(), nodeIndex); const bool isMeshNode = (mesh); - const bool isBone = (boneList.Find(nodeIndex) != MCORE_INVALIDINDEX32); + const bool isBone = (AZStd::find(begin(boneList), end(boneList), nodeIndex) != end(boneList)); const bool isNode = (isMeshNode == false && isBone == false); if (((showMeshes && isMeshNode) || diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/SceneManager/ActorPropertiesWindow.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/SceneManager/ActorPropertiesWindow.cpp index 04fbc9e412..cc5811b1f7 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/SceneManager/ActorPropertiesWindow.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/SceneManager/ActorPropertiesWindow.cpp @@ -215,30 +215,6 @@ namespace EMStudio mNameEdit->setText(mActor->GetName()); } - void ActorPropertiesWindow::GetNodeName(const MCore::Array& selection, AZStd::string* outNodeName, uint32* outActorID) - { - outNodeName->clear(); - *outActorID = MCORE_INVALIDINDEX32; - - if (selection.GetLength() != 1 || selection[0].GetNodeNameString().empty()) - { - AZ_Warning("EMotionFX", false, "Cannot adjust motion extraction node. No valid node selected."); - return; - } - - const uint32 actorInstanceID = selection[0].mActorInstanceID; - const char* nodeName = selection[0].GetNodeName(); - EMotionFX::ActorInstance* actorInstance = EMotionFX::GetActorManager().FindActorInstanceByID(actorInstanceID); - if (actorInstance == nullptr) - { - return; - } - - EMotionFX::Actor* actor = actorInstance->GetActor(); - *outActorID = actor->GetID(); - *outNodeName = nodeName; - } - void ActorPropertiesWindow::GetNodeName(const AZStd::vector& joints, AZStd::string* outNodeName, uint32* outActorID) { outNodeName->clear(); diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/SceneManager/ActorPropertiesWindow.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/SceneManager/ActorPropertiesWindow.h index d969a12148..67568d80b0 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/SceneManager/ActorPropertiesWindow.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/SceneManager/ActorPropertiesWindow.h @@ -45,7 +45,6 @@ namespace EMStudio void Init(); // helper functions - static void GetNodeName(const MCore::Array& selection, AZStd::string* outNodeName, uint32* outActorID); static void GetNodeName(const AZStd::vector& joints, AZStd::string* outNodeName, uint32* outActorID); public slots: diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/SceneManager/MirrorSetupWindow.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/SceneManager/MirrorSetupWindow.cpp index 6260e68284..271f277ed1 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/SceneManager/MirrorSetupWindow.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/SceneManager/MirrorSetupWindow.cpp @@ -525,7 +525,7 @@ namespace EMStudio typeItem->setIcon(*mMeshIcon); } else - if (mCurrentBoneList.Contains(node->GetNodeIndex())) + if (AZStd::find(begin(mCurrentBoneList), end(mCurrentBoneList), node->GetNodeIndex()) != end(mCurrentBoneList)) { typeItem->setIcon(*mBoneIcon); } diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/SceneManager/MirrorSetupWindow.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/SceneManager/MirrorSetupWindow.h index 47c321a1e7..13bb98334c 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/SceneManager/MirrorSetupWindow.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/SceneManager/MirrorSetupWindow.h @@ -12,7 +12,7 @@ #if !defined(Q_MOC_RUN) #include "../StandardPluginsConfig.h" #include -#include +#include #include #include #include @@ -79,7 +79,7 @@ namespace EMStudio QIcon* mNodeIcon; QIcon* mMeshIcon; QIcon* mMappedIcon; - MCore::Array mCurrentBoneList; + AZStd::vector mCurrentBoneList; AZStd::vector mSourceBoneList; AZStd::vector mMap; diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TimeViewPlugin.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TimeViewPlugin.cpp index 04628a6343..e909e9ead3 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TimeViewPlugin.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TimeViewPlugin.cpp @@ -107,7 +107,7 @@ namespace EMStudio delete mZoomOutCursor; // get rid of the motion infos - const uint32 numMotionInfos = mMotionInfos.GetLength(); + const uint32 numMotionInfos = mMotionInfos.size(); for (uint32 i = 0; i < numMotionInfos; ++i) { delete mMotionInfos[i]; @@ -285,7 +285,7 @@ namespace EMStudio // add a new track void TimeViewPlugin::AddTrack(TimeTrack* track) { - mTracks.Add(track); + mTracks.emplace_back(track); SetRedrawFlag(); } @@ -294,20 +294,20 @@ namespace EMStudio void TimeViewPlugin::RemoveAllTracks() { // get the number of time tracks and iterate through them - const uint32 numTracks = mTracks.GetLength(); + const uint32 numTracks = mTracks.size(); for (uint32 i = 0; i < numTracks; ++i) { delete mTracks[i]; } - mTracks.Clear(); + mTracks.clear(); SetRedrawFlag(); } TimeTrack* TimeViewPlugin::FindTrackByElement(TimeTrackElement* element) const { // get the number of time tracks and iterate through them - const uint32 numTracks = mTracks.GetLength(); + const uint32 numTracks = mTracks.size(); for (uint32 i = 0; i < numTracks; ++i) { TimeTrack* timeTrack = mTracks[i]; @@ -328,7 +328,7 @@ namespace EMStudio AZ::Outcome TimeViewPlugin::FindTrackIndex(const TimeTrack* track) const { - const AZ::u32 numTracks = mTracks.GetLength(); + const AZ::u32 numTracks = mTracks.size(); for (AZ::u32 i = 0; i < numTracks; ++i) { if (mTracks[i] == track) @@ -472,7 +472,7 @@ namespace EMStudio TimeTrackElement* TimeViewPlugin::GetElementAt(int32 x, int32 y) { // for all tracks - const uint32 numTracks = mTracks.GetLength(); + const uint32 numTracks = mTracks.size(); for (uint32 i = 0; i < numTracks; ++i) { // check if the absolute pixel is inside @@ -491,7 +491,7 @@ namespace EMStudio TimeTrack* TimeViewPlugin::GetTrackAt(int32 y) { // for all tracks - const uint32 numTracks = mTracks.GetLength(); + const uint32 numTracks = mTracks.size(); for (uint32 i = 0; i < numTracks; ++i) { // check if the absolute pixel is inside @@ -509,7 +509,7 @@ namespace EMStudio void TimeViewPlugin::UnselectAllElements() { // for all tracks - const uint32 numTracks = mTracks.GetLength(); + const uint32 numTracks = mTracks.size(); for (uint32 t = 0; t < numTracks; ++t) { TimeTrack* track = mTracks[t]; @@ -603,7 +603,7 @@ namespace EMStudio } // for all tracks - const uint32 numTracks = mTracks.GetLength(); + const uint32 numTracks = mTracks.size(); for (uint32 t = 0; t < numTracks; ++t) { TimeTrack* track = mTracks[t]; @@ -646,7 +646,7 @@ namespace EMStudio void TimeViewPlugin::RenderElementTimeHandles(QPainter& painter, uint32 dataWindowHeight, const QPen& pen) { // for all tracks - const uint32 numTracks = mTracks.GetLength(); + const uint32 numTracks = mTracks.size(); for (uint32 t = 0; t < numTracks; ++t) { TimeTrack* track = mTracks[t]; @@ -682,7 +682,7 @@ namespace EMStudio void TimeViewPlugin::DisableAllToolTips() { // for all tracks - const uint32 numTracks = mTracks.GetLength(); + const uint32 numTracks = mTracks.size(); for (uint32 t = 0; t < numTracks; ++t) { TimeTrack* track = mTracks[t]; @@ -703,7 +703,7 @@ namespace EMStudio bool TimeViewPlugin::FindResizePoint(int32 x, int32 y, TimeTrackElement** outElement, uint32* outID) { // for all tracks - const uint32 numTracks = mTracks.GetLength(); + const uint32 numTracks = mTracks.size(); for (uint32 t = 0; t < numTracks; ++t) { TimeTrack* track = mTracks[t]; @@ -1179,7 +1179,7 @@ namespace EMStudio void TimeViewPlugin::UpdateSelection() { - mSelectedEvents.Clear(false); + mSelectedEvents.clear(); if (!mMotion) { return; @@ -1221,7 +1221,7 @@ namespace EMStudio selectionItem.mMotion = mMotion; selectionItem.mTrackNr = trackNr.GetValue(); selectionItem.mEventNr = element->GetElementNumber(); - mSelectedEvents.Add(selectionItem); + mSelectedEvents.emplace_back(selectionItem); } } } @@ -1298,7 +1298,7 @@ namespace EMStudio } // Select the element if in mSelectedEvents. - const AZ::u32 numSelectedEvents = mSelectedEvents.GetLength(); + const AZ::u32 numSelectedEvents = mSelectedEvents.size(); for (AZ::u32 selectedEventIndex = 0; selectedEventIndex < numSelectedEvents; ++selectedEventIndex) { const EventSelectionItem& selectionItem = mSelectedEvents[selectedEventIndex]; @@ -1447,7 +1447,7 @@ namespace EMStudio // find the motion info for the given motion id TimeViewPlugin::MotionInfo* TimeViewPlugin::FindMotionInfo(uint32 motionID) { - const uint32 numMotionInfos = mMotionInfos.GetLength(); + const uint32 numMotionInfos = mMotionInfos.size(); for (uint32 i = 0; i < numMotionInfos; ++i) { MotionInfo* motionInfo = mMotionInfos[i]; @@ -1462,12 +1462,12 @@ namespace EMStudio MotionInfo* motionInfo = new MotionInfo(); motionInfo->mMotionID = motionID; motionInfo->mInitialized = false; - mMotionInfos.Add(motionInfo); + mMotionInfos.emplace_back(motionInfo); return motionInfo; } - void TimeViewPlugin::Select(const MCore::Array& selection) + void TimeViewPlugin::Select(const AZStd::vector& selection) { uint32 i; @@ -1488,7 +1488,7 @@ namespace EMStudio } } - const uint32 numSelectedEvents = selection.GetLength(); + const uint32 numSelectedEvents = selection.size(); for (i = 0; i < numSelectedEvents; ++i) { const EventSelectionItem* selectionItem = &selection[i]; @@ -1643,7 +1643,7 @@ namespace EMStudio // get the motion event table // MotionEventTable& eventTable = mMotion->GetEventTable(); - MCore::Array eventNumbers; + AZStd::vector eventNumbers; // get the number of tracks in the time view and iterate through them const uint32 numTracks = GetNumTracks(); @@ -1656,7 +1656,7 @@ namespace EMStudio continue; } - eventNumbers.Clear(false); + eventNumbers.clear(); // get the number of elements in the track and iterate through them const uint32 numTrackElements = track->GetNumElements(); @@ -1666,7 +1666,7 @@ namespace EMStudio if (element->GetIsSelected() && element->GetIsVisible()) { - eventNumbers.Add(j); + eventNumbers.emplace_back(j); } } @@ -1702,7 +1702,7 @@ namespace EMStudio // get the motion event table // MotionEventTable& eventTable = mMotion->GetEventTable(); - MCore::Array eventNumbers; + AZStd::vector eventNumbers; // get the number of tracks in the time view and iterate through them const uint32 numTracks = GetNumTracks(); @@ -1715,7 +1715,7 @@ namespace EMStudio continue; } - eventNumbers.Clear(false); + eventNumbers.clear(); // get the number of elements in the track and iterate through them const uint32 numTrackElements = track->GetNumElements(); @@ -1724,7 +1724,7 @@ namespace EMStudio TimeTrackElement* element = track->GetElement(j); if (element->GetIsVisible()) { - eventNumbers.Add(j); + eventNumbers.emplace_back(j); } } @@ -1928,7 +1928,7 @@ namespace EMStudio { if (mMotion) { - const uint32 numTracks = mTracks.GetLength(); + const uint32 numTracks = mTracks.size(); for (uint32 i = 0; i < numTracks; ++i) { TimeTrack* track = mTracks[i]; diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TimeViewPlugin.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TimeViewPlugin.h index db3a7dec8a..386117d3a3 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TimeViewPlugin.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TimeViewPlugin.h @@ -36,8 +36,6 @@ namespace EMStudio struct EventSelectionItem { - MCORE_MEMORYOBJECTCATEGORY(EventSelectionItem, MCore::MCORE_DEFAULT_ALIGNMENT, MEMCATEGORY_STANDARDPLUGINS); - EMotionFX::MotionEvent* GetMotionEvent(); EMotionFX::MotionEventTrack* GetEventTrack(); @@ -118,7 +116,7 @@ namespace EMStudio void AddTrack(TimeTrack* track); void RemoveAllTracks(); TimeTrack* GetTrack(uint32 index) { return mTracks[index]; } - uint32 GetNumTracks() const { return mTracks.GetLength(); } + size_t GetNumTracks() const { return mTracks.size(); } AZ::Outcome FindTrackIndex(const TimeTrack* track) const; TimeTrack* FindTrackByElement(TimeTrackElement* element) const; @@ -153,10 +151,10 @@ namespace EMStudio void ZoomRect(const QRect& rect); - uint32 GetNumSelectedEvents() { return mSelectedEvents.GetLength(); } + size_t GetNumSelectedEvents() { return mSelectedEvents.size(); } EventSelectionItem GetSelectedEvent(uint32 index) const { return mSelectedEvents[index]; } - void Select(const MCore::Array& selection); + void Select(const AZStd::vector& selection); MCORE_INLINE EMotionFX::Motion* GetMotion() const { return mMotion; } void SetRedrawFlag(); @@ -220,7 +218,7 @@ namespace EMStudio MotionEventsPlugin* mMotionEventsPlugin; MotionListWindow* mMotionListWindow; MotionSetsWindowPlugin* m_motionSetPlugin; - MCore::Array mSelectedEvents; + AZStd::vector mSelectedEvents; EMotionFX::Recorder::ActorInstanceData* mActorInstanceData; EMotionFX::Recorder::NodeHistoryItem* mNodeHistoryItem; @@ -238,8 +236,8 @@ namespace EMStudio MotionInfo* FindMotionInfo(uint32 motionID); void UpdateCurrentMotionInfo(); - MCore::Array mMotionInfos; - MCore::Array mTracks; + AZStd::vector mMotionInfos; + AZStd::vector mTracks; double mPixelsPerSecond; // pixels per second double mScrollX; // horizontal scroll offset diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TrackDataHeaderWidget.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TrackDataHeaderWidget.h index 6b932dca57..30fa3a741e 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TrackDataHeaderWidget.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TrackDataHeaderWidget.h @@ -10,7 +10,7 @@ #if !defined(Q_MOC_RUN) #include -#include +#include #include "../StandardPluginsConfig.h" #include #include diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TrackDataWidget.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TrackDataWidget.cpp index b1bad30b28..fc60867864 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TrackDataWidget.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TrackDataWidget.cpp @@ -341,7 +341,7 @@ namespace EMStudio painter.setRenderHint(QPainter::Antialiasing, true); // get the history items shortcut - const MCore::Array& historyItems = actorInstanceData->mNodeHistoryItems; + const AZStd::vector& historyItems = actorInstanceData->mNodeHistoryItems; int32 windowWidth = geometry().width(); RecorderGroup* recorderGroup = mPlugin->GetTimeViewToolBar()->GetRecorderGroup(); @@ -369,7 +369,7 @@ namespace EMStudio const uint32 graphContentsCode = mPlugin->mTrackHeaderWidget->mGraphContentsComboBox->currentIndex(); - const uint32 numItems = historyItems.GetLength(); + const uint32 numItems = historyItems.size(); for (uint32 i = 0; i < numItems; ++i) { EMotionFX::Recorder::NodeHistoryItem* curItem = historyItems[i]; @@ -456,7 +456,7 @@ namespace EMStudio // display the values and names uint32 offset = 0; - const uint32 numActiveItems = mActiveItems.GetLength(); + const uint32 numActiveItems = mActiveItems.size(); for (uint32 i = 0; i < numActiveItems; ++i) { EMotionFX::Recorder::NodeHistoryItem* curItem = mActiveItems[i].mNodeHistoryItem; @@ -516,7 +516,7 @@ namespace EMStudio } // get the history items shortcut - const MCore::Array& historyItems = actorInstanceData->mEventHistoryItems; + const AZStd::vector& historyItems = actorInstanceData->mEventHistoryItems; QRect clipRect = rect; clipRect.setRight(aznumeric_cast(mPlugin->TimeToPixel(animationLength))); @@ -528,7 +528,7 @@ namespace EMStudio const float tickHeight = 16; QPointF tickPoints[6]; - const uint32 numItems = historyItems.GetLength(); + const uint32 numItems = historyItems.size(); for (uint32 i = 0; i < numItems; ++i) { EMotionFX::Recorder::EventHistoryItem* curItem = historyItems[i]; @@ -620,7 +620,7 @@ namespace EMStudio } // get the history items shortcut - const MCore::Array& historyItems = actorInstanceData->mNodeHistoryItems; + const AZStd::vector& historyItems = actorInstanceData->mNodeHistoryItems; int32 windowWidth = geometry().width(); // calculate the remapped track list, based on sorted global weight, with the most influencing track on top @@ -639,7 +639,7 @@ namespace EMStudio // for all history items QRectF itemRect; - const uint32 numItems = historyItems.GetLength(); + const uint32 numItems = historyItems.size(); for (uint32 i = 0; i < numItems; ++i) { EMotionFX::Recorder::NodeHistoryItem* curItem = historyItems[i]; @@ -923,7 +923,7 @@ namespace EMStudio visibleEndTime = mPlugin->PixelToTime(width); //mPlugin->CalcTime( width, &visibleEndTime, nullptr, nullptr, nullptr, nullptr ); // for all tracks - const uint32 numTracks = mPlugin->mTracks.GetLength(); + const uint32 numTracks = mPlugin->mTracks.size(); for (uint32 i = 0; i < numTracks; ++i) { TimeTrack* track = mPlugin->mTracks[i]; @@ -1916,7 +1916,7 @@ namespace EMStudio return; } - MCore::Array eventNumbers; + AZStd::vector eventNumbers; // calculate the number of selected events const uint32 numEvents = timeTrack->GetNumElements(); @@ -1927,7 +1927,7 @@ namespace EMStudio // increase the counter in case the element is selected if (element->GetIsSelected()) { - eventNumbers.Add(i); + eventNumbers.emplace_back(i); } } @@ -1950,13 +1950,13 @@ namespace EMStudio return; } - MCore::Array eventNumbers; + AZStd::vector eventNumbers; // construct an array with the event numbers const uint32 numEvents = timeTrack->GetNumElements(); for (uint32 i = 0; i < numEvents; ++i) { - eventNumbers.Add(i); + eventNumbers.emplace_back(i); } // remove the motion events @@ -2315,7 +2315,7 @@ namespace EMStudio // if we recorded node history mNodeHistoryRect = QRect(); - if (actorInstanceData && actorInstanceData->mNodeHistoryItems.GetLength() > 0) + if (actorInstanceData && actorInstanceData->mNodeHistoryItems.size() > 0) { const uint32 height = (recorder.CalcMaxNodeHistoryTrackIndex(*actorInstanceData) + 1) * (mNodeHistoryItemHeight + 3) + mNodeRectsStartHeight; mNodeHistoryRect.setTop(mNodeRectsStartHeight); @@ -2325,7 +2325,7 @@ namespace EMStudio } mEventHistoryTotalHeight = 0; - if (actorInstanceData && actorInstanceData->mEventHistoryItems.GetLength() > 0) + if (actorInstanceData && actorInstanceData->mEventHistoryItems.size() > 0) { mEventHistoryTotalHeight = (recorder.CalcMaxEventHistoryTrackIndex(*actorInstanceData) + 1) * 20; } @@ -2353,10 +2353,10 @@ namespace EMStudio // get the history items shortcut - const MCore::Array& historyItems = actorInstanceData->mNodeHistoryItems; + const AZStd::vector& historyItems = actorInstanceData->mNodeHistoryItems; QRect rect; - const uint32 numItems = historyItems.GetLength(); + const uint32 numItems = historyItems.size(); for (uint32 i = 0; i < numItems; ++i) { EMotionFX::Recorder::NodeHistoryItem* curItem = historyItems[i]; @@ -2462,20 +2462,20 @@ namespace EMStudio EMotionFX::AnimGraphNode* node = animGraph->RecursiveFindNodeById(item->mNodeId); if (node) { - MCore::Array nodePath; + AZStd::vector nodePath; EMotionFX::AnimGraphNode* curNode = node->GetParentNode(); while (curNode) { - nodePath.Insert(0, curNode); + nodePath.emplace(0, curNode); curNode = curNode->GetParentNode(); } AZStd::string nodePathString; nodePathString.reserve(256); - for (uint32 i = 0; i < nodePath.GetLength(); ++i) + for (uint32 i = 0; i < nodePath.size(); ++i) { nodePathString += nodePath[i]->GetName(); - if (i != nodePath.GetLength() - 1) + if (i != nodePath.size() - 1) { nodePathString += " > "; } @@ -2551,11 +2551,11 @@ namespace EMStudio return nullptr; } - const MCore::Array& historyItems = actorInstanceData->mEventHistoryItems; + const AZStd::vector& historyItems = actorInstanceData->mEventHistoryItems; const float tickHalfWidth = 7; const float tickHeight = 16; - const uint32 numItems = historyItems.GetLength(); + const uint32 numItems = historyItems.size(); for (uint32 i = 0; i < numItems; ++i) { EMotionFX::Recorder::EventHistoryItem* curItem = historyItems[i]; @@ -2648,20 +2648,20 @@ namespace EMStudio outString += AZStd::string::format("

Emitted By: 

"); outString += AZStd::string::format("

%s

", node->GetName()); - MCore::Array nodePath; + AZStd::vector nodePath; EMotionFX::AnimGraphNode* curNode = node->GetParentNode(); while (curNode) { - nodePath.Insert(0, curNode); + nodePath.emplace(0, curNode); curNode = curNode->GetParentNode(); } AZStd::string nodePathString; nodePathString.reserve(256); - for (uint32 i = 0; i < nodePath.GetLength(); ++i) + for (uint32 i = 0; i < nodePath.size(); ++i) { nodePathString += nodePath[i]->GetName(); - if (i != nodePath.GetLength() - 1) + if (i != nodePath.size() - 1) { nodePathString += " > "; } diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TrackDataWidget.h b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TrackDataWidget.h index 75968d1995..2709927254 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TrackDataWidget.h +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TrackDataWidget.h @@ -10,7 +10,7 @@ #if !defined(Q_MOC_RUN) #include -#include +#include #include "../StandardPluginsConfig.h" #include #include @@ -136,8 +136,8 @@ namespace EMStudio uint32 mNodeRectsStartHeight; double mOldCurrentTime; - MCore::Array mActiveItems; - MCore::Array mTrackRemap; + AZStd::vector mActiveItems; + AZStd::vector mTrackRemap; // copy and paste struct CopyElement diff --git a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TrackHeaderWidget.cpp b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TrackHeaderWidget.cpp index 963d188aa6..363a278b8e 100644 --- a/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TrackHeaderWidget.cpp +++ b/Gems/EMotionFX/Code/EMotionFX/Tools/EMotionStudio/Plugins/StandardPlugins/Source/TimeView/TrackHeaderWidget.cpp @@ -173,7 +173,7 @@ namespace EMStudio setVisible(true); mStackWidget->setVisible(false); - const uint32 numTracks = mPlugin->mTracks.GetLength(); + const uint32 numTracks = mPlugin->mTracks.size(); if (numTracks == 0) { return; diff --git a/Gems/EMotionFX/Code/MCore/Source/Array.h b/Gems/EMotionFX/Code/MCore/Source/Array.h deleted file mode 100644 index ef2f58119c..0000000000 --- a/Gems/EMotionFX/Code/MCore/Source/Array.h +++ /dev/null @@ -1,799 +0,0 @@ -/* - * 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 - * - */ - -#pragma once - -#include "StandardHeaders.h" -#include "MCoreSystem.h" -#include "Algorithms.h" -#include "MemoryManager.h" - -#include - -namespace MCore -{ - /** - * Dynamic array template. - * This array template allows dynamic sizing. It also stores the memory category of the data. - * It can theoretically store 4294967296 items (maximum uint32 value). - */ - template - class Array - { - public: - /** - * The memory block ID, used inside the memory manager. - * This will make all arrays remain in the same memory blocks, which is more efficient in a lot of cases. - * However, array data can still remain in other blocks. - */ - enum - { - MEMORYBLOCK_ID = 2 - }; - - /** - * Default constructor. - * Initializes the array so it's empty and has no memory allocated. - */ - MCORE_INLINE Array() - : mData(nullptr) - , mLength(0) - , mMaxLength(0) - , mMemCategory(MCORE_MEMCATEGORY_ARRAY) {} - - /** - * Constructor which creates a given number of elements. - * @param elems The element data. - * @param num The number of elements in 'elems'. - * @param memCategory The memory category the array is in. - */ - MCORE_INLINE explicit Array(T* elems, uint32 num, uint16 memCategory = MCORE_MEMCATEGORY_ARRAY) - : mLength(num) - , mMaxLength(AllocSize(num)) - , mMemCategory(memCategory) - { - mData = (T*)MCore::Allocate(mMaxLength * sizeof(T), mMemCategory, MEMORYBLOCK_ID, MCORE_FILE, MCORE_LINE); - for (uint32 i = 0; i < mLength; ++i) - { - Construct(i, elems[i]); - } - } - - /** - * Constructor which initializes the length of the array on a given number. - * @param initSize The number of ellements to allocate space for. - * @param memCategory The memory category the array is in. - */ - MCORE_INLINE explicit Array(uint32 initSize, uint16 memCategory = MCORE_MEMCATEGORY_ARRAY) - : mData(nullptr) - , mLength(initSize) - , mMaxLength(initSize) - , mMemCategory(memCategory) - { - if (mMaxLength > 0) - { - mData = (T*)MCore::Allocate(mMaxLength * sizeof(T), mMemCategory, MEMORYBLOCK_ID, MCORE_FILE, MCORE_LINE); - for (uint32 i = 0; i < mLength; ++i) - { - Construct(i); - } - } - } - - /** - * Copy constructor. - * @param other The other array to copy the data from. - */ - Array(const Array& other) - : mData(nullptr) - , mLength(0) - , mMaxLength(0) - , mMemCategory(MCORE_MEMCATEGORY_ARRAY) { *this = other; } - - /** - * Move constructor. - * @param other The array to move the data from. - */ - Array(Array&& other) { mData = other.mData; mLength = other.mLength; mMaxLength = other.mMaxLength; mMemCategory = other.mMemCategory; other.mData = nullptr; other.mLength = 0; other.mMaxLength = 0; } - - /** - * Destructor. Deletes all entry data. - * However, if you store pointers to objects, these objects won't be deleted.
- * Example:
- *
-         * Array< Object* > data;
-         * for (uint32 i=0; i<10; i++)
-         *    data.Add( new Object() );
-         * 
- * Now when the array 'data' will be destructed, it will NOT free up the memory of the integers which you allocated by hand, using new. - * In order to free up this memory, you can do this: - *
-         * for (uint32 i=0; i
-         */
-        ~Array()
-        {
-            for (uint32 i = 0; i < mLength; ++i)
-            {
-                Destruct(i);
-            }
-            if (mData)
-            {
-                MCore::Free(mData);
-            }
-        }
-
-        /**
-         * Get the memory category ID where allocations made by this array belong to.
-         * On default the memory category is 0, which means unknown.
-         * @result The memory category ID.
-         */
-        MCORE_INLINE uint16 GetMemoryCategory() const                           { return mMemCategory; }
-
-        /**
-         * Set the memory category ID, where allocations made by this array will belong to.
-         * On default, after construction of the array, the category ID is 0, which means it is unknown.
-         * @param categoryID The memory category ID where this arrays allocations belong to.
-         */
-        MCORE_INLINE void SetMemoryCategory(uint16 categoryID)                  { mMemCategory = categoryID; }
-
-        /**
-         * Get a pointer to the first element.
-         * @result A pointer to the first element.
-         */
-        MCORE_INLINE T* GetPtr()                                                { return mData; }
-
-        /**
-         * Get a pointer to the first element.
-         * @result A pointer to the first element.
-         */
-        MCORE_INLINE T* GetPtr() const                                          { return mData; }
-
-        /**
-         * Get a given item/element.
-         * @param pos The item/element number.
-         * @result A reference to the element.
-         */
-        MCORE_INLINE T& GetItem(uint32 pos)                                     { return mData[pos]; }
-
-        /**
-         * Get the first element.
-         * @result A reference to the first element.
-         */
-        MCORE_INLINE T& GetFirst()                                              { return mData[0]; }
-
-        /**
-         * Get the last element.
-         * @result A reference to the last element.
-         */
-        MCORE_INLINE T& GetLast()                                               { return mData[mLength - 1]; }
-
-        /**
-         * Get a read-only pointer to the first element.
-         * @result A read-only pointer to the first element.
-         */
-        MCORE_INLINE const T* GetReadPtr() const                                { return mData; }
-
-        /**
-         * Get a read-only reference to a given element number.
-         * @param pos The element number.
-         * @result A read-only reference to the given element.
-         */
-        MCORE_INLINE const T& GetItem(uint32 pos) const                         { return mData[pos]; }
-
-        /**
-         * Get a read-only reference to the first element.
-         * @result A read-only reference to the first element.
-         */
-        MCORE_INLINE const T& GetFirst() const                                  { return mData[0]; }
-
-        /**
-         * Get a read-only reference to the last element.
-         * @result A read-only reference to the last element.
-         */
-        MCORE_INLINE const T& GetLast() const                                   { return mData[mLength - 1]; }
-
-        /**
-         * Check if the array is empty or not.
-         * @result Returns true when there are no elements in the array, otherwise false is returned.
-         */
-        MCORE_INLINE bool GetIsEmpty() const                                    { return (mLength == 0); }
-
-        /**
-         * Checks if the passed index is in the array's range.
-         * @param index The index to check.
-         * @return True if the passed index is valid, false if not.
-         */
-        MCORE_INLINE bool GetIsValidIndex(uint32 index) const                   { return (index < mLength); }
-
-        /**
-         * Get the number of elements in the array.
-         * @result The number of elements in the array.
-         */
-        MCORE_INLINE uint32 GetLength() const                                   { return mLength; }
-
-        /**
-         * Get the maximum number of elements. This is the number of elements there currently is space for to store.
-         * However, never use this to make for-loops to iterate through all elements. Use GetLength() instead for that.
-         * This purely has to do with pre-allocating, to reduce the number of reallocs.
-         * @result The maximum array length.
-         */
-        MCORE_INLINE uint32 GetMaxLength() const                                { return mMaxLength; }
-
-        /**
-         * Calculates the memory usage used by this array.
-         * @param includeMembers Include the class members in the calculation? (default=true).
-         * @result The number of bytes allocated by this array.
-         */
-        MCORE_INLINE uint32 CalcMemoryUsage(bool includeMembers = true) const
-        {
-            uint32 result = mMaxLength * sizeof(T);
-            if (includeMembers)
-            {
-                result += sizeof(MCore::Array);
-            }
-            return result;
-        }
-
-        /**
-         * Set a given element to a given value.
-         * @param pos The element number.
-         * @param value The value to store at that element number.
-         */
-        MCORE_INLINE void SetElem(uint32 pos, const T& value)                   { mData[pos] = value; }
-
-        /**
-         * Add a given element to the back of the array.
-         * @param x The element to add.
-         */
-        MCORE_INLINE void Add(const T& x)                                       { Grow(++mLength); Construct(mLength - 1, x); }
-
-        /**
-         * Add a given element to the back of the array, but without pre-allocation caching.
-         * @param x The element to add.
-         */
-        MCORE_INLINE void AddExact(const T& x)                                  { GrowExact(++mLength); Construct(mLength - 1, x); }
-
-        /**
-         * Add a given array to the back of this array.
-         * @param a The array to add.
-         */
-        MCORE_INLINE void Add(const Array& a)
-        {
-            uint32 l = mLength;
-            Grow(mLength + a.mLength);
-            for (uint32 i = 0; i < a.GetLength(); ++i)
-            {
-                Construct(l + i, a[i]);
-            }
-        }                                                                                                                                                                                   // TODO: a.GetLength() can be precaled before loop?
-
-        /**
-         * Add an empty (default constructed) element to the back of the array.
-         */
-        MCORE_INLINE void AddEmpty()                                            { Grow(++mLength); Construct(mLength - 1); }
-
-        /**
-         * Add an empty (default constructed) element to the back of the array, but without pre-allocation caching.
-         */
-        MCORE_INLINE void AddEmptyExact()                                       { GrowExact(++mLength); Construct(mLength - 1); }
-
-        /**
-         * Remove the first array element.
-         */
-        MCORE_INLINE void RemoveFirst()
-        {
-            if (mLength > 0)
-            {
-                Remove((uint32)0);
-            }
-        }
-
-        /**
-         * Remove the last array element.
-         */
-        MCORE_INLINE void RemoveLast()
-        {
-            if (mLength > 0)
-            {
-                Destruct(--mLength);
-            }
-        }
-
-        /**
-         * Insert an empty element (default constructed) at a given position in the array.
-         * @param pos The position to create the empty element.
-         */
-        MCORE_INLINE void Insert(uint32 pos)                                    { Grow(mLength + 1); MoveElements(pos + 1, pos, mLength - pos - 1); Construct(pos); }
-
-        /**
-         * Insert a given element at a given position in the array.
-         * @param pos The position to insert the empty element.
-         * @param x The element to store at this position.
-         */
-        MCORE_INLINE void Insert(uint32 pos, const T& x)                        { Grow(mLength + 1); MoveElements(pos + 1, pos, mLength - pos - 1); Construct(pos, x); }
-
-        /**
-         * Remove an element at a given position.
-         * @param pos The element number to remove.
-         */
-        MCORE_INLINE void Remove(uint32 pos)
-        {
-            AZ_Assert(pos < mLength, "Array index out of bounds");
-            Destruct(pos);
-            if (mLength > 1)
-            {
-                MoveElements(pos, pos + 1, mLength - pos - 1);
-            }
-            mLength--;
-        }
-
-        /**
-         * Remove a given number of elements starting at a given position in the array.
-         * @param pos The start element, so to start removing from.
-         * @param num The number of elements to remove from this position.
-         */
-        MCORE_INLINE void Remove(uint32 pos, uint32 num)
-        {
-            for (uint32 i = pos; i < pos + num; ++i)
-            {
-                Destruct(i);
-            }
-            MoveElements(pos, pos + num, mLength - pos - num);
-            mLength -= num;
-        }
-
-        /**
-         * Remove a given element with a given value.
-         * Only the first element with the given value will be removed.
-         * @param item The item/element to remove.
-         */
-        MCORE_INLINE bool RemoveByValue(const T& item)
-        {
-            const uint32 index = Find(item);
-            if (index == MCORE_INVALIDINDEX32)
-            {
-                return false;
-            }
-            Remove(index);
-            return true;
-        }
-
-        /**
-         * Remove a given element in the array and place the last element in the array at the created empty position.
-         * So if we have an array with the following characters : ABCDEFG
- * And we perform a SwapRemove(2), we will remove element C and place the last element (G) at the empty created position where C was located. - * So we will get this:
- * AB.DEFG [where . is empty, after we did the SwapRemove(2)]
- * ABGDEF [this is the result. G has been moved to the empty position]. - */ - MCORE_INLINE void SwapRemove(uint32 pos) - { - Destruct(pos); - if (pos != mLength - 1) - { - Construct(pos, mData[mLength - 1]); - Destruct(mLength - 1); - } - mLength--; - } // remove element at and place the last element of the array in that position - - /** - * Swap two elements. - * @param pos1 The first element number. - * @param pos2 The second element number. - */ - MCORE_INLINE void Swap(uint32 pos1, uint32 pos2) - { - if (pos1 != pos2) - { - MCore::Swap(GetItem(pos1), GetItem(pos2)); - } - } - - /** - * Clear the array contents. So GetLength() will return 0 after performing this method. - * @param clearMem If set to true (default) the allocated memory will also be released. If set to false, GetMaxLength() will still return the number of elements - * which the array contained before calling the Clear() method. - */ - MCORE_INLINE void Clear(bool clearMem = true) - { - for (uint32 i = 0; i < mLength; ++i) - { - Destruct(i); - } - mLength = 0; - if (clearMem) - { - Free(); - } - } - - /** - * Make sure the array has enough space to store a given number of elements. - * @param newLength The number of elements we want to make sure that will fit in the array. - */ - MCORE_INLINE void AssureSize(uint32 newLength) - { - if (mLength >= newLength) - { - return; - } - uint32 oldLen = mLength; - Grow(newLength); - for (uint32 i = oldLen; i < newLength; ++i) - { - Construct(i); - } - } - - /** - * Make sure this array has enough allocated storage to grow to a given number of elements elements without having to realloc. - * @param minLength The minimum length the array should have (actually the minimum maxLength, because this has no influence on what GetLength() will return). - */ - MCORE_INLINE void Reserve(uint32 minLength) - { - if (mMaxLength < minLength) - { - Realloc(minLength); - } - } - - /** - * The same as Reserve, except that this also can shrink the memory to the specified size if more has been allocated already. - * If the current length is larger than the specified minLength nothing will happen. - * @param minLength The minimum length the array should have. - */ - MCORE_INLINE void ReserveExact(uint32 minLength) - { - if (mLength > minLength) - { - return; - } - Realloc(minLength); - } - - /** - * Make the array as small as possible. So remove all extra pre-allocated data, so that the array consumes the least possible amount of memory. - */ - MCORE_INLINE void Shrink() - { - if (mLength == mMaxLength) - { - return; - } - Realloc(mLength); - } - - /** - * Check if the array contains a given element. - * @param x The element to check. - * @result Returns true when the array contains the element, otherwise false is returned. - */ - MCORE_INLINE bool Contains(const T& x) const { return (Find(x) != MCORE_INVALIDINDEX32); } - - /** - * Find the position of a given element. - * @param x The element to find. - * @result Returns the index in the array, ranging from [0 to GetLength()-1] when found, otherwise MCORE_INVALIDINDEX32 is returned. - */ - MCORE_INLINE uint32 Find(const T& x) const - { - for (uint32 i = 0; i < mLength; ++i) - { - if (mData[i] == x) - { - return i; - } - } - return MCORE_INVALIDINDEX32; - } - - - // sort function and standard sort function - typedef int32 (MCORE_CDECL * CmpFunc)(const T& itemA, const T& itemB); - static int32 MCORE_CDECL StdCmp(const T& itemA, const T& itemB) - { - if (itemA < itemB) - { - return -1; - } - else if (itemA == itemB) - { - return 0; - } - else - { - return 1; - } - } - static int32 MCORE_CDECL StdPtrObjCmp(const T& itemA, const T& itemB) - { - if (*itemA < *itemB) - { - return -1; - } - else if (*itemA == *itemB) - { - return 0; - } - else - { - return 1; - } - } - - /** - * Sort the complete array using a given sort function. - * @param cmp The sort function to use. - */ - MCORE_INLINE void Sort(CmpFunc cmp) { InnerSort(0, mLength - 1, cmp); } - - /** - * Sort a given part of the array using a given sort function. - * The default parameters are set so that it will sort the compelete array with a default compare function (which uses the < and > operators). - * The method will sort all elements between the given 'first' and 'last' element (first and last are also included in the sort). - * @param first The first element to start sorting. - * @param last The last element to sort (when set to MCORE_INVALIDINDEX32, GetLength()-1 will be used). - * @param cmp The compare function. - */ - MCORE_INLINE void Sort(uint32 first = 0, uint32 last = MCORE_INVALIDINDEX32, CmpFunc cmp = StdCmp) - { - if (last == MCORE_INVALIDINDEX32) - { - last = mLength - 1; - } - InnerSort(first, last, cmp); - } - - /** - * Performs a sort on a given part of the array. - * @param first The first element to start the sorting at. - * @param last The last element to end the sorting. - * @param cmp The compare function. - */ - MCORE_INLINE void InnerSort(int32 first, int32 last, CmpFunc cmp) - { - if (first >= last) - { - return; - } - int32 split = Partition(first, last, cmp); - InnerSort(first, split - 1, cmp); - InnerSort(split + 1, last, cmp); - } - - // resize in a fast way that doesn't call constructors or destructors - void ResizeFast(uint32 newLength) - { - if (mLength == newLength) - { - return; - } - - if (newLength > mLength) - { - GrowExact(newLength); - } - - mLength = newLength; - } - - /** - * Resize the array to a given size. - * This does not mean an actual realloc will be made. This will only happen when the new length is bigger than the maxLength of the array. - * @param newLength The new length the array should be. - * @result returns false if the allocation/reallocation of the array failed - */ - bool Resize(uint32 newLength) - { - if (mLength == newLength) - { - return true; - } - - // check for growing or shrinking array - if (newLength > mLength) - { - // growing array, construct empty elements at end of array - const uint32 oldLen = mLength; - GrowExact(newLength); - if (mData == nullptr) - { - return false; - } - for (uint32 i = oldLen; i < newLength; ++i) - { - Construct(i); - } - } - else - { - // shrinking array, destruct elements at end of array - for (uint32 i = newLength; i < mLength; ++i) - { - Destruct(i); - } - - mLength = newLength; - } - return true; - } - - /** - * Move "numElements" elements starting from the source index, to the dest index. - * Please note that the array has to be large enough. You can't move data past the end of the array. - * @param destIndex The destination index. - * @param sourceIndex The source index, where the source elements start. - * @param numElements The number of elements to move. - */ - MCORE_INLINE void MoveElements(uint32 destIndex, uint32 sourceIndex, uint32 numElements) - { - if (numElements > 0) - { - MCore::MemMove(mData + destIndex, mData + sourceIndex, numElements * sizeof(T)); - } - } - - // operators - bool operator==(const Array& other) const - { - if (mLength != other.mLength) - { - return false; - } - for (uint32 i = 0; i < mLength; ++i) - { - if (mData[i] != other.mData[i]) - { - return false; - } - } - return true; - } - //Array& operator= (const Array& other) { if (&other != this) { Clear(); mMemCategory = other.mMemCategory; Grow(other.mLength); for (uint32 i=0; i& operator= (const Array& other) - { - if (&other != this) - { - Clear(false); - mMemCategory = other.mMemCategory; - Grow(other.mLength); - for (uint32 i = 0; i < mLength; ++i) - { - Construct(i, other.mData[i]); - } - } - return *this; - } - Array& operator= (Array&& other) - { - AZ_Assert(&other != this, "Cannot assign array to itself."); - if (mData) - { - MCore::Free(mData); - } - mData = other.mData; - mMemCategory = other.mMemCategory; - mLength = other.mLength; - mMaxLength = other.mMaxLength; - other.mData = nullptr; - other.mLength = 0; - other.mMaxLength = 0; - return *this; - } - //Array& operator+ (const Array& other) const { Array newArray; newArray.Grow(mLength+other.mLength); uint32 i; for (i=0; i& operator+=(const T& other) { Add(other); return *this; } - Array& operator+=(const Array& other) { Add(other); return *this; } - MCORE_INLINE T& operator[](uint32 index) { AZ_Assert(index < mLength, "Array index out of bounds"); return mData[index]; } - MCORE_INLINE const T& operator[](uint32 index) const { AZ_Assert(index < mLength, "Array index out of bounds"); return mData[index]; } - - private: - T* mData; /**< The element data. */ - uint32 mLength; /**< The number of used elements in the array. */ - uint32 mMaxLength; /**< The number of elements that we have allocated memory for. */ - uint16 mMemCategory; /**< The memory category ID. */ - - // private functions - MCORE_INLINE void Grow(uint32 newLength) - { - mLength = newLength; - if (mMaxLength >= newLength) - { - return; - } - Realloc(AllocSize(newLength)); - } - MCORE_INLINE void GrowExact(uint32 newLength) - { - mLength = newLength; - if (mMaxLength < newLength) - { - Realloc(newLength); - } - } - MCORE_INLINE uint32 AllocSize(uint32 num) { return 1 + num /*+num/8*/; } - MCORE_INLINE void Alloc(uint32 num) { mData = (T*)MCore::Allocate(num * sizeof(T), mMemCategory, MEMORYBLOCK_ID, MCORE_FILE, MCORE_LINE); } - MCORE_INLINE void Realloc(uint32 newSize) - { - if (newSize == 0) - { - this->Free(); - return; - } - if (mData) - { - mData = (T*)MCore::Realloc(mData, newSize * sizeof(T), mMemCategory, MEMORYBLOCK_ID, MCORE_FILE, MCORE_LINE); - } - else - { - mData = (T*)MCore::Allocate(newSize * sizeof(T), mMemCategory, MEMORYBLOCK_ID, MCORE_FILE, MCORE_LINE); - } - - mMaxLength = newSize; - } - MCORE_INLINE void Free() - { - mLength = 0; - mMaxLength = 0; - if (mData) - { - MCore::Free(mData); - mData = nullptr; - } - } - MCORE_INLINE void Construct(uint32 index, const T& original) { ::new(mData + index)T(original); } // copy-construct an element at which is a copy of - MCORE_INLINE void Construct(uint32 index) { ::new(mData + index)T; } // construct an element at place - MCORE_INLINE void Destruct(uint32 index) - { - #if (MCORE_COMPILER == MCORE_COMPILER_MSVC) - MCORE_UNUSED(index); // work around an MSVC compiler bug, where it triggers a warning that parameter 'index' is unused - #endif - (mData + index)->~T(); - } // destruct an element at - - // partition part of array (for sorting) - int32 Partition(int32 left, int32 right, CmpFunc cmp) - { - ::MCore::Swap(mData[left], mData[ (left + right) >> 1 ]); - - T& target = mData[right]; - int32 i = left - 1; - int32 j = right; - - bool neverQuit = true; // workaround to disable a "warning C4127: conditional expression is constant" - while (neverQuit) - { - while (i < j) - { - if (cmp(mData[++i], target) >= 0) - { - break; - } - } - while (j > i) - { - if (cmp(mData[--j], target) <= 0) - { - break; - } - } - if (i >= j) - { - break; - } - ::MCore::Swap(mData[i], mData[j]); - } - - ::MCore::Swap(mData[i], mData[right]); - return i; - } - }; -} // namespace MCore diff --git a/Gems/EMotionFX/Code/MCore/Source/Config.h b/Gems/EMotionFX/Code/MCore/Source/Config.h index d01bab61fc..c753a45ec3 100644 --- a/Gems/EMotionFX/Code/MCore/Source/Config.h +++ b/Gems/EMotionFX/Code/MCore/Source/Config.h @@ -8,6 +8,7 @@ #pragma once +#include #include #include @@ -275,23 +276,35 @@ typedef uintptr_t uintPointer; // mark as unused to prevent compiler warnings #define MCORE_UNUSED(x) static_cast(x) +namespace MCore +{ + template + inline static constexpr IndexType InvalidIndexT = static_cast(-1); + + inline static constexpr const size_t InvalidIndex = InvalidIndexT; + inline static constexpr const AZ::u64 InvalidIndex64 = InvalidIndexT; + inline static constexpr const AZ::u32 InvalidIndex32 = InvalidIndexT; + inline static constexpr const AZ::u16 InvalidIndex16 = InvalidIndexT; + inline static constexpr const AZ::u8 InvalidIndex8 = InvalidIndexT; +} // namespace MCore + /** * Often there are functions that allow you to search for objects. Such functions return some index value that points * inside for example the array of objects. However, in case the object we are searching for cannot be found, some * value has to be returned that identifies that the object cannot be found. The MCORE_INVALIDINDEX32 value is used * used as this value. The real value is 0xFFFFFFFF. */ -#define MCORE_INVALIDINDEX32 0xFFFFFFFF +#define MCORE_INVALIDINDEX32 MCore::InvalidIndex32 /** * The 16 bit index variant of MCORE_INVALIDINDEX32. * The real value is 0xFFFF. */ -#define MCORE_INVALIDINDEX16 0xFFFF +#define MCORE_INVALIDINDEX16 MCore::InvalidIndex16 /** * The 8 bit index variant of MCORE_INVALIDINDEX32. * The real value is 0xFF. */ -#define MCORE_INVALIDINDEX8 0xFF +#define MCORE_INVALIDINDEX8 MCore::InvalidIndex8 diff --git a/Gems/EMotionFX/Code/MCore/Source/HashTable.h b/Gems/EMotionFX/Code/MCore/Source/HashTable.h deleted file mode 100644 index 5310935f50..0000000000 --- a/Gems/EMotionFX/Code/MCore/Source/HashTable.h +++ /dev/null @@ -1,239 +0,0 @@ -/* - * 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 - * - */ - -#pragma once - -// include the needed headers -#include "StandardHeaders.h" -#include "Array.h" -#include "FastMath.h" -#include "HashFunctions.h" - - -namespace MCore -{ - /** - * The Hash Table template. - * Hash tables can be used to speedup searching of specific values based on a key. - * The table has an array of table elements, which each can contain multiple hash table entries. - * Each entry is identified by a unique key, which can be of any type, as long as the == operator is specified. - * Next to a unique key, every entry contains a value. The hash table implementation contains methods to add new - * entries and to retrieve the value for a given key. Hashing is used to speedup this search. - * The hash value of a given key is calculated based on a specified hashing function that you pass to the constructor. - * This hash function will return a non-negative (so positive) integer based on the input key. - * Performance tests have shown that you need at least 100 entries to make it faster than linear searches. This however - * also depends on the speed of your hash function and some other factors. But it is a good practise to replace your - * linear searches by a hash table when you have more than 100 items to search through. The more items to search through - * the bigger the advantage of hashing over linear searches will be. Here follows a small table that shows how much faster your - * searches can be compared to linear searches. - */ - template - class HashTable - { - public: - /** - * A hash table entry, which contains a unique key and a value for this key. - */ - class Entry - { - friend class HashTable; - MCORE_MEMORYOBJECTCATEGORY(HashTable, MCORE_DEFAULT_ALIGNMENT, MCORE_MEMCATEGORY_HASHTABLE) - - public: - /** - * The constructor. - * @param key The unique key of this entry. - * @param value The value linked to this key. - */ - MCORE_INLINE Entry(const Key& key, const Value& value) - : mKey(key) - , mValue(value) {} - - /** - * Set the value of this entry. - * @param value The value to set for this entry. - */ - MCORE_INLINE void SetValue(const Value& value) { mValue = value; } - - /** - * Get the value of this entry. - * @result The value that is linked to the key of this entry. - */ - MCORE_INLINE const Value& GetValue() const { return mValue; } - - /** - * Get the key of this entry. - * @result The unique key of this entry. - */ - MCORE_INLINE const Key& GetKey() const { return mKey; } - - private: - Key mKey; /**< The unique key. */ - Value mValue; /**< The value that is linked to the given key. */ - }; - - - /** - * The default constructor. - * This creates an empty hash table. You need to call the Init function before you can use the table. - * @see Init - */ - HashTable(); - - /** - * The extended constructor, which also initializes the table automatically. - * You do NOT need to call the Init function anymore when you use this constructor. - * @param maxElements The maximum number of table elements. The higher the value, the more gain when dealing with many entries. - * Values between 100 and 1000 are often good numbers, depending on the number of entries you are dealing with. - */ - HashTable(uint32 maxElements); - - /** - * Copy constructor. - * @param other The table to create a copy of. - */ - HashTable(const HashTable& other); - - /** - * The destructor. - * This automatically clears all table entries. - * The hash function object that was passed to the extended constructor or the Init function will be - * deleted from memory automatically. - */ - ~HashTable(); - - /** - * Clear the hash table. - * This removes all entries from the table. If you like to use the table again later on you will need to - * call the Init function again. - * This also automatically deletes the hash function object, that you passed to the extended constructor or init function, from memory. - * @see Init - */ - void Clear(); - - /** - * Locate an entry with a given key. - * When the entry cannot be found, this method will NOT modify the outElementNr and outEntryNr parameters. - * @param key The key to search for. - * @param outElementNr A pointer to an integer in which this method will store the table element number, in case the entry is found. - * @param outEntryNr A pointer to an integer in which this method will store the entry number (index) into the table element array, in case the entry is found. - * @result Returns true when the entry with the given key could be found, otherwise false is returned. - */ - MCORE_INLINE bool FindEntry(const Key& key, uint32* outElementNr, uint32* outEntryNr) const; - - /** - * Initialize the hash table. - * @param maxElements The maximum number of table elements. The higher the value, the more gain when dealing with many entries. - * Values between 100 and 1000 are often good numbers, depending on the number of entries you are dealing with. - */ - void Init(uint32 maxElements); - - /** - * Add an entry to the hash table. - * It is VERY important that the key is unique and does NOT already exist within this table! - * @param key The unique key of the entry. - * @param value The value that is linked to this key. - */ - void Add(const Key& key, const Value& value); - - /** - * Get a value from the table. - * @param inKey The key of the entry which contains the value. - * @param outValue A pointer to an object where this method will write the value of the entry in. - * @result Returns true when the value has been retrieved successfully. False will be returned when no entry with the specified - * key could be located. - */ - MCORE_INLINE bool GetValue(const Key& inKey, Value* outValue) const; - - /** - * Set the value that is linked to a given key. - * @param key The unique key of the entry to set the value for. - * @param value The value to link to the specified key. - * @result Returns true when the value has been set successfully, or false when there is no entry with the specified key inside this table. - */ - MCORE_INLINE bool SetValue(const Key& key, const Value& value); - - /** - * Check if this hash table contains an entry with a specified key. - * @param key The key of the entry to search for. - * @result Returns true when this hash table contains an entry with the specified key, otherwise false is returned. - */ - MCORE_INLINE bool Contains(const Key& key) const; - - /** - * Remove the entry which has the specified key. - * @param key The key of the entry to remove. - * @result Returns true when the entry with the specified key has been removed successfully, otherwise false is returned, which means - * that there is no entry with the specified key. - */ - bool Remove(const Key& key); - - /** - * Get the number of table elements. - * @result The number of table elements. - */ - MCORE_INLINE uint32 GetNumTableElements() const; - - /** - * Get the number of entries in a given table element. - * @param tableElementNr The table element number to get the number of entries for. - * @result The number of entries for the specified table entry. - */ - MCORE_INLINE uint32 GetNumEntries(uint32 tableElementNr) const; - - /** - * Get the total number of entries inside the table. - * @result The total number of stored entries inside the table. - */ - uint32 GetTotalNumEntries() const; - - /** - * Calculate the load balance, which is a percentage that represents how many percent of the - * table elements are used. If the returned value equals 50, then it means that 50 percent of the - * table elements are storing entries. The other 50% are then not used. - * When you have added many entries (more than then the number of table elements), and the load balance - * is not 100% or anywhere near it, it means your hash function is very inefficient, because it does not spread - * the entries over the entire hash table, which might mean that there is some nasty clustering going on, which can - * greatly decrease performance. - * @result A floating point value in range of 0..100, which respresents the percentage of table elements that is in use. - */ - float CalcLoadBalance() const; - - /** - * Calculate the average number of entries per used table element. - * The more entries per table element, the slower your searches will be. - * The optimal value returned by this function would therefore be 1. - * @result The average number of entries per table element. - */ - float CalcAverageNumEntries() const; - - /** - * Get a given entry from the table, when you know its location in the table. - * @param tableElementNr The table element number. - * @param entryNr The entry number inside this table element. - * @result The reference to the entry, with write access. - */ - MCORE_INLINE Entry& GetEntry(uint32 tableElementNr, uint32 entryNr); - - /** - * The assignment operator. - * This clones the entire table. - * @param other The table to create a copy of. - * @result The copied version of the specified table. - */ - HashTable& operator = (const HashTable& other); - - protected: - MCore::Array< MCore::Array* > mElements; /**< The table elements, where nullptr means the element is empty. */ - uint32 mTotalNumEntries; /**< The cached number of entries in the table. */ - }; - - - // include the inline code -#include "HashTable.inl" -} // namespace MCore diff --git a/Gems/EMotionFX/Code/MCore/Source/HashTable.inl b/Gems/EMotionFX/Code/MCore/Source/HashTable.inl deleted file mode 100644 index 580f5e964c..0000000000 --- a/Gems/EMotionFX/Code/MCore/Source/HashTable.inl +++ /dev/null @@ -1,338 +0,0 @@ -/* - * 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 - * - */ - -// default constructor -template -HashTable::HashTable() -{ - mElements.SetMemoryCategory(MCORE_MEMCATEGORY_HASHTABLE); - mTotalNumEntries = 0; -} - - -// extended constructor -template -HashTable::HashTable(uint32 maxElements) -{ - mElements.SetMemoryCategory(MCORE_MEMCATEGORY_HASHTABLE); - mTotalNumEntries = 0; - Init(maxElements); -} - - -// copy constructor -template -HashTable::HashTable(const HashTable& other) - : mTotalNumEntries(0) -{ - *this = other; -} - - -// destructor -template -HashTable::~HashTable() -{ - Clear(); -} - - -// clear the table -template -void HashTable::Clear() -{ - // get rid of existing elements - const uint32 numElems = mElements.GetLength(); - for (uint32 i = 0; i < numElems; ++i) - { - if (mElements[i]) - { - delete mElements[i]; - } - } - - // clear the array - mElements.Clear(); - - mTotalNumEntries = 0; -} - - -// find the entry with a given key -template -bool HashTable::FindEntry(const Key& key, uint32* outElementNr, uint32* outEntryNr) const -{ - // calculate the hash value - uint32 hashResult = Hash(key) % mElements.GetLength(); - - // check if the we have an entry at this hash position - if (mElements[hashResult] == nullptr) - { - return false; - } - - // search inside the array of entries - const uint32 numElements = mElements[hashResult]->GetLength(); - for (uint32 i = 0; i < numElements; ++i) - { - // if we found the one we are searching for - if (mElements[hashResult]->GetItem(i).mKey == key) - { - *outElementNr = hashResult; - *outEntryNr = i; - return true; - } - } - - return false; -} - - -// initialize the table at a given maximum amount of elements -template -void HashTable::Init(uint32 maxElements) -{ - // get rid of existing elements - Clear(); - - // resize the array - mElements.Resize(maxElements); - mElements.Shrink(); - - // reset all the elements - for (uint32 i = 0; i < maxElements; ++i) - { - mElements[i] = nullptr; - } -} - - -// add an entry to the table -template -void HashTable::Add(const Key& key, const Value& value) -{ - // calculate the hash value - uint32 hashResult = Hash(key) % mElements.GetLength(); - - // make sure there isn't already an element with this key - MCORE_ASSERT(Contains(key) == false); - - // if the array isn't allocated yet, do so - if (mElements[hashResult] == nullptr) - { - mElements[hashResult] = new MCore::Array< Entry >(); - mElements[hashResult]->SetMemoryCategory(MCORE_MEMCATEGORY_HASHTABLE); - } - - // add the entry to the array - mElements[hashResult]->Add(Entry(key, value)); - - // increase the total number of entries - mTotalNumEntries++; -} - - -// get a value -template -bool HashTable::GetValue(const Key& inKey, Value* outValue) const -{ - // try to find the element - uint32 elementNr, entryNr; - if (FindEntry(inKey, &elementNr, &entryNr)) - { - *outValue = mElements[elementNr]->GetItem(entryNr).mValue; - return true; - } - - // nothing found - return false; -} - - -// check if there is an entry using the specified key -template -bool HashTable::Contains(const Key& key) const -{ - uint32 elementNr, entryNr; - return FindEntry(key, &elementNr, &entryNr); -} - - -template -bool HashTable::Remove(const Key& key) -{ - uint32 elementNr, entryNr; - if (FindEntry(key, &elementNr, &entryNr)) - { - // remove the element - mElements[elementNr]->Remove(entryNr); - - // remove the array if it is empty - if (mElements[elementNr]->GetLength() == 0) - { - delete mElements[elementNr]; - mElements[elementNr] = nullptr; - } - - // decrease the total number of entries - mTotalNumEntries--; - - // yeah, we successfully removed it - return true; - } - - // the element wasn't found, so cannot be removed - return false; -} - - -// get the number of table elements -template -uint32 HashTable::GetNumTableElements() const -{ - return mElements.GetLength(); -} - - -// get the get the number of entries for a given table element -template -uint32 HashTable::GetNumEntries(uint32 tableElementNr) const -{ - if (mElements[tableElementNr] == nullptr) - { - return 0; - } - - return mElements[tableElementNr]->GetLength(); -} - - -// get the number of entries in the table -template -uint32 HashTable::GetTotalNumEntries() const -{ - return mTotalNumEntries; -} - - -// calculate the load balance -template -float HashTable::CalcLoadBalance() const -{ - uint32 numUsedElements = 0; - - // traverse all elements - const uint32 numElements = mElements.GetLength(); - for (uint32 i = 0; i < numElements; ++i) - { - if (mElements[i]) - { - numUsedElements++; - } - } - - if (numUsedElements == 0) - { - return 0; - } - - return (numUsedElements / (float)numElements) * 100.0f; -} - - -template -float HashTable::CalcAverageNumEntries() const -{ - uint32 numEntries = 0; - uint32 numUsedElements = 0; - - // traverse all elements - const uint32 numElements = mElements.GetLength(); - for (uint32 i = 0; i < numElements; ++i) - { - if (mElements[i]) - { - numUsedElements++; - numEntries += mElements[i]->GetLength(); - } - } - - if (numEntries == 0) - { - return 0; - } - - return numEntries / (float)numUsedElements; -} - - -// update the value of the entry with a given key -template -bool HashTable::SetValue(const Key& key, const Value& value) -{ - // try to find the element - uint32 elementNr, entryNr; - if (FindEntry(key, &elementNr, &entryNr)) - { - mElements[elementNr]->GetItem(entryNr).mValue = value; - return true; - } - - // nothing found - return false; -} - - -// get a given entry -template -MCORE_INLINE typename HashTable::Entry& HashTable::GetEntry(uint32 tableElementNr, uint32 entryNr) -{ - MCORE_ASSERT(tableElementNr < mElements.GetLength()); // make sure the values are in range - MCORE_ASSERT(mElements[tableElementNr]); // this table element must have entries - MCORE_ASSERT(entryNr < mElements[tableElementNr]->GetLength()); // - - return mElements[tableElementNr]->GetItem(entryNr); -} - - -// operator = -template -HashTable& HashTable::operator = (const HashTable& other) -{ - if (&other == this) - { - return *this; - } - - // get rid of old data - Clear(); - - // copy the number of entries - mTotalNumEntries = other.mTotalNumEntries; - - // resize the element array - mElements.Resize(other.mElements.GetLength()); - - // copy the element entries - const uint32 numElements = mElements.GetLength(); - for (uint32 i = 0; i < numElements; ++i) - { - if (other.mElements[i]) - { - // create the array and copy the entries - mElements[i] = new MCore::Array< Entry >(); - *mElements[i] = *other.mElements[i]; - } - else - { - mElements[i] = nullptr; - } - } - - return *this; -} diff --git a/Gems/EMotionFX/Code/MCore/Source/LogManager.cpp b/Gems/EMotionFX/Code/MCore/Source/LogManager.cpp index a4e0a71cee..ecf4eb9168 100644 --- a/Gems/EMotionFX/Code/MCore/Source/LogManager.cpp +++ b/Gems/EMotionFX/Code/MCore/Source/LogManager.cpp @@ -10,8 +10,6 @@ #include #include "LogManager.h" -#include - namespace MCore { // static mutex @@ -60,8 +58,6 @@ namespace MCore // constructor LogManager::LogManager() { - mLogCallbacks.SetMemoryCategory(MCORE_MEMCATEGORY_LOGMANAGER); - // initialize the enabled log levels InitLogLevels(); } @@ -82,7 +78,7 @@ namespace MCore LockGuard lock(mMutex); // add the callback to the stack - mLogCallbacks.Add(callback); + mLogCallbacks.emplace_back(callback); // collect the enabled log levels InitLogLevels(); @@ -90,16 +86,16 @@ namespace MCore // remove a specific log callback from the stack - void LogManager::RemoveLogCallback(uint32 index) + void LogManager::RemoveLogCallback(size_t index) { - MCORE_ASSERT(mLogCallbacks.GetIsValidIndex(index)); + MCORE_ASSERT(index < mLogCallbacks.size()); LockGuard lock(mMutex); // delete it from memory delete mLogCallbacks[index]; // remove the callback from the stack - mLogCallbacks.Remove(index); + mLogCallbacks.erase(AZStd::next(begin(mLogCallbacks), index)); // collect the enabled log levels InitLogLevels(); @@ -110,25 +106,16 @@ namespace MCore { LockGuard lock(mMutex); - // iterate through all log callbacks - for (uint32 i = 0; i < mLogCallbacks.GetLength(); ) + // Put all the callbacks of the type to be removed at the end of the vector + mLogCallbacks.erase(AZStd::remove_if(begin(mLogCallbacks), end(mLogCallbacks), [type](const LogCallback* callback) { - LogCallback* callback = mLogCallbacks[i]; - - // check if we are dealing with a log file if (callback->GetType() == type) { - // get rid of the callback instance delete callback; - - // remove the callback from the stack - mLogCallbacks.Remove(i); + return true; } - else - { - i++; - } - } + return false; + })); // collect the enabled log levels InitLogLevels(); @@ -141,13 +128,12 @@ namespace MCore LockGuard lock(mMutex); // get rid of the callbacks - const uint32 num = mLogCallbacks.GetLength(); - for (uint32 i = 0; i < num; ++i) + for (auto* logCallback : mLogCallbacks) { - delete mLogCallbacks[i]; + delete logCallback; } - mLogCallbacks.Clear(true); + mLogCallbacks.clear(); // collect the enabled log levels InitLogLevels(); @@ -155,15 +141,15 @@ namespace MCore // retrieve a pointer to the given log callback - LogCallback* LogManager::GetLogCallback(uint32 index) + LogCallback* LogManager::GetLogCallback(size_t index) { return mLogCallbacks[index]; } // return number of log callbacks in the stack - uint32 LogManager::GetNumLogCallbacks() const + size_t LogManager::GetNumLogCallbacks() const { - return mLogCallbacks.GetLength(); + return mLogCallbacks.size(); } // collect all enabled log levels @@ -173,10 +159,9 @@ namespace MCore int32 logLevels = LogCallback::LOGLEVEL_NONE; // enable all log levels that are enabled by any of the callbacks - const uint32 num = mLogCallbacks.GetLength(); - for (uint32 i = 0; i < num; ++i) + for (auto* logCallback : mLogCallbacks) { - logLevels |= (int32)mLogCallbacks[i]->GetLogLevels(); + logLevels |= (int32)logCallback->GetLogLevels(); } mLogLevels = (LogCallback::ELogLevel)logLevels; @@ -187,10 +172,9 @@ namespace MCore void LogManager::SetLogLevels(LogCallback::ELogLevel logLevels) { // iterate through all log callbacks and set it to the given log levels - const uint32 num = mLogCallbacks.GetLength(); - for (uint32 i = 0; i < num; ++i) + for (auto* logCallback : mLogCallbacks) { - mLogCallbacks[i]->SetLogLevels(logLevels); + logCallback->SetLogLevels(logLevels); } // force set the log manager's log levels to the given one as well @@ -204,23 +188,21 @@ namespace MCore LockGuard lock(mMutex); // iterate through all callbacks - const uint32 num = mLogCallbacks.GetLength(); - for (uint32 i = 0; i < num; ++i) + for (auto* logCallback : mLogCallbacks) { - if (mLogCallbacks[i]->GetLogLevels() & logLevel) + if (logCallback->GetLogLevels() & logLevel) { - mLogCallbacks[i]->Log(message, logLevel); + logCallback->Log(message, logLevel); } } } // find the index of a given callback - uint32 LogManager::FindLogCallback(LogCallback* callback) const + size_t LogManager::FindLogCallback(LogCallback* callback) const { // iterate through all callbacks - const uint32 num = mLogCallbacks.GetLength(); - for (uint32 i = 0; i < num; ++i) + for (size_t i = 0; i < mLogCallbacks.size(); ++i) { if (mLogCallbacks[i] == callback) { @@ -228,7 +210,7 @@ namespace MCore } } - return MCORE_INVALIDINDEX32; + return InvalidIndex; } diff --git a/Gems/EMotionFX/Code/MCore/Source/LogManager.h b/Gems/EMotionFX/Code/MCore/Source/LogManager.h index 1f8ac34cae..d5e2316436 100644 --- a/Gems/EMotionFX/Code/MCore/Source/LogManager.h +++ b/Gems/EMotionFX/Code/MCore/Source/LogManager.h @@ -10,8 +10,8 @@ // include the required headers #include +#include #include "StandardHeaders.h" -#include "Array.h" #include "MultiThreadManager.h" @@ -187,7 +187,7 @@ namespace MCore * Remove the given callback from the stack. * @param index The index of the callback to remove. */ - void RemoveLogCallback(uint32 index); + void RemoveLogCallback(size_t index); /** * Remove all given log callbacks by type from the stack. @@ -205,20 +205,20 @@ namespace MCore * @param index The index of the callback. * @return A pointer to the callback. */ - LogCallback* GetLogCallback(uint32 index); + LogCallback* GetLogCallback(size_t index); /** * Find the index of a given callback. * @param callback The callback object to find. * @result Returns the index value, or MCORE_INVALIDINDEX32 when not found. */ - uint32 FindLogCallback(LogCallback* callback) const; + size_t FindLogCallback(LogCallback* callback) const; /** * Return the number of log callbacks managed by this class. * @return Number of log callbacks. */ - uint32 GetNumLogCallbacks() const; + size_t GetNumLogCallbacks() const; /** * Force set the log levels of all callbacks in the log manager. @@ -252,7 +252,7 @@ namespace MCore static Mutex mGlobalMutex; /**< The multithread mutex, used by some global Log functions. */ private: - Array mLogCallbacks; /**< A collection of log callback instances. */ + AZStd::vector mLogCallbacks; /**< A collection of log callback instances. */ LogCallback::ELogLevel mLogLevels; /**< The log levels that will pass one of the callbacks. All messages from log flags which are disabled won't be logged. */ Mutex mMutex; /**< The mutex for logging locally. */ }; diff --git a/Gems/EMotionFX/Code/MCore/Source/MCoreCommandManager.h b/Gems/EMotionFX/Code/MCore/Source/MCoreCommandManager.h index dfa99523fb..3a6aaf33c6 100644 --- a/Gems/EMotionFX/Code/MCore/Source/MCoreCommandManager.h +++ b/Gems/EMotionFX/Code/MCore/Source/MCoreCommandManager.h @@ -11,7 +11,7 @@ #include #include #include "StandardHeaders.h" -#include +#include #include "Command.h" #include "CommandGroup.h" diff --git a/Gems/EMotionFX/Code/MCore/mcore_files.cmake b/Gems/EMotionFX/Code/MCore/mcore_files.cmake index 43a41b4a11..65b0cf6ca6 100644 --- a/Gems/EMotionFX/Code/MCore/mcore_files.cmake +++ b/Gems/EMotionFX/Code/MCore/mcore_files.cmake @@ -13,7 +13,6 @@ set(FILES Source/Algorithms.h Source/Algorithms.inl Source/AlignedArray.h - Source/Array.h Source/Array2D.h Source/Array2D.inl Source/Attribute.cpp @@ -79,8 +78,6 @@ set(FILES Source/FileSystem.cpp Source/FileSystem.h Source/HashFunctions.h - Source/HashTable.h - Source/HashTable.inl Source/IDGenerator.cpp Source/IDGenerator.h Source/LogManager.cpp diff --git a/Gems/EMotionFX/Code/MysticQt/Source/DialogStack.cpp b/Gems/EMotionFX/Code/MysticQt/Source/DialogStack.cpp index 75d97fa065..36c0edf986 100644 --- a/Gems/EMotionFX/Code/MysticQt/Source/DialogStack.cpp +++ b/Gems/EMotionFX/Code/MysticQt/Source/DialogStack.cpp @@ -50,32 +50,10 @@ namespace MysticQt }; - // the constructor - DialogStack::Dialog::Dialog() - { - mButton = nullptr; - mFrame = nullptr; - mWidget = nullptr; - mDialogWidget = nullptr; - mSplitter = nullptr; - mClosable = true; - } - - - // destructor - DialogStack::Dialog::~Dialog() - { - delete mDialogWidget; - } - - // the constructor DialogStack::DialogStack(QWidget* parent) : QScrollArea(parent) { - // set the memory category of the dialog array - mDialogs.SetMemoryCategory(MEMCATEGORY_MYSTICQT); - // set the object name setObjectName("DialogStack"); @@ -102,7 +80,7 @@ namespace MysticQt void DialogStack::Clear() { // destroy the dialogs - mDialogs.Clear(); + mDialogs.clear(); // update the scroll bars UpdateScrollBars(); @@ -123,7 +101,7 @@ namespace MysticQt // add the dialog widget // the splitter is hierarchical : {a, {b, c}} QSplitter* dialogSplitter; - if (mDialogs.GetLength() == 0) + if (mDialogs.empty()) { // add the dialog widget dialogSplitter = mRootSplitter; @@ -138,10 +116,10 @@ namespace MysticQt else { // check if one space is free on the last splitter - if (mDialogs.GetLast().mSplitter->count() == 1) + if (mDialogs.back().mSplitter->count() == 1) { // add the dialog widget - dialogSplitter = mDialogs.GetLast().mSplitter; + dialogSplitter = mDialogs.back().mSplitter; dialogSplitter->addWidget(dialogWidget); // stretch if needed @@ -151,16 +129,16 @@ namespace MysticQt } // less space used by the splitter when the last dialog is closed - if (mDialogs.GetLast().mFrame->isHidden()) + if (mDialogs.back().mFrame->isHidden()) { - mDialogs.GetLast().mSplitter->handle(1)->setFixedHeight(1); - mDialogs.GetLast().mSplitter->setStyleSheet("QSplitter::handle{ height: 1px; background: transparent; }"); + mDialogs.back().mSplitter->handle(1)->setFixedHeight(1); + mDialogs.back().mSplitter->setStyleSheet("QSplitter::handle{ height: 1px; background: transparent; }"); } // disable the splitter - if (mDialogs.GetLast().mFrame->isHidden()) + if (mDialogs.back().mFrame->isHidden()) { - mDialogs.GetLast().mSplitter->handle(1)->setDisabled(true); + mDialogs.back().mSplitter->handle(1)->setDisabled(true); } } else // already two dialogs in the splitter @@ -171,24 +149,24 @@ namespace MysticQt dialogSplitter->setChildrenCollapsible(false); // add the current last dialog and the new dialog after - dialogSplitter->addWidget(mDialogs.GetLast().mDialogWidget); + dialogSplitter->addWidget(mDialogs.back().mDialogWidget.get()); dialogSplitter->addWidget(dialogWidget); // stretch if needed - if (mDialogs.GetLast().mMaximizeSize && mDialogs.GetLast().mStretchWhenMaximize) + if (mDialogs.back().mMaximizeSize && mDialogs.back().mStretchWhenMaximize) { dialogSplitter->setStretchFactor(0, 1); } // less space used by the splitter when the last dialog is closed - if (mDialogs.GetLast().mFrame->isHidden()) + if (mDialogs.back().mFrame->isHidden()) { dialogSplitter->handle(1)->setFixedHeight(1); dialogSplitter->setStyleSheet("QSplitter::handle{ height: 1px; background: transparent; }"); } // disable the splitter - if (mDialogs.GetLast().mFrame->isHidden()) + if (mDialogs.back().mFrame->isHidden()) { dialogSplitter->handle(1)->setDisabled(true); } @@ -200,24 +178,27 @@ namespace MysticQt } // replace the last dialog by the new splitter - mDialogs.GetLast().mSplitter->addWidget(dialogSplitter); + mDialogs.back().mSplitter->addWidget(dialogSplitter); // disable the splitter - const uint32 lastDialogIndex = mDialogs.GetLength() - 1; - if (mDialogs[lastDialogIndex - 1].mFrame->isHidden()) + if (mDialogs.size() > 1) { - mDialogs.GetLast().mSplitter->handle(1)->setDisabled(true); - } + const auto previousDialogIt = mDialogs.end() - 2; + if (previousDialogIt->mFrame->isHidden()) + { + mDialogs.back().mSplitter->handle(1)->setDisabled(true); + } - // stretch the splitter if needed - // the correct behavior is found after experimentations - if ((mDialogs.GetLast().mMaximizeSize && mDialogs.GetLast().mStretchWhenMaximize) || (mDialogs[lastDialogIndex - 1].mMaximizeSize && mDialogs[lastDialogIndex - 1].mStretchWhenMaximize == false)) - { - mDialogs.GetLast().mSplitter->setStretchFactor(1, 1); + // stretch the splitter if needed + // the correct behavior is found after experimentations + if ((mDialogs.back().mMaximizeSize && mDialogs.back().mStretchWhenMaximize) || (previousDialogIt->mMaximizeSize && previousDialogIt->mStretchWhenMaximize == false)) + { + mDialogs.back().mSplitter->setStretchFactor(1, 1); + } } // set the new splitter of the last dialog - mDialogs.GetLast().mSplitter = dialogSplitter; + mDialogs.back().mSplitter = dialogSplitter; } } @@ -280,17 +261,20 @@ namespace MysticQt dialogWidget->adjustSize(); // register it, so that we know which frame is linked to which header button - mDialogs.AddEmpty(); - mDialogs.GetLast().mButton = headerButton; - mDialogs.GetLast().mFrame = frame; - mDialogs.GetLast().mWidget = widget; - mDialogs.GetLast().mDialogWidget = dialogWidget; - mDialogs.GetLast().mSplitter = dialogSplitter; - mDialogs.GetLast().mClosable = closable; - mDialogs.GetLast().mMaximizeSize = maximizeSize; - mDialogs.GetLast().mStretchWhenMaximize = stretchWhenMaximize; - mDialogs.GetLast().mLayout = layout; - mDialogs.GetLast().mDialogLayout = dialogLayout; + mDialogs.emplace_back(Dialog{ + /*.mButton =*/ headerButton, + /*.mFrame =*/ frame, + /*.mWidget =*/ widget, + /*.mDialogWidget =*/ AZStd::unique_ptr{dialogWidget}, + /*.mSplitter =*/ dialogSplitter, + /*.mClosable =*/ closable, + /*.mMaximizeSize =*/ maximizeSize, + /*.mStretchWhenMaximize =*/ stretchWhenMaximize, + /*.mMinimumHeightBeforeClose =*/ 0, + /*.mMaximumHeightBeforeClose =*/ 0, + /*.mLayout =*/ layout, + /*.mDialogLayout =*/ dialogLayout, + }); // check if the dialog is closed if (closed) @@ -319,7 +303,7 @@ namespace MysticQt bool DialogStack::Remove(QWidget* widget) { - const uint32 numDialogs = mDialogs.GetLength(); + const uint32 numDialogs = mDialogs.size(); for (uint32 i = 0; i < numDialogs; ++i) { QLayout* layout = mDialogs[i].mFrame->layout(); @@ -333,7 +317,7 @@ namespace MysticQt // TODO : shift all dialogs needed as explained on the previous comment mDialogs[i].mDialogWidget->hide(); mDialogs[i].mDialogWidget->deleteLater(); - mDialogs.Remove(i); + mDialogs.erase(AZStd::next(begin(mDialogs), i)); // update the scroll bars UpdateScrollBars(); @@ -367,7 +351,7 @@ namespace MysticQt // find the dialog that goes with the given button uint32 DialogStack::FindDialog(QPushButton* pushButton) { - const uint32 numDialogs = mDialogs.GetLength(); + const uint32 numDialogs = mDialogs.size(); for (uint32 i = 0; i < numDialogs; ++i) { if (mDialogs[i].mButton == pushButton) @@ -401,20 +385,20 @@ namespace MysticQt button->setIcon(GetMysticQt()->FindIcon("Images/Icons/ArrowDownGray.png")); // more space used by the splitter when the dialog is open - if (dialogIndex < (mDialogs.GetLength() - 1)) + if (dialogIndex < (mDialogs.size() - 1)) { mDialogs[dialogIndex].mSplitter->handle(1)->setFixedHeight(4); mDialogs[dialogIndex].mSplitter->setStyleSheet("QSplitter::handle{ height: 4px; background: transparent; }"); } // enable the splitter - if (dialogIndex < (mDialogs.GetLength() - 1)) + if (dialogIndex < (mDialogs.size() - 1)) { mDialogs[dialogIndex].mSplitter->handle(1)->setEnabled(true); } // maximize the size if it's needed - if (mDialogs.GetLength() > 1) + if (mDialogs.size() > 1) { if (mDialogs[dialogIndex].mMaximizeSize) { @@ -440,7 +424,7 @@ namespace MysticQt } // special case if it's not the last dialog - if (dialogIndex < (mDialogs.GetLength() - 1)) + if (dialogIndex < (mDialogs.size() - 1)) { // if the next dialog is closed, it's needed to expand to the max too if (mDialogs[dialogIndex + 1].mFrame->isHidden()) @@ -489,27 +473,27 @@ namespace MysticQt button->setIcon(GetMysticQt()->FindIcon("Images/Icons/ArrowRightGray.png")); // less space used by the splitter when the dialog is closed - if (dialogIndex < (mDialogs.GetLength() - 1)) + if (dialogIndex < (mDialogs.size() - 1)) { mDialogs[dialogIndex].mSplitter->handle(1)->setFixedHeight(1); mDialogs[dialogIndex].mSplitter->setStyleSheet("QSplitter::handle{ height: 1px; background: transparent; }"); } // disable the splitter - if (dialogIndex < (mDialogs.GetLength() - 1)) + if (dialogIndex < (mDialogs.size() - 1)) { mDialogs[dialogIndex].mSplitter->handle(1)->setDisabled(true); } // set the first splitter to the min if needed - if (dialogIndex < (mDialogs.GetLength() - 1)) + if (dialogIndex < (mDialogs.size() - 1)) { static_cast(mDialogs[dialogIndex].mSplitter)->MoveFirstSplitterToMin(); } // maximize the first needed to avoid empty space bool findPreviousMaximizedDialogNeeded = true; - const uint32 numDialogs = mDialogs.GetLength(); + const uint32 numDialogs = mDialogs.size(); for (uint32 i = dialogIndex + 1; i < numDialogs; ++i) { if (mDialogs[i].mMaximizeSize && mDialogs[i].mFrame->isHidden() == false) @@ -636,7 +620,7 @@ namespace MysticQt QScrollArea::resizeEvent(event); // maximize the first dialog needed - const uint32 numDialogs = mDialogs.GetLength(); + const uint32 numDialogs = mDialogs.size(); const int32 lastDialogIndex = static_cast(numDialogs) - 1; for (int32 i = lastDialogIndex; i >= 0; --i) { @@ -655,7 +639,7 @@ namespace MysticQt // replace an internal widget void DialogStack::ReplaceWidget(QWidget* oldWidget, QWidget* newWidget) { - for (uint32 i = 0; i < mDialogs.GetLength(); ++i) + for (uint32 i = 0; i < mDialogs.size(); ++i) { // go next if the widget is not the same if (mDialogs[i].mWidget != oldWidget) @@ -693,7 +677,7 @@ namespace MysticQt mDialogs[i].mDialogWidget->setFixedHeight(dialogHeight); // set the first splitter to the min if needed - if (i < (mDialogs.GetLength() - 1)) + if (i < (mDialogs.size() - 1)) { static_cast(mDialogs[i].mSplitter)->MoveFirstSplitterToMin(); } diff --git a/Gems/EMotionFX/Code/MysticQt/Source/DialogStack.h b/Gems/EMotionFX/Code/MysticQt/Source/DialogStack.h index ddd0796a6d..d5850a8cbf 100644 --- a/Gems/EMotionFX/Code/MysticQt/Source/DialogStack.h +++ b/Gems/EMotionFX/Code/MysticQt/Source/DialogStack.h @@ -11,10 +11,11 @@ // #if !defined(Q_MOC_RUN) +#include #include "MysticQtConfig.h" #include #include -#include +#include #endif // forward declarations @@ -36,7 +37,6 @@ namespace MysticQt : public QScrollArea { Q_OBJECT - MCORE_MEMORYOBJECTCATEGORY(DialogStack, MCore::MCORE_DEFAULT_ALIGNMENT, MEMCATEGORY_MYSTICQT); public: DialogStack(QWidget* parent = nullptr); @@ -61,21 +61,18 @@ namespace MysticQt private: struct Dialog { - MCORE_MEMORYOBJECTCATEGORY(DialogStack::Dialog, MCore::MCORE_DEFAULT_ALIGNMENT, MEMCATEGORY_MYSTICQT); - Dialog(); - ~Dialog(); - QPushButton* mButton; - QWidget* mFrame; - QWidget* mWidget; - QWidget* mDialogWidget; - QSplitter* mSplitter; - bool mClosable; - bool mMaximizeSize; - bool mStretchWhenMaximize; - int mMinimumHeightBeforeClose; - int mMaximumHeightBeforeClose; - QLayout* mLayout; - QLayout* mDialogLayout; + QPushButton* mButton = nullptr; + QWidget* mFrame = nullptr; + QWidget* mWidget = nullptr; + AZStd::unique_ptr mDialogWidget = nullptr; + QSplitter* mSplitter = nullptr; + bool mClosable = true; + bool mMaximizeSize = false; + bool mStretchWhenMaximize = false; + int mMinimumHeightBeforeClose = 0; + int mMaximumHeightBeforeClose = 0; + QLayout* mLayout = nullptr; + QLayout* mDialogLayout = nullptr; }; private: @@ -86,7 +83,7 @@ namespace MysticQt private: QSplitter* mRootSplitter; - MCore::Array mDialogs; + AZStd::vector mDialogs; int32 mPrevMouseX; int32 mPrevMouseY; }; diff --git a/Gems/EMotionFX/Code/MysticQt/Source/MysticQtManager.cpp b/Gems/EMotionFX/Code/MysticQt/Source/MysticQtManager.cpp index 4020fd66ff..016664e017 100644 --- a/Gems/EMotionFX/Code/MysticQt/Source/MysticQtManager.cpp +++ b/Gems/EMotionFX/Code/MysticQt/Source/MysticQtManager.cpp @@ -30,12 +30,11 @@ namespace MysticQt MysticQtManager::~MysticQtManager() { // get the number of icons and destroy them - const uint32 numIcons = mIcons.GetLength(); - for (uint32 i = 0; i < numIcons; ++i) + for (IconData* mIcon : mIcons) { - delete mIcons[i]; + delete mIcon; } - mIcons.Clear(); + mIcons.clear(); } @@ -58,18 +57,17 @@ namespace MysticQt const QIcon& MysticQtManager::FindIcon(const char* filename) { // get the number of icons and iterate through them - const uint32 numIcons = mIcons.GetLength(); - for (uint32 i = 0; i < numIcons; ++i) + for (IconData* mIcon : mIcons) { - if (AzFramework::StringFunc::Equal(mIcons[i]->mFileName.c_str(), filename, false /* no case */)) + if (AzFramework::StringFunc::Equal(mIcon->mFileName.c_str(), filename, false /* no case */)) { - return *(mIcons[i]->mIcon); + return *(mIcon->mIcon); } } // we haven't found it IconData* iconData = new IconData(filename); - mIcons.Add(iconData); + mIcons.emplace_back(iconData); return *(iconData->mIcon); } diff --git a/Gems/EMotionFX/Code/MysticQt/Source/MysticQtManager.h b/Gems/EMotionFX/Code/MysticQt/Source/MysticQtManager.h index 8f7dad06bf..e0be07796e 100644 --- a/Gems/EMotionFX/Code/MysticQt/Source/MysticQtManager.h +++ b/Gems/EMotionFX/Code/MysticQt/Source/MysticQtManager.h @@ -12,7 +12,7 @@ // include required files #if !defined(Q_MOC_RUN) #include -#include +#include #include "MysticQtConfig.h" #include #endif @@ -74,7 +74,7 @@ namespace MysticQt }; QWidget* mMainWindow; - MCore::Array mIcons; + AZStd::vector mIcons; AZStd::string mAppDir; AZStd::string mDataDir; diff --git a/Gems/EMotionFX/Code/Platform/Windows/platform_windows.cmake b/Gems/EMotionFX/Code/Platform/Windows/platform_windows.cmake index 7a325ca97e..98a5170e23 100644 --- a/Gems/EMotionFX/Code/Platform/Windows/platform_windows.cmake +++ b/Gems/EMotionFX/Code/Platform/Windows/platform_windows.cmake @@ -5,3 +5,7 @@ # SPDX-License-Identifier: Apache-2.0 OR MIT # # + +if (PAL_TRAIT_COMPILER_ID STREQUAL "MSVC") + set(LY_COMPILE_OPTIONS PUBLIC /wd4267) +endif() diff --git a/Gems/EMotionFX/Code/Source/Editor/ActorJointBrowseEdit.cpp b/Gems/EMotionFX/Code/Source/Editor/ActorJointBrowseEdit.cpp index fb359eb671..a5d7a67f51 100644 --- a/Gems/EMotionFX/Code/Source/Editor/ActorJointBrowseEdit.cpp +++ b/Gems/EMotionFX/Code/Source/Editor/ActorJointBrowseEdit.cpp @@ -64,7 +64,6 @@ namespace EMStudio m_previouslySelectedJoints = m_selectedJoints; m_jointSelectionWindow = new NodeSelectionWindow(this, m_singleJointSelection); - connect(m_jointSelectionWindow->GetNodeHierarchyWidget(), qOverload>(&NodeHierarchyWidget::OnSelectionDone), this, &ActorJointBrowseEdit::OnSelectionDoneMCoreArray); connect(m_jointSelectionWindow, &NodeSelectionWindow::rejected, this, &ActorJointBrowseEdit::OnSelectionRejected); connect(m_jointSelectionWindow->GetNodeHierarchyWidget()->GetTreeWidget(), &QTreeWidget::itemSelectionChanged, this, &ActorJointBrowseEdit::OnSelectionChanged); @@ -118,12 +117,6 @@ namespace EMStudio emit SelectionDone(selectedJoints); } - void ActorJointBrowseEdit::OnSelectionDoneMCoreArray(const MCore::Array& selectedJoints) - { - AZStd::vector convertedSelection = FromMCoreArray(selectedJoints); - OnSelectionDone(convertedSelection); - } - void ActorJointBrowseEdit::OnSelectionChanged() { if (m_jointSelectionWindow) @@ -175,15 +168,4 @@ namespace EMStudio return nullptr; } - AZStd::vector ActorJointBrowseEdit::FromMCoreArray(const MCore::Array& in) const - { - const AZ::u32 numItems = in.GetLength(); - AZStd::vector result(static_cast(numItems)); - for (AZ::u32 i = 0; i < numItems; ++i) - { - result[static_cast(i)] = in[i]; - } - - return result; - } } // namespace EMStudio diff --git a/Gems/EMotionFX/Code/Source/Editor/ActorJointBrowseEdit.h b/Gems/EMotionFX/Code/Source/Editor/ActorJointBrowseEdit.h index 770c000b1b..adae07dfc2 100644 --- a/Gems/EMotionFX/Code/Source/Editor/ActorJointBrowseEdit.h +++ b/Gems/EMotionFX/Code/Source/Editor/ActorJointBrowseEdit.h @@ -51,7 +51,6 @@ namespace EMStudio private slots: void OnBrowseButtonClicked(); void OnSelectionDone(const AZStd::vector& selectedJoints); - void OnSelectionDoneMCoreArray(const MCore::Array& selectedJoints); void OnSelectionChanged(); void OnSelectionRejected(); void OnTextEdited(const QString& text); @@ -59,8 +58,6 @@ namespace EMStudio private: void UpdatePlaceholderText(); - AZStd::vector FromMCoreArray(const MCore::Array& in) const; - AZStd::vector m_previouslySelectedJoints; /// Selected joints before selection window opened. AZStd::vector m_selectedJoints; NodeSelectionWindow* m_jointSelectionWindow = nullptr; diff --git a/Gems/EMotionFX/Code/Source/Editor/PropertyWidgets/ActorGoalNodeHandler.cpp b/Gems/EMotionFX/Code/Source/Editor/PropertyWidgets/ActorGoalNodeHandler.cpp index a05fbc9fa3..8cbee5924b 100644 --- a/Gems/EMotionFX/Code/Source/Editor/PropertyWidgets/ActorGoalNodeHandler.cpp +++ b/Gems/EMotionFX/Code/Source/Editor/PropertyWidgets/ActorGoalNodeHandler.cpp @@ -103,13 +103,13 @@ namespace EMotionFX } - MCore::Array actorInstanceIDs; + AZStd::vector actorInstanceIDs; // Add the current actor instance and all the ones it is attached to EMotionFX::ActorInstance* currentInstance = actorInstance; while (currentInstance) { - actorInstanceIDs.Add(currentInstance->GetID()); + actorInstanceIDs.emplace_back(currentInstance->GetID()); EMotionFX::Attachment* attachment = currentInstance->GetSelfAttachment(); if (attachment) { @@ -133,10 +133,10 @@ namespace EMotionFX AZStd::string selectedNodeName = newSelection[0].GetNodeName(); AZ::u32 selectedActorInstanceId = newSelection[0].mActorInstanceID; - uint32 parentDepth = actorInstanceIDs.Find(selectedActorInstanceId); - AZ_Assert(parentDepth != MCORE_INVALIDINDEX32, "Cannot get parent depth. The selected actor instance was not shown in the selection window."); + const auto parentDepth = AZStd::find(begin(actorInstanceIDs), end(actorInstanceIDs), selectedActorInstanceId); + AZ_Assert(parentDepth != end(actorInstanceIDs), "Cannot get parent depth. The selected actor instance was not shown in the selection window."); - m_goalNode = AZStd::make_pair(selectedNodeName, parentDepth); + m_goalNode = {AZStd::move(selectedNodeName), static_cast(AZStd::distance(begin(actorInstanceIDs), parentDepth))}; UpdateInterface(); emit SelectionChanged(); diff --git a/Gems/EMotionFX/Code/Source/Editor/SkeletonModel.cpp b/Gems/EMotionFX/Code/Source/Editor/SkeletonModel.cpp index d71e0e1acf..5a4f14921d 100644 --- a/Gems/EMotionFX/Code/Source/Editor/SkeletonModel.cpp +++ b/Gems/EMotionFX/Code/Source/Editor/SkeletonModel.cpp @@ -620,7 +620,7 @@ namespace EMotionFX const AZ::u32 numNodes = skeleton->GetNumNodes(); m_nodeInfos.resize(numNodes); - AZStd::vector > boneListPerLodLevel; + AZStd::vector > boneListPerLodLevel; boneListPerLodLevel.resize(numLodLevels); for (AZ::u32 lodLevel = 0; lodLevel < numLodLevels; ++lodLevel) { @@ -635,7 +635,7 @@ namespace EMotionFX nodeInfo.m_isBone = false; for (AZ::u32 lodLevel = 0; lodLevel < numLodLevels; ++lodLevel) { - if (boneListPerLodLevel[lodLevel].Find(nodeIndex) != MCORE_INVALIDINDEX32) + if (AZStd::find(begin(boneListPerLodLevel[lodLevel]), end(boneListPerLodLevel[lodLevel]), nodeIndex) != end(boneListPerLodLevel[lodLevel])) { nodeInfo.m_isBone = true; break; diff --git a/Gems/EMotionFX/Code/Tests/AnimGraphParameterCommandsTests.cpp b/Gems/EMotionFX/Code/Tests/AnimGraphParameterCommandsTests.cpp index 9dd6e61b3c..2f5a661850 100644 --- a/Gems/EMotionFX/Code/Tests/AnimGraphParameterCommandsTests.cpp +++ b/Gems/EMotionFX/Code/Tests/AnimGraphParameterCommandsTests.cpp @@ -62,7 +62,6 @@ namespace AnimGraphParameterCommandsTests using ::MCore::GetStringIdPool; using ::MCore::ReflectionSerializer; using ::MCore::LogWarning; - using ::MCore::Array; } // namespace MCore namespace EMotionFX diff --git a/Gems/EMotionFX/Code/Tests/BoolLogicNodeTests.cpp b/Gems/EMotionFX/Code/Tests/BoolLogicNodeTests.cpp index b64c2a212f..9d2e1a11c6 100644 --- a/Gems/EMotionFX/Code/Tests/BoolLogicNodeTests.cpp +++ b/Gems/EMotionFX/Code/Tests/BoolLogicNodeTests.cpp @@ -22,7 +22,7 @@ #include #include #include -#include +#include namespace EMotionFX { diff --git a/Gems/EMotionFX/Code/Tests/Mocks/AnimGraph.h b/Gems/EMotionFX/Code/Tests/Mocks/AnimGraph.h index d3225759a1..90da8d5890 100644 --- a/Gems/EMotionFX/Code/Tests/Mocks/AnimGraph.h +++ b/Gems/EMotionFX/Code/Tests/Mocks/AnimGraph.h @@ -24,7 +24,7 @@ namespace EMotionFX MOCK_CONST_METHOD1(RecursiveFindNodeById, AnimGraphNode*(AnimGraphNodeId)); MOCK_CONST_METHOD1(RecursiveFindTransitionById, AnimGraphStateTransition*(AnimGraphConnectionId)); MOCK_CONST_METHOD2(RecursiveCollectNodesOfType, void(const AZ::TypeId& nodeType, AZStd::vector* outNodes)); - MOCK_CONST_METHOD2(RecursiveCollectTransitionConditionsOfType, void(const AZ::TypeId& conditionType, MCore::Array* outConditions)); + MOCK_CONST_METHOD2(RecursiveCollectTransitionConditionsOfType, void(const AZ::TypeId& conditionType, AZStd::vector* outConditions)); MOCK_METHOD2(RecursiveCollectObjectsOfType, void(const AZ::TypeId& objectType, AZStd::vector& outObjects)); MOCK_METHOD2(RecursiveCollectObjectsAffectedBy, void(AnimGraph* animGraph, AZStd::vector& outObjects)); //uint32 RecursiveCalcNumNodes() const; diff --git a/Gems/EMotionFX/Code/Tests/Mocks/AnimGraphInstance.h b/Gems/EMotionFX/Code/Tests/Mocks/AnimGraphInstance.h index 705bef9602..711392f6cf 100644 --- a/Gems/EMotionFX/Code/Tests/Mocks/AnimGraphInstance.h +++ b/Gems/EMotionFX/Code/Tests/Mocks/AnimGraphInstance.h @@ -99,7 +99,7 @@ namespace EMotionFX //void OnStateEnd(AnimGraphNode* state); //void OnStartTransition(AnimGraphStateTransition* transition); //void OnEndTransition(AnimGraphStateTransition* transition); - //void CollectActiveAnimGraphNodes(MCore::Array* outNodes, const AZ::TypeId& nodeType = AZ::TypeId::CreateNull()); + //void CollectActiveAnimGraphNodes(AZStd::vector* outNodes, const AZ::TypeId& nodeType = AZ::TypeId::CreateNull()); //void CollectActiveNetTimeSyncNodes(AZStd::vector* outNodes); //uint32 GetObjectFlags(uint32 objectIndex) const; //void SetObjectFlags(uint32 objectIndex, uint32 flags); diff --git a/Gems/EMotionFX/Code/Tests/Mocks/Node.h b/Gems/EMotionFX/Code/Tests/Mocks/Node.h index 712eb257d5..9479883487 100644 --- a/Gems/EMotionFX/Code/Tests/Mocks/Node.h +++ b/Gems/EMotionFX/Code/Tests/Mocks/Node.h @@ -28,7 +28,7 @@ namespace EMotionFX MOCK_METHOD1(SetParentIndex, void(uint32 parentNodeIndex)); MOCK_CONST_METHOD0(GetParentIndex, uint32()); MOCK_CONST_METHOD0(GetParentNode, Node*()); - MOCK_CONST_METHOD2(RecursiveCollectParents, void(MCore::Array& parents, bool clearParentsArray)); + MOCK_CONST_METHOD2(RecursiveCollectParents, void(AZStd::vector& parents, bool clearParentsArray)); MOCK_METHOD1(SetName, void(const char* name)); MOCK_CONST_METHOD0(GetName, const char*()); MOCK_CONST_METHOD0(GetNameString, const AZStd::string&()); diff --git a/Gems/EMotionFX/Code/Tests/SkeletalLODTests.cpp b/Gems/EMotionFX/Code/Tests/SkeletalLODTests.cpp index 1af95b0a6a..28f139fe39 100644 --- a/Gems/EMotionFX/Code/Tests/SkeletalLODTests.cpp +++ b/Gems/EMotionFX/Code/Tests/SkeletalLODTests.cpp @@ -46,8 +46,8 @@ namespace EMotionFX const Actor* actor = actorInstance->GetActor(); const Skeleton* skeleton = actor->GetSkeleton(); - const MCore::Array& enabledJoints = actorInstance->GetEnabledNodes(); - const AZ::u32 numEnabledJoints = enabledJoints.GetLength(); + const AZStd::vector& enabledJoints = actorInstance->GetEnabledNodes(); + const AZ::u32 numEnabledJoints = enabledJoints.size(); EXPECT_EQ(actorInstance->GetNumEnabledNodes(), actor->GetNumNodes() - static_cast(disabledJointNames.size())) << "The enabled joints on the actor instance are not in sync with the enabledJoints."; diff --git a/Gems/EMotionFX/Code/Tests/UI/LODSkinnedMeshTests.cpp b/Gems/EMotionFX/Code/Tests/UI/LODSkinnedMeshTests.cpp index 9a11d1bd4b..65bb056654 100644 --- a/Gems/EMotionFX/Code/Tests/UI/LODSkinnedMeshTests.cpp +++ b/Gems/EMotionFX/Code/Tests/UI/LODSkinnedMeshTests.cpp @@ -90,7 +90,6 @@ namespace EMotionFX Mesh* lodMesh = actor->GetMesh(0, 0); StandardMaterial* dummyMat = StandardMaterial::Create("Dummy Material"); actor->AddMaterial(0, dummyMat); // owns the material - actor->SetNumLODLevels(numLODs); for (int i = 1; i < numLODs; ++i) { diff --git a/Gems/EMotionFX/Code/Tests/Vector2ToVector3CompatibilityTests.cpp b/Gems/EMotionFX/Code/Tests/Vector2ToVector3CompatibilityTests.cpp index 201fb856a4..26702af550 100644 --- a/Gems/EMotionFX/Code/Tests/Vector2ToVector3CompatibilityTests.cpp +++ b/Gems/EMotionFX/Code/Tests/Vector2ToVector3CompatibilityTests.cpp @@ -25,7 +25,7 @@ #include #include #include -#include +#include namespace EMotionFX {