GraphDataBehaviorTests.cpp 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453
  1. /*
  2. * 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.
  3. *
  4. * SPDX-License-Identifier: Apache-2.0 OR MIT
  5. *
  6. */
  7. #include <AzCore/Component/ComponentApplication.h>
  8. #include <AzCore/Math/MathReflection.h>
  9. #include <AzCore/Name/NameDictionary.h>
  10. #include <AzCore/RTTI/BehaviorContext.h>
  11. #include <AzCore/RTTI/ReflectionManager.h>
  12. #include <AzCore/Serialization/Json/RegistrationContext.h>
  13. #include <AzCore/std/smart_ptr/make_shared.h>
  14. #include <AzCore/std/smart_ptr/shared_ptr.h>
  15. #include <AzCore/UnitTest/TestTypes.h>
  16. #include <AzTest/AzTest.h>
  17. #include <SceneAPI/SceneCore/DataTypes/IGraphObject.h>
  18. #include <SceneAPI/SceneCore/DataTypes/GraphData/IMeshData.h>
  19. #include <SceneAPI/SceneData/ReflectionRegistrar.h>
  20. #include <SceneAPI/SceneData/GraphData/MeshData.h>
  21. #include <SceneAPI/SceneData/GraphData/MeshVertexBitangentData.h>
  22. #include <SceneAPI/SceneData/GraphData/MeshVertexColorData.h>
  23. #include <SceneAPI/SceneData/GraphData/MeshVertexTangentData.h>
  24. #include <SceneAPI/SceneData/GraphData/MeshVertexUVData.h>
  25. #include <SceneAPI/SceneData/GraphData/AnimationData.h>
  26. #include <SceneAPI/SceneData/GraphData/BlendShapeData.h>
  27. namespace AZ
  28. {
  29. namespace SceneAPI
  30. {
  31. namespace Containers
  32. {
  33. struct MockGraphData final
  34. {
  35. AZ_TYPE_INFO(MockGraphData, "{06996B36-E204-4ECC-9F3C-3D644B8CAE07}");
  36. MockGraphData() = default;
  37. ~MockGraphData() = default;
  38. static bool FillData(AZStd::any& data)
  39. {
  40. if (data.get_type_info().m_id == azrtti_typeid<AZ::SceneData::GraphData::MeshData>())
  41. {
  42. auto* meshData = AZStd::any_cast<AZ::SceneData::GraphData::MeshData>(&data);
  43. meshData->AddPosition(Vector3{1.0f, 1.1f, 2.2f});
  44. meshData->AddPosition(Vector3{2.0f, 2.1f, 3.2f});
  45. meshData->AddPosition(Vector3{3.0f, 3.1f, 4.2f});
  46. meshData->AddPosition(Vector3{4.0f, 4.1f, 5.2f});
  47. meshData->AddNormal(Vector3{0.1f, 0.2f, 0.3f});
  48. meshData->AddNormal(Vector3{0.4f, 0.5f, 0.6f});
  49. meshData->SetOriginalUnitSizeInMeters(10.0f);
  50. meshData->SetUnitSizeInMeters(0.5f);
  51. meshData->SetVertexIndexToControlPointIndexMap(0, 10);
  52. meshData->SetVertexIndexToControlPointIndexMap(1, 11);
  53. meshData->SetVertexIndexToControlPointIndexMap(2, 12);
  54. meshData->SetVertexIndexToControlPointIndexMap(3, 13);
  55. meshData->AddFace({0, 1, 2}, 1);
  56. meshData->AddFace({3, 4, 5}, 2);
  57. meshData->AddFace({6, 7, 8}, 3);
  58. return true;
  59. }
  60. else if (data.get_type_info().m_id == azrtti_typeid<AZ::SceneData::GraphData::MeshVertexColorData>())
  61. {
  62. auto* colorData = AZStd::any_cast<AZ::SceneData::GraphData::MeshVertexColorData>(&data);
  63. colorData->SetCustomName("mesh_vertex_color_data");
  64. colorData->AppendColor(AZ::SceneAPI::DataTypes::Color{0.1f, 0.2f, 0.3f, 0.4f});
  65. colorData->AppendColor(AZ::SceneAPI::DataTypes::Color{0.5f, 0.6f, 0.7f, 0.8f});
  66. return true;
  67. }
  68. else if (data.get_type_info().m_id == azrtti_typeid<AZ::SceneData::GraphData::MeshVertexUVData>())
  69. {
  70. auto* uvData = AZStd::any_cast<AZ::SceneData::GraphData::MeshVertexUVData>(&data);
  71. uvData->SetCustomName("mesh_vertex_uv_data");
  72. uvData->AppendUV(AZ::Vector2{0.1f, 0.2f});
  73. uvData->AppendUV(AZ::Vector2{0.3f, 0.4f});
  74. return true;
  75. }
  76. else if (data.get_type_info().m_id == azrtti_typeid<AZ::SceneData::GraphData::MeshVertexBitangentData>())
  77. {
  78. auto* bitangentData = AZStd::any_cast<AZ::SceneData::GraphData::MeshVertexBitangentData>(&data);
  79. bitangentData->AppendBitangent(AZ::Vector3{0.12f, 0.34f, 0.56f});
  80. bitangentData->AppendBitangent(AZ::Vector3{0.77f, 0.88f, 0.99f});
  81. bitangentData->SetTangentSpace(AZ::SceneAPI::DataTypes::TangentSpace::FromSourceScene);
  82. bitangentData->SetBitangentSetIndex(1);
  83. return true;
  84. }
  85. else if (data.get_type_info().m_id == azrtti_typeid<AZ::SceneData::GraphData::MeshVertexTangentData>())
  86. {
  87. auto* tangentData = AZStd::any_cast<AZ::SceneData::GraphData::MeshVertexTangentData>(&data);
  88. tangentData->AppendTangent(AZ::Vector4{0.12f, 0.34f, 0.56f, 0.78f});
  89. tangentData->AppendTangent(AZ::Vector4{0.18f, 0.28f, 0.19f, 0.29f});
  90. tangentData->AppendTangent(AZ::Vector4{0.21f, 0.43f, 0.65f, 0.87f});
  91. tangentData->SetTangentSpace(AZ::SceneAPI::DataTypes::TangentSpace::EMotionFX);
  92. tangentData->SetTangentSetIndex(2);
  93. return true;
  94. }
  95. else if (data.get_type_info().m_id == azrtti_typeid<AZ::SceneData::GraphData::AnimationData>())
  96. {
  97. auto* animationData = AZStd::any_cast<AZ::SceneData::GraphData::AnimationData>(&data);
  98. animationData->ReserveKeyFrames(3);
  99. animationData->AddKeyFrame(DataTypes::MatrixType::CreateFromValue(1.0));
  100. animationData->AddKeyFrame(DataTypes::MatrixType::CreateFromValue(2.0));
  101. animationData->AddKeyFrame(DataTypes::MatrixType::CreateFromValue(3.0));
  102. animationData->SetTimeStepBetweenFrames(4.0);
  103. return true;
  104. }
  105. else if (data.get_type_info().m_id == azrtti_typeid<AZ::SceneData::GraphData::BlendShapeAnimationData>())
  106. {
  107. auto* blendShapeAnimationData = AZStd::any_cast<AZ::SceneData::GraphData::BlendShapeAnimationData>(&data);
  108. blendShapeAnimationData->SetBlendShapeName("mockBlendShapeName");
  109. blendShapeAnimationData->ReserveKeyFrames(3);
  110. blendShapeAnimationData->AddKeyFrame(1.0);
  111. blendShapeAnimationData->AddKeyFrame(2.0);
  112. blendShapeAnimationData->AddKeyFrame(3.0);
  113. blendShapeAnimationData->SetTimeStepBetweenFrames(4.0);
  114. return true;
  115. }
  116. else if (data.get_type_info().m_id == azrtti_typeid<AZ::SceneData::GraphData::BlendShapeData>())
  117. {
  118. auto* blendShapeData = AZStd::any_cast<AZ::SceneData::GraphData::BlendShapeData>(&data);
  119. blendShapeData->AddPosition({ 1.0, 2.0, 3.0 });
  120. blendShapeData->AddPosition({ 2.0, 3.0, 4.0 });
  121. blendShapeData->AddPosition({ 3.0, 4.0, 5.0 });
  122. blendShapeData->AddNormal({ 0.1, 0.2, 0.3 });
  123. blendShapeData->AddNormal({ 0.2, 0.3, 0.4 });
  124. blendShapeData->AddNormal({ 0.3, 0.4, 0.5 });
  125. blendShapeData->AddTangentAndBitangent(Vector4{ 0.1f, 0.2f, 0.3f, 0.4f }, { 0.0, 0.1, 0.2 });
  126. blendShapeData->AddTangentAndBitangent(Vector4{ 0.2f, 0.3f, 0.4f, 0.5f }, { 0.1, 0.2, 0.3 });
  127. blendShapeData->AddTangentAndBitangent(Vector4{ 0.3f, 0.4f, 0.5f, 0.6f }, { 0.2, 0.3, 0.4 });
  128. blendShapeData->AddUV(Vector2{ 0.9, 0.8 }, 0);
  129. blendShapeData->AddUV(Vector2{ 0.7, 0.7 }, 1);
  130. blendShapeData->AddUV(Vector2{ 0.6, 0.6 }, 2);
  131. blendShapeData->AddColor(DataTypes::Color{ 0.1, 0.2, 0.3, 0.4 }, 0);
  132. blendShapeData->AddColor(DataTypes::Color{ 0.2, 0.3, 0.4, 0.5 }, 1);
  133. blendShapeData->AddColor(DataTypes::Color{ 0.3, 0.4, 0.5, 0.6 }, 2);
  134. blendShapeData->AddFace({ 0, 1, 2 });
  135. blendShapeData->AddFace({ 1, 2, 0 });
  136. blendShapeData->AddFace({ 2, 0, 1 });
  137. blendShapeData->SetVertexIndexToControlPointIndexMap(0, 1);
  138. blendShapeData->SetVertexIndexToControlPointIndexMap(1, 2);
  139. blendShapeData->SetVertexIndexToControlPointIndexMap(2, 0);
  140. return true;
  141. }
  142. return false;
  143. }
  144. static void Reflect(ReflectContext* context)
  145. {
  146. BehaviorContext* behaviorContext = azrtti_cast<BehaviorContext*>(context);
  147. if (behaviorContext)
  148. {
  149. behaviorContext->Class<MockGraphData>()
  150. ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
  151. ->Attribute(AZ::Script::Attributes::Module, "scene")
  152. ->Method("FillData", &MockGraphData::FillData);
  153. }
  154. }
  155. };
  156. class GrapDatahBehaviorScriptTest
  157. : public UnitTest::AllocatorsFixture
  158. {
  159. public:
  160. AZStd::unique_ptr<AZ::ScriptContext> m_scriptContext;
  161. AZStd::unique_ptr<AZ::BehaviorContext> m_behaviorContext;
  162. AZStd::unique_ptr<AZ::SerializeContext> m_serializeContext;
  163. static void TestExpectTrue(bool value)
  164. {
  165. EXPECT_TRUE(value);
  166. }
  167. static void TestExpectIntegerEquals(AZ::s64 lhs, AZ::s64 rhs)
  168. {
  169. EXPECT_EQ(lhs, rhs);
  170. }
  171. static void TestExpectFloatEquals(float lhs, float rhs)
  172. {
  173. EXPECT_EQ(lhs, rhs);
  174. }
  175. void SetUp() override
  176. {
  177. UnitTest::AllocatorsFixture::SetUp();
  178. AZ::NameDictionary::Create();
  179. m_serializeContext = AZStd::make_unique<AZ::SerializeContext>();
  180. AZ::SceneAPI::RegisterDataTypeReflection(m_serializeContext.get());
  181. m_behaviorContext = AZStd::make_unique<AZ::BehaviorContext>();
  182. m_behaviorContext->Method("TestExpectTrue", &TestExpectTrue);
  183. m_behaviorContext->Method("TestExpectIntegerEquals", &TestExpectIntegerEquals);
  184. m_behaviorContext->Method("TestExpectFloatEquals", &TestExpectFloatEquals);
  185. MockGraphData::Reflect(m_behaviorContext.get());
  186. AZ::MathReflect(m_behaviorContext.get());
  187. AZ::SceneAPI::RegisterDataTypeBehaviorReflection(m_behaviorContext.get());
  188. m_scriptContext = AZStd::make_unique<AZ::ScriptContext>();
  189. m_scriptContext->BindTo(m_behaviorContext.get());
  190. }
  191. void TearDown() override
  192. {
  193. m_scriptContext.reset();
  194. m_serializeContext.reset();
  195. m_behaviorContext.reset();
  196. AZ::NameDictionary::Destroy();
  197. UnitTest::AllocatorsFixture::TearDown();
  198. }
  199. void ExpectExecute(AZStd::string_view script)
  200. {
  201. EXPECT_TRUE(m_scriptContext->Execute(script.data()));
  202. }
  203. };
  204. TEST_F(GrapDatahBehaviorScriptTest, SceneGraph_MeshData_AccessWorks)
  205. {
  206. ExpectExecute("meshData = MeshData()");
  207. ExpectExecute("TestExpectTrue(meshData ~= nil)");
  208. ExpectExecute("MockGraphData.FillData(meshData)");
  209. ExpectExecute("TestExpectIntegerEquals(meshData:GetVertexCount(), 4)");
  210. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(0).x, 1.0)");
  211. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(0).y, 1.1)");
  212. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(0).z, 2.2)");
  213. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(1).x, 2.0)");
  214. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(1).y, 2.1)");
  215. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(1).z, 3.2)");
  216. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(2).x, 3.0)");
  217. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(2).y, 3.1)");
  218. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(2).z, 4.2)");
  219. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(3).x, 4.0)");
  220. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(3).y, 4.1)");
  221. ExpectExecute("TestExpectFloatEquals(meshData:GetPosition(3).z, 5.2)");
  222. ExpectExecute("TestExpectTrue(meshData:HasNormalData())");
  223. ExpectExecute("TestExpectFloatEquals(meshData:GetNormal(0).x, 0.1)");
  224. ExpectExecute("TestExpectFloatEquals(meshData:GetNormal(0).y, 0.2)");
  225. ExpectExecute("TestExpectFloatEquals(meshData:GetNormal(0).z, 0.3)");
  226. ExpectExecute("TestExpectFloatEquals(meshData:GetNormal(1).x, 0.4)");
  227. ExpectExecute("TestExpectFloatEquals(meshData:GetNormal(1).y, 0.5)");
  228. ExpectExecute("TestExpectFloatEquals(meshData:GetNormal(1).z, 0.6)");
  229. ExpectExecute("TestExpectFloatEquals(meshData:GetOriginalUnitSizeInMeters(), 10.0)");
  230. ExpectExecute("TestExpectFloatEquals(meshData:GetUnitSizeInMeters(), 0.5)");
  231. ExpectExecute("TestExpectIntegerEquals(meshData:GetUsedControlPointCount(), 4)");
  232. ExpectExecute("TestExpectIntegerEquals(meshData:GetControlPointIndex(0), 10)");
  233. ExpectExecute("TestExpectIntegerEquals(meshData:GetControlPointIndex(1), 11)");
  234. ExpectExecute("TestExpectIntegerEquals(meshData:GetControlPointIndex(2), 12)");
  235. ExpectExecute("TestExpectIntegerEquals(meshData:GetControlPointIndex(3), 13)");
  236. ExpectExecute("TestExpectIntegerEquals(meshData:GetUsedPointIndexForControlPoint(10), 0)");
  237. ExpectExecute("TestExpectIntegerEquals(meshData:GetUsedPointIndexForControlPoint(11), 1)");
  238. ExpectExecute("TestExpectIntegerEquals(meshData:GetUsedPointIndexForControlPoint(12), 2)");
  239. ExpectExecute("TestExpectIntegerEquals(meshData:GetUsedPointIndexForControlPoint(13), 3)");
  240. ExpectExecute("TestExpectIntegerEquals(meshData:GetUsedPointIndexForControlPoint(0), -1)");
  241. ExpectExecute("TestExpectIntegerEquals(meshData:GetFaceCount(), 3)");
  242. ExpectExecute("TestExpectIntegerEquals(meshData:GetVertexIndex(0, 0), 0)");
  243. ExpectExecute("TestExpectIntegerEquals(meshData:GetVertexIndex(0, 1), 1)");
  244. ExpectExecute("TestExpectIntegerEquals(meshData:GetVertexIndex(0, 2), 2)");
  245. ExpectExecute("TestExpectIntegerEquals(meshData:GetVertexIndex(2, 0), 6)");
  246. ExpectExecute("TestExpectIntegerEquals(meshData:GetVertexIndex(2, 1), 7)");
  247. ExpectExecute("TestExpectIntegerEquals(meshData:GetVertexIndex(2, 2), 8)");
  248. ExpectExecute("TestExpectIntegerEquals(meshData:GetFaceMaterialId(2), 3)");
  249. ExpectExecute("TestExpectIntegerEquals(meshData:GetFaceMaterialId(1), 2)");
  250. ExpectExecute("TestExpectIntegerEquals(meshData:GetFaceMaterialId(0), 1)");
  251. ExpectExecute("TestExpectIntegerEquals(meshData:GetFaceInfo(0):GetVertexIndex(0), 0)");
  252. ExpectExecute("TestExpectIntegerEquals(meshData:GetFaceInfo(0):GetVertexIndex(1), 1)");
  253. ExpectExecute("TestExpectIntegerEquals(meshData:GetFaceInfo(0):GetVertexIndex(2), 2)");
  254. }
  255. TEST_F(GrapDatahBehaviorScriptTest, SceneGraph_MeshVertexColorData_AccessWorks)
  256. {
  257. ExpectExecute("meshVertexColorData = MeshVertexColorData()");
  258. ExpectExecute("TestExpectTrue(meshVertexColorData ~= nil)");
  259. ExpectExecute("MockGraphData.FillData(meshVertexColorData)");
  260. ExpectExecute("TestExpectTrue(meshVertexColorData:GetCustomName() == 'mesh_vertex_color_data')");
  261. ExpectExecute("TestExpectIntegerEquals(meshVertexColorData:GetCount(), 2)");
  262. ExpectExecute("TestExpectFloatEquals(meshVertexColorData:GetColor(0).red, 0.1)");
  263. ExpectExecute("TestExpectFloatEquals(meshVertexColorData:GetColor(0).green, 0.2)");
  264. ExpectExecute("TestExpectFloatEquals(meshVertexColorData:GetColor(0).blue, 0.3)");
  265. ExpectExecute("TestExpectFloatEquals(meshVertexColorData:GetColor(0).alpha, 0.4)");
  266. ExpectExecute("colorOne = meshVertexColorData:GetColor(1)");
  267. ExpectExecute("TestExpectFloatEquals(colorOne.red, 0.5)");
  268. ExpectExecute("TestExpectFloatEquals(colorOne.green, 0.6)");
  269. ExpectExecute("TestExpectFloatEquals(colorOne.blue, 0.7)");
  270. ExpectExecute("TestExpectFloatEquals(colorOne.alpha, 0.8)");
  271. }
  272. TEST_F(GrapDatahBehaviorScriptTest, SceneGraph_MeshVertexUVData_AccessWorks)
  273. {
  274. ExpectExecute("meshVertexUVData = MeshVertexUVData()");
  275. ExpectExecute("TestExpectTrue(meshVertexUVData ~= nil)");
  276. ExpectExecute("MockGraphData.FillData(meshVertexUVData)");
  277. ExpectExecute("TestExpectTrue(meshVertexUVData:GetCustomName() == 'mesh_vertex_uv_data')");
  278. ExpectExecute("TestExpectIntegerEquals(meshVertexUVData:GetCount(), 2)");
  279. ExpectExecute("TestExpectFloatEquals(meshVertexUVData:GetUV(0).x, 0.1)");
  280. ExpectExecute("TestExpectFloatEquals(meshVertexUVData:GetUV(0).y, 0.2)");
  281. ExpectExecute("uvOne = meshVertexUVData:GetUV(1)");
  282. ExpectExecute("TestExpectFloatEquals(uvOne.x, 0.3)");
  283. ExpectExecute("TestExpectFloatEquals(uvOne.y, 0.4)");
  284. }
  285. TEST_F(GrapDatahBehaviorScriptTest, SceneGraph_MeshVertexBitangentData_AccessWorks)
  286. {
  287. ExpectExecute("meshVertexBitangentData = MeshVertexBitangentData()");
  288. ExpectExecute("TestExpectTrue(meshVertexBitangentData ~= nil)");
  289. ExpectExecute("MockGraphData.FillData(meshVertexBitangentData)");
  290. ExpectExecute("TestExpectIntegerEquals(meshVertexBitangentData:GetCount(), 2)");
  291. ExpectExecute("TestExpectFloatEquals(meshVertexBitangentData:GetBitangent(0).x, 0.12)");
  292. ExpectExecute("TestExpectFloatEquals(meshVertexBitangentData:GetBitangent(0).y, 0.34)");
  293. ExpectExecute("TestExpectFloatEquals(meshVertexBitangentData:GetBitangent(0).z, 0.56)");
  294. ExpectExecute("bitangentData = meshVertexBitangentData:GetBitangent(1)");
  295. ExpectExecute("TestExpectFloatEquals(bitangentData.x, 0.77)");
  296. ExpectExecute("TestExpectFloatEquals(bitangentData.y, 0.88)");
  297. ExpectExecute("TestExpectFloatEquals(bitangentData.z, 0.99)");
  298. ExpectExecute("TestExpectIntegerEquals(meshVertexBitangentData:GetBitangentSetIndex(), 1)");
  299. ExpectExecute("TestExpectTrue(meshVertexBitangentData:GetTangentSpace(), MeshVertexBitangentData.FromSourceScene)");
  300. }
  301. TEST_F(GrapDatahBehaviorScriptTest, SceneGraph_MeshVertexTangentData_AccessWorks)
  302. {
  303. ExpectExecute("meshVertexTangentData = MeshVertexTangentData()");
  304. ExpectExecute("TestExpectTrue(meshVertexTangentData ~= nil)");
  305. ExpectExecute("MockGraphData.FillData(meshVertexTangentData)");
  306. ExpectExecute("TestExpectIntegerEquals(meshVertexTangentData:GetCount(), 3)");
  307. ExpectExecute("TestExpectFloatEquals(meshVertexTangentData:GetTangent(0).x, 0.12)");
  308. ExpectExecute("TestExpectFloatEquals(meshVertexTangentData:GetTangent(0).y, 0.34)");
  309. ExpectExecute("TestExpectFloatEquals(meshVertexTangentData:GetTangent(0).z, 0.56)");
  310. ExpectExecute("TestExpectFloatEquals(meshVertexTangentData:GetTangent(0).w, 0.78)");
  311. ExpectExecute("tangentData = meshVertexTangentData:GetTangent(1)");
  312. ExpectExecute("TestExpectFloatEquals(tangentData.x, 0.18)");
  313. ExpectExecute("TestExpectFloatEquals(tangentData.y, 0.28)");
  314. ExpectExecute("TestExpectFloatEquals(tangentData.z, 0.19)");
  315. ExpectExecute("TestExpectFloatEquals(tangentData.w, 0.29)");
  316. ExpectExecute("TestExpectIntegerEquals(meshVertexTangentData:GetTangentSetIndex(), 2)");
  317. ExpectExecute("TestExpectTrue(meshVertexTangentData:GetTangentSpace(), MeshVertexTangentData.EMotionFX)");
  318. }
  319. TEST_F(GrapDatahBehaviorScriptTest, SceneGraph_AnimationData_AccessWorks)
  320. {
  321. ExpectExecute("animationData = AnimationData()");
  322. ExpectExecute("TestExpectTrue(animationData ~= nil)");
  323. ExpectExecute("MockGraphData.FillData(animationData)");
  324. ExpectExecute("TestExpectIntegerEquals(animationData:GetKeyFrameCount(), 3)");
  325. ExpectExecute("TestExpectFloatEquals(animationData:GetTimeStepBetweenFrames(), 4.0)");
  326. ExpectExecute("TestExpectFloatEquals(animationData:GetKeyFrame(0).basisX.x, 1.0)");
  327. ExpectExecute("TestExpectFloatEquals(animationData:GetKeyFrame(1).basisX.y, 2.0)");
  328. ExpectExecute("TestExpectFloatEquals(animationData:GetKeyFrame(2).basisX.z, 3.0)");
  329. }
  330. TEST_F(GrapDatahBehaviorScriptTest, SceneGraph_BlendShapeAnimationData_AccessWorks)
  331. {
  332. ExpectExecute("blendShapeAnimationData = BlendShapeAnimationData()");
  333. ExpectExecute("TestExpectTrue(blendShapeAnimationData ~= nil)");
  334. ExpectExecute("MockGraphData.FillData(blendShapeAnimationData)");
  335. ExpectExecute("TestExpectTrue(blendShapeAnimationData:GetBlendShapeName() == 'mockBlendShapeName')");
  336. ExpectExecute("TestExpectIntegerEquals(blendShapeAnimationData:GetKeyFrameCount(), 3)");
  337. ExpectExecute("TestExpectFloatEquals(blendShapeAnimationData:GetKeyFrame(0), 1.0)");
  338. ExpectExecute("TestExpectFloatEquals(blendShapeAnimationData:GetKeyFrame(1), 2.0)");
  339. ExpectExecute("TestExpectFloatEquals(blendShapeAnimationData:GetKeyFrame(2), 3.0)");
  340. ExpectExecute("TestExpectFloatEquals(blendShapeAnimationData:GetTimeStepBetweenFrames(), 4.0)");
  341. }
  342. TEST_F(GrapDatahBehaviorScriptTest, SceneGraph_BlendShapeData_AccessWorks)
  343. {
  344. ExpectExecute("blendShapeData = BlendShapeData()");
  345. ExpectExecute("TestExpectTrue(blendShapeData ~= nil)");
  346. ExpectExecute("MockGraphData.FillData(blendShapeData)");
  347. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetUsedControlPointCount(), 3)");
  348. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetVertexCount(), 3)");
  349. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetFaceCount(), 3)");
  350. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetFaceVertexIndex(0, 2), 2)");
  351. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetFaceVertexIndex(1, 0), 1)");
  352. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetFaceVertexIndex(2, 1), 0)");
  353. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetControlPointIndex(0), 1)");
  354. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetControlPointIndex(1), 2)");
  355. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetControlPointIndex(2), 0)");
  356. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetUsedPointIndexForControlPoint(0), 2)");
  357. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetUsedPointIndexForControlPoint(1), 0)");
  358. ExpectExecute("TestExpectIntegerEquals(blendShapeData:GetUsedPointIndexForControlPoint(2), 1)");
  359. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetPosition(0).x, 1.0)");
  360. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetPosition(0).y, 2.0)");
  361. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetPosition(0).z, 3.0)");
  362. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetPosition(1).x, 2.0)");
  363. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetPosition(1).y, 3.0)");
  364. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetPosition(1).z, 4.0)");
  365. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetPosition(2).x, 3.0)");
  366. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetPosition(2).y, 4.0)");
  367. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetPosition(2).z, 5.0)");
  368. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetNormal(0).x, 0.1)");
  369. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetNormal(0).y, 0.2)");
  370. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetNormal(0).z, 0.3)");
  371. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetNormal(1).x, 0.2)");
  372. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetNormal(1).y, 0.3)");
  373. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetNormal(1).z, 0.4)");
  374. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetNormal(2).x, 0.3)");
  375. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetNormal(2).y, 0.4)");
  376. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetNormal(2).z, 0.5)");
  377. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetFaceInfo(0):GetVertexIndex(0), 0)");
  378. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetFaceInfo(0):GetVertexIndex(1), 1)");
  379. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetFaceInfo(0):GetVertexIndex(2), 2)");
  380. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetFaceInfo(1):GetVertexIndex(0), 1)");
  381. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetFaceInfo(1):GetVertexIndex(1), 2)");
  382. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetFaceInfo(1):GetVertexIndex(2), 0)");
  383. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetFaceInfo(2):GetVertexIndex(0), 2)");
  384. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetFaceInfo(2):GetVertexIndex(1), 0)");
  385. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetFaceInfo(2):GetVertexIndex(2), 1)");
  386. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetUV(0, 0).x, 0.9)");
  387. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetUV(0, 0).y, 0.8)");
  388. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetUV(0, 1).x, 0.7)");
  389. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetUV(0, 1).y, 0.7)");
  390. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetUV(0, 2).x, 0.6)");
  391. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetUV(0, 2).y, 0.6)");
  392. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(0, 0).red, 0.1)");
  393. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(0, 0).green, 0.2)");
  394. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(0, 0).blue, 0.3)");
  395. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(0, 0).alpha, 0.4)");
  396. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(1, 0).red, 0.2)");
  397. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(1, 0).green, 0.3)");
  398. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(1, 0).blue, 0.4)");
  399. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(1, 0).alpha, 0.5)");
  400. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(2, 0).red, 0.3)");
  401. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(2, 0).green, 0.4)");
  402. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(2, 0).blue, 0.5)");
  403. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetColor(2, 0).alpha, 0.6)");
  404. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(0).x, 0.1)");
  405. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(0).y, 0.2)");
  406. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(0).z, 0.3)");
  407. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(0).w, 0.4)");
  408. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(1).x, 0.2)");
  409. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(1).y, 0.3)");
  410. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(1).z, 0.4)");
  411. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(1).w, 0.5)");
  412. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(2).x, 0.3)");
  413. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(2).y, 0.4)");
  414. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(2).z, 0.5)");
  415. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetTangent(2).w, 0.6)");
  416. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetBitangent(0).x, 0.0)");
  417. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetBitangent(0).y, 0.1)");
  418. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetBitangent(0).z, 0.2)");
  419. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetBitangent(1).x, 0.1)");
  420. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetBitangent(1).y, 0.2)");
  421. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetBitangent(1).z, 0.3)");
  422. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetBitangent(2).x, 0.2)");
  423. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetBitangent(2).y, 0.3)");
  424. ExpectExecute("TestExpectFloatEquals(blendShapeData:GetBitangent(2).z, 0.4)");
  425. }
  426. }
  427. }
  428. }