BsAnimationClipRTTI.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsCorePrerequisites.h"
  5. #include "BsRTTIType.h"
  6. #include "BsAnimationClip.h"
  7. #include "BsAnimationCurveRTTI.h"
  8. namespace BansheeEngine
  9. {
  10. /** @cond RTTI */
  11. /** @addtogroup RTTI-Impl-Core
  12. * @{
  13. */
  14. template<>
  15. struct RTTIPlainType<AnimationEvent>
  16. {
  17. enum { id = TID_AnimationEvent }; enum { hasDynamicSize = 1 };
  18. /** @copydoc RTTIPlainType::toMemory */
  19. static void toMemory(const AnimationEvent& data, char* memory)
  20. {
  21. UINT32 size = sizeof(UINT32);
  22. char* memoryStart = memory;
  23. memory += sizeof(UINT32);
  24. UINT8 version = 0;
  25. memory = rttiWriteElem(version, memory, size);
  26. memory = rttiWriteElem(data.time, memory, size);
  27. memory = rttiWriteElem(data.name, memory, size);
  28. memcpy(memoryStart, &size, sizeof(UINT32));
  29. }
  30. /** @copydoc RTTIPlainType::fromMemory */
  31. static UINT32 fromMemory(AnimationEvent& data, char* memory)
  32. {
  33. UINT32 size = 0;
  34. memory = rttiReadElem(size, memory);
  35. UINT8 version;
  36. memory = rttiReadElem(version, memory);
  37. assert(version == 0);
  38. memory = rttiReadElem(data.time, memory);
  39. memory = rttiReadElem(data.name, memory);
  40. return size;
  41. }
  42. /** @copydoc RTTIPlainType::getDynamicSize */
  43. static UINT32 getDynamicSize(const AnimationEvent& data)
  44. {
  45. UINT64 dataSize = sizeof(UINT32) * 2;
  46. dataSize += rttiGetElemSize(data.time);
  47. dataSize += rttiGetElemSize(data.name);
  48. assert(dataSize <= std::numeric_limits<UINT32>::max());
  49. return (UINT32)dataSize;
  50. }
  51. };
  52. class BS_CORE_EXPORT AnimationClipRTTI : public RTTIType <AnimationClip, Resource, AnimationClipRTTI>
  53. {
  54. private:
  55. BS_BEGIN_RTTI_MEMBERS
  56. BS_RTTI_MEMBER_PLAIN_NAMED(positionCurves, mCurves->position, 0)
  57. BS_RTTI_MEMBER_PLAIN_NAMED(rotationCurves, mCurves->rotation, 1)
  58. BS_RTTI_MEMBER_PLAIN_NAMED(scaleCurves, mCurves->scale, 2)
  59. BS_RTTI_MEMBER_PLAIN_NAMED(genericCurves, mCurves->generic, 3)
  60. BS_RTTI_MEMBER_PLAIN(mIsAdditive, 4)
  61. BS_RTTI_MEMBER_PLAIN(mLength, 5)
  62. BS_RTTI_MEMBER_PLAIN(mEvents, 6)
  63. BS_RTTI_MEMBER_PLAIN(mSampleRate, 7)
  64. BS_END_RTTI_MEMBERS
  65. public:
  66. AnimationClipRTTI()
  67. :mInitMembers(this)
  68. {
  69. }
  70. void onDeserializationEnded(IReflectable* obj, const UnorderedMap<String, UINT64>& params) override
  71. {
  72. AnimationClip* clip = static_cast<AnimationClip*>(obj);
  73. clip->initialize();
  74. }
  75. const String& getRTTIName() override
  76. {
  77. static String name = "AnimationClip";
  78. return name;
  79. }
  80. UINT32 getRTTIId() override
  81. {
  82. return TID_AnimationClip;
  83. }
  84. SPtr<IReflectable> newRTTIObject() override
  85. {
  86. return AnimationClip::createEmpty();
  87. }
  88. };
  89. /** @} */
  90. /** @endcond */
  91. }