AnimGraphTransitionConditionCommandTests.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <AzTest/AzTest.h>
  9. #include <EMotionFX/CommandSystem/Source/AnimGraphConditionCommands.h>
  10. #include <EMotionFX/CommandSystem/Source/CommandManager.h>
  11. #include <EMotionFX/Source/AnimGraph.h>
  12. #include <EMotionFX/Source/AnimGraphTimeCondition.h>
  13. #include <EMotionFX/Source/AnimGraphStateMachine.h>
  14. #include <EMotionFX/Source/AnimGraphStateTransition.h>
  15. #include <EMotionFX/Source/Parameter/FloatSliderParameter.h>
  16. #include <EMotionFX/Source/Parameter/Parameter.h>
  17. #include <EMotionFX/Source/Parameter/ParameterFactory.h>
  18. #include <Tests/AnimGraphFixture.h>
  19. namespace EMotionFX
  20. {
  21. class AnimGraphConditionCommandTestFixture
  22. : public AnimGraphFixture
  23. {
  24. public:
  25. void ConstructGraph() override
  26. {
  27. AnimGraphFixture::ConstructGraph();
  28. AnimGraphStateMachine* node1 = aznew AnimGraphStateMachine();
  29. m_rootStateMachine->AddChildNode(node1);
  30. m_rootStateMachine->SetEntryState(node1);
  31. AnimGraphStateMachine* node2 = aznew AnimGraphStateMachine();
  32. m_rootStateMachine->AddChildNode(node2);
  33. m_transition = AddTransition(node1, node2, 1.0f);
  34. }
  35. public:
  36. AnimGraphStateTransition* m_transition = nullptr;
  37. };
  38. TEST_F(AnimGraphConditionCommandTestFixture, AdjustConditionCommandTests)
  39. {
  40. AZStd::string result;
  41. CommandSystem::CommandManager commandManager;
  42. // Add time condition.
  43. CommandSystem::CommandAddTransitionCondition* addConditionCommand = aznew CommandSystem::CommandAddTransitionCondition(
  44. m_animGraph->GetID(),
  45. m_transition->GetId(),
  46. azrtti_typeid<AnimGraphTimeCondition>());
  47. EXPECT_TRUE(commandManager.ExecuteCommand(addConditionCommand, result)) << result.c_str();
  48. EXPECT_EQ(m_transition->GetNumConditions(), 1) << "There should be a single condition.";
  49. const AZ::u32 conditionIndex = 0;
  50. AnimGraphTimeCondition* timeCondition = azdynamic_cast<AnimGraphTimeCondition*>(m_transition->GetCondition(conditionIndex));
  51. EXPECT_EQ(timeCondition->GetCountDownTime(), 1.0f) << "Condition should have the default value for the count-down time.";
  52. // 1. Adjust attribute of the time condition.
  53. const AZStd::string attributesString = AZStd::string::format("-countDownTime %f", 2.0f);
  54. CommandSystem::CommandAdjustTransitionCondition* adjustConditionCommand = aznew CommandSystem::CommandAdjustTransitionCondition(
  55. m_animGraph->GetID(),
  56. m_transition->GetId(),
  57. conditionIndex,
  58. attributesString);
  59. EXPECT_TRUE(commandManager.ExecuteCommand(adjustConditionCommand, result));
  60. // 2. Undo.
  61. EXPECT_TRUE(commandManager.Undo(result)) << result.c_str();
  62. EXPECT_EQ(timeCondition->GetCountDownTime(), 1.0f) << "Condition should be back at the default count-down time.";
  63. // 3. Redo.
  64. EXPECT_TRUE(commandManager.Redo(result)) << result.c_str();
  65. EXPECT_EQ(timeCondition->GetCountDownTime(), 2.0f) << "Condition should hold the adjusted count-down time.";
  66. }
  67. } // namespace EMotionFX