BsAnimationCurveRTTI.h 4.5 KB

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