BsAnimationCurveRTTI.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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 "BsAnimationCurve.h"
  7. namespace BansheeEngine
  8. {
  9. /** @cond RTTI */
  10. /** @addtogroup RTTI-Impl-Core
  11. * @{
  12. */
  13. template<class T> struct RTTIPlainType<TKeyframe<T>>
  14. {
  15. enum { id = TID_KeyFrame }; enum { hasDynamicSize = 0 };
  16. /** @copydoc RTTIPlainType::toMemory */
  17. static void toMemory(const TKeyframe<T>& data, char* memory)
  18. {
  19. memory = rttiWriteElem(data.value, memory);
  20. memory = rttiWriteElem(data.inTangent, memory);
  21. memory = rttiWriteElem(data.outTangent, memory);
  22. memory = rttiWriteElem(data.time, memory);
  23. }
  24. /** @copydoc RTTIPlainType::fromMemory */
  25. static UINT32 fromMemory(TKeyframe<T>& data, char* memory)
  26. {
  27. memory = rttiReadElem(data.value, memory);
  28. memory = rttiReadElem(data.inTangent, memory);
  29. memory = rttiReadElem(data.outTangent, memory);
  30. memory = rttiReadElem(data.time, memory);
  31. return sizeof(TKeyframe<T>);
  32. }
  33. /** @copydoc RTTIPlainType::getDynamicSize */
  34. static UINT32 getDynamicSize(const TKeyframe<T>& data)
  35. {
  36. assert(false);
  37. return sizeof(TKeyframe<T>);
  38. }
  39. };
  40. template<class T> struct RTTIPlainType<TAnimationCurve<T>>
  41. {
  42. enum { id = TID_AnimationCurve }; enum { hasDynamicSize = 1 };
  43. /** @copydoc RTTIPlainType::toMemory */
  44. static void toMemory(const TAnimationCurve<T>& data, char* memory)
  45. {
  46. UINT32 size = sizeof(UINT32);
  47. char* memoryStart = memory;
  48. memory += sizeof(UINT32);
  49. UINT32 version = 0; // In case the data structure changes
  50. memory = rttiWriteElem(version, memory, size);
  51. memory = rttiWriteElem(data.mStart, memory, size);
  52. memory = rttiWriteElem(data.mEnd, memory, size);
  53. memory = rttiWriteElem(data.mLength, memory, size);
  54. memory = rttiWriteElem(data.mKeyframes, memory, size);
  55. memcpy(memoryStart, &size, sizeof(UINT32));
  56. }
  57. /** @copydoc RTTIPlainType::fromMemory */
  58. static UINT32 fromMemory(TAnimationCurve<T>& data, char* memory)
  59. {
  60. UINT32 size = 0;
  61. memory = rttiReadElem(size, memory);
  62. UINT32 version;
  63. memory = rttiReadElem(version, memory);
  64. memory = rttiReadElem(data.mStart, memory);
  65. memory = rttiReadElem(data.mEnd, memory);
  66. memory = rttiReadElem(data.mLength, memory);
  67. memory = rttiReadElem(data.mKeyframes, memory);
  68. return size;
  69. }
  70. /** @copydoc RTTIPlainType::getDynamicSize */
  71. static UINT32 getDynamicSize(const TAnimationCurve<T>& data)
  72. {
  73. UINT64 dataSize = sizeof(UINT32) + sizeof(UINT32);
  74. dataSize += rttiGetElemSize(data.mStart);
  75. dataSize += rttiGetElemSize(data.mEnd);
  76. dataSize += rttiGetElemSize(data.mLength);
  77. dataSize += rttiGetElemSize(data.mKeyframes);
  78. assert(dataSize <= std::numeric_limits<UINT32>::max());
  79. return (UINT32)dataSize;
  80. }
  81. };
  82. template<class T> struct RTTIPlainType<TNamedAnimationCurve<T>>
  83. {
  84. enum { id = TID_NamedAnimationCurve }; enum { hasDynamicSize = 1 };
  85. /** @copydoc RTTIPlainType::toMemory */
  86. static void toMemory(const TNamedAnimationCurve<T>& data, char* memory)
  87. {
  88. UINT32 size = sizeof(UINT32);
  89. char* memoryStart = memory;
  90. memory += sizeof(UINT32);
  91. memory = rttiWriteElem(data.name, memory, size);
  92. memory = rttiWriteElem(data.flags, memory, size);
  93. memory = rttiWriteElem(data.curve, memory, size);
  94. memcpy(memoryStart, &size, sizeof(UINT32));
  95. }
  96. /** @copydoc RTTIPlainType::fromMemory */
  97. static UINT32 fromMemory(TNamedAnimationCurve<T>& data, char* memory)
  98. {
  99. UINT32 size = 0;
  100. memory = rttiReadElem(size, memory);
  101. memory = rttiReadElem(data.name, memory);
  102. memory = rttiReadElem(data.flags, memory);
  103. memory = rttiReadElem(data.curve, memory);
  104. return size;
  105. }
  106. /** @copydoc RTTIPlainType::getDynamicSize */
  107. static UINT32 getDynamicSize(const TNamedAnimationCurve<T>& data)
  108. {
  109. UINT64 dataSize = sizeof(UINT32);
  110. dataSize += rttiGetElemSize(data.name);
  111. dataSize += rttiGetElemSize(data.flags);
  112. dataSize += rttiGetElemSize(data.curve);
  113. assert(dataSize <= std::numeric_limits<UINT32>::max());
  114. return (UINT32)dataSize;
  115. }
  116. };
  117. /** @} */
  118. /** @endcond */
  119. }