3
0

IMovieSystem.cpp 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  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 <IMovieSystem.h>
  9. #include <AzCore/Serialization/SerializeContext.h>
  10. AZ_TYPE_INFO_WITH_NAME_IMPL(CAnimParamType, "CAnimParamType", "{E2F34955-3B07-4241-8D34-EA3BEF3B33D2}");
  11. CAnimParamType::CAnimParamType()
  12. : m_type(kAnimParamTypeInvalid) {}
  13. CAnimParamType::CAnimParamType(const AZStd::string& name)
  14. {
  15. *this = name;
  16. }
  17. CAnimParamType::CAnimParamType(AnimParamType type)
  18. {
  19. *this = type;
  20. }
  21. // Convert from old enum or int
  22. void CAnimParamType::operator =(AnimParamType type)
  23. {
  24. m_type = type;
  25. }
  26. void CAnimParamType::operator =(const AZStd::string& name)
  27. {
  28. m_type = kAnimParamTypeByString;
  29. m_name = name;
  30. }
  31. bool CAnimParamType::operator ==(const CAnimParamType& animParamType) const
  32. {
  33. if (m_type == kAnimParamTypeByString && animParamType.m_type == kAnimParamTypeByString)
  34. {
  35. return m_name == animParamType.m_name;
  36. }
  37. return m_type == animParamType.m_type;
  38. }
  39. bool CAnimParamType::operator !=(const CAnimParamType& animParamType) const
  40. {
  41. return !(*this == animParamType);
  42. }
  43. bool CAnimParamType::operator <(const CAnimParamType& animParamType) const
  44. {
  45. if (m_type == kAnimParamTypeByString && animParamType.m_type == kAnimParamTypeByString)
  46. {
  47. return m_name < animParamType.m_name;
  48. }
  49. else if (m_type == kAnimParamTypeByString)
  50. {
  51. return false; // Always sort named params last
  52. }
  53. else if (animParamType.m_type == kAnimParamTypeByString)
  54. {
  55. return true; // Always sort named params last
  56. }
  57. if (m_type < animParamType.m_type)
  58. {
  59. return true;
  60. }
  61. return false;
  62. }
  63. void CAnimParamType::SaveToXml(XmlNodeRef& xmlNode) const
  64. {
  65. if (gEnv->pMovieSystem)
  66. {
  67. gEnv->pMovieSystem->SaveParamTypeToXml(*this, xmlNode);
  68. }
  69. }
  70. void CAnimParamType::LoadFromXml(const XmlNodeRef& xmlNode, const uint version)
  71. {
  72. if (gEnv->pMovieSystem)
  73. {
  74. gEnv->pMovieSystem->LoadParamTypeFromXml(*this, xmlNode, version);
  75. }
  76. }
  77. void CAnimParamType::Serialize(XmlNodeRef& xmlNode, bool bLoading, const uint version)
  78. {
  79. if (gEnv->pMovieSystem)
  80. {
  81. gEnv->pMovieSystem->SerializeParamType(*this, xmlNode, bLoading, version);
  82. }
  83. }
  84. // SAnimContext members
  85. SAnimContext::SAnimContext()
  86. {
  87. singleFrame = false;
  88. forcePlay = false;
  89. resetting = false;
  90. time = 0;
  91. dt = 0;
  92. fps = 0;
  93. sequence = nullptr;
  94. trackMask = 0;
  95. startTime = 0;
  96. }
  97. // SCameraParams member functions
  98. SCameraParams::SCameraParams()
  99. {
  100. fov = 0.0f;
  101. nearZ = DEFAULT_NEAR;
  102. justActivated = false;
  103. }
  104. // IAnimTrack member definitions
  105. AZ_TYPE_INFO_WITH_NAME_IMPL(IAnimTrack, "IAnimTrack", "{AA0D5170-FB28-426F-BA13-7EFF6BB3AC67}");
  106. AZ_RTTI_NO_TYPE_INFO_IMPL(IAnimTrack);
  107. AZ_CLASS_ALLOCATOR_IMPL(IAnimTrack, AZ::SystemAllocator);
  108. void IAnimTrack::Reflect(AZ::ReflectContext* context)
  109. {
  110. if (auto serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
  111. {
  112. serializeContext->Class<IAnimTrack>();
  113. }
  114. }
  115. // support for AZ:: vector types - re-route to legacy types
  116. void IAnimTrack::GetValue(float time, AZ::Vector3& value, bool applyMultiplier)
  117. {
  118. Vec3 vec3;
  119. GetValue(time, vec3, applyMultiplier);
  120. value.Set(vec3.x, vec3.y, vec3.z);
  121. }
  122. void IAnimTrack::GetValue(float time, AZ::Vector4& value, bool applyMultiplier)
  123. {
  124. Vec4 vec4;
  125. GetValue(time, vec4, applyMultiplier);
  126. value.Set(vec4.x, vec4.y, vec4.z, vec4.w);
  127. }
  128. void IAnimTrack::GetValue(float time, AZ::Quaternion& value)
  129. {
  130. Quat quat;
  131. GetValue(time, quat);
  132. value.Set(quat.v.x, quat.v.y, quat.v.z, quat.w);
  133. }
  134. // support for AZ:: vector types - re-route to legacy types
  135. void IAnimTrack::SetValue(float time, AZ::Vector4& value, bool bDefault, bool applyMultiplier)
  136. {
  137. Vec4 vec4(value.GetX(), value.GetY(), value.GetZ(), value.GetW());
  138. SetValue(time, vec4, bDefault, applyMultiplier);
  139. }
  140. void IAnimTrack::SetValue(float time, AZ::Vector3& value, bool bDefault, bool applyMultiplier)
  141. {
  142. Vec3 vec3(value.GetX(), value.GetY(), value.GetZ());
  143. SetValue(time, vec3, bDefault, applyMultiplier);
  144. }
  145. void IAnimTrack::SetValue(float time, AZ::Quaternion& value, bool bDefault)
  146. {
  147. Quat quat(value.GetW(), value.GetX(), value.GetY(), value.GetZ());
  148. SetValue(time, quat, bDefault);
  149. }
  150. int IAnimTrack::NextKeyByTime(int key) const
  151. {
  152. if (key + 1 < GetNumKeys())
  153. {
  154. return key + 1;
  155. }
  156. else
  157. {
  158. return -1;
  159. }
  160. }
  161. // IAnimNode member definitions
  162. AZ_TYPE_INFO_WITH_NAME_IMPL(IAnimNode, "IAnimNode", "{0A096354-7F26-4B18-B8C0-8F10A3E0440A}");
  163. AZ_RTTI_NO_TYPE_INFO_IMPL(IAnimNode);
  164. AZ_CLASS_ALLOCATOR_IMPL(IAnimNode, AZ::SystemAllocator);
  165. void IAnimNode::Reflect(AZ::ReflectContext* context)
  166. {
  167. if (auto serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
  168. {
  169. serializeContext->Class<IAnimNode>();
  170. }
  171. }
  172. IAnimNode::SParamInfo::SParamInfo()
  173. : name("")
  174. , valueType(kAnimValueDefault)
  175. , flags(ESupportedParamFlags(0)) {};
  176. IAnimNode::SParamInfo::SParamInfo(const char* _name, CAnimParamType _paramType, AnimValueType _valueType, ESupportedParamFlags _flags)
  177. : name(_name)
  178. , paramType(_paramType)
  179. , valueType(_valueType)
  180. , flags(_flags) {};
  181. /**
  182. * O3DE_DEPRECATION_NOTICE(GHI-9326)
  183. * use equivalent SetPos that accepts AZ::Vector3
  184. **/
  185. void IAnimNode::SetPos(float time, const AZ::Vector3& pos)
  186. {
  187. Vec3 vec3(pos.GetX(), pos.GetY(), pos.GetZ());
  188. SetPos(time, vec3);
  189. }
  190. /**
  191. * O3DE_DEPRECATION_NOTICE(GHI-9326)
  192. * use equivalent SetRotate that accepts AZ::Quaternion
  193. **/
  194. void IAnimNode::SetRotate(float time, const AZ::Quaternion& rot)
  195. {
  196. Quat quat(rot.GetX(), rot.GetY(), rot.GetZ(), rot.GetW());
  197. SetRotate(time, quat);
  198. }
  199. /**
  200. * O3DE_DEPRECATION_NOTICE(GHI-9326)
  201. * use equivalent SetScale that accepts AZ::Vector3
  202. **/
  203. void IAnimNode::SetScale(float time, const AZ::Vector3& scale)
  204. {
  205. Vec3 vec3(scale.GetX(), scale.GetY(), scale.GetZ());
  206. SetScale(time, vec3);
  207. }
  208. //! Compute and return the offset which brings the current position to the given position
  209. Vec3 IAnimNode::GetOffsetPosition(const Vec3& position) { return position - GetPos(); }
  210. /**
  211. * O3DE_DEPRECATION_NOTICE(GHI-9326)
  212. * use equivalent SetParamValue that accepts AZ::Vector3
  213. **/
  214. bool IAnimNode::SetParamValue(float time, CAnimParamType param, const AZ::Vector3& value)
  215. {
  216. Vec3 vec3(value.GetX(), value.GetY(), value.GetZ());
  217. return SetParamValue(time, param, vec3);
  218. }
  219. /**
  220. * O3DE_DEPRECATION_NOTICE(GHI-9326)
  221. * use equivalent SetParamValue that accepts AZ::Vector4
  222. **/
  223. bool IAnimNode::SetParamValue(float time, CAnimParamType param, const AZ::Vector4& value)
  224. {
  225. Vec4 vec4(value.GetX(), value.GetY(), value.GetZ(), value.GetW());
  226. return SetParamValue(time, param, vec4);
  227. }
  228. /**
  229. * O3DE_DEPRECATION_NOTICE(GHI-9326)
  230. * use equivalent GetParamValue that accepts AZ::Vector4
  231. **/
  232. bool IAnimNode::GetParamValue(float time, CAnimParamType param, AZ::Vector3& value)
  233. {
  234. Vec3 vec3;
  235. const bool result = GetParamValue(time, param, vec3);
  236. value.Set(vec3.x, vec3.y, vec3.z);
  237. return result;
  238. }
  239. /**
  240. * O3DE_DEPRECATION_NOTICE(GHI-9326)
  241. * use equivalent GetParamValue that accepts AZ::Vector4
  242. **/
  243. bool IAnimNode::GetParamValue(float time, CAnimParamType param, AZ::Vector4& value)
  244. {
  245. Vec4 vec4;
  246. const bool result = GetParamValue(time, param, vec4);
  247. value.Set(vec4.x, vec4.y, vec4.z, vec4.w);
  248. return result;
  249. }
  250. // IAnimStringTable RTTI member definitions
  251. AZ_TYPE_INFO_WITH_NAME_IMPL(IAnimStringTable, "IAnimStringTable", "{35690309-9D22-41FF-80B7-8AF7C8419945}");
  252. AZ_RTTI_NO_TYPE_INFO_IMPL(IAnimStringTable);
  253. // IAnimSequence RTTI member definitions
  254. AZ_TYPE_INFO_WITH_NAME_IMPL(IAnimSequence, "IAnimSequence", "{A60F95F5-5A4A-47DB-B3BB-525BBC0BC8DB}");
  255. AZ_RTTI_NO_TYPE_INFO_IMPL(IAnimSequence);
  256. AZ_CLASS_ALLOCATOR_IMPL(IAnimSequence, AZ::SystemAllocator);
  257. void IAnimSequence::Reflect(AZ::ReflectContext* context)
  258. {
  259. if (auto serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
  260. {
  261. serializeContext->Class<IAnimSequence>();
  262. }
  263. }
  264. // IMovieSystem RTTI definitions
  265. AZ_TYPE_INFO_WITH_NAME_IMPL(IMovieSystem, "IMovieSystem", "{D8E6D6E9-830D-40DC-87F3-E9A069FBEB69}");
  266. AZ_RTTI_NO_TYPE_INFO_IMPL(IMovieSystem);