| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
- //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
- #pragma once
- #include "BsCorePrerequisites.h"
- #include "BsRTTIType.h"
- #include "BsAnimationCurve.h"
- namespace BansheeEngine
- {
- /** @cond RTTI */
- /** @addtogroup RTTI-Impl-Core
- * @{
- */
- template<class T> struct RTTIPlainType<TKeyframe<T>>
- {
- enum { id = TID_KeyFrame }; enum { hasDynamicSize = 0 };
- /** @copydoc RTTIPlainType::toMemory */
- static void toMemory(const TKeyframe<T>& data, char* memory)
- {
- UINT32 size = sizeof(UINT32);
- char* memoryStart = memory;
- memory += sizeof(UINT32);
- memory = rttiWriteElem(data.value, memory, size);
- memory = rttiWriteElem(data.inTangent, memory, size);
- memory = rttiWriteElem(data.outTangent, memory, size);
- memory = rttiWriteElem(data.time, memory, size);
- memcpy(memoryStart, &size, sizeof(UINT32));
- }
- /** @copydoc RTTIPlainType::fromMemory */
- static UINT32 fromMemory(TKeyframe<T>& data, char* memory)
- {
- UINT32 size = 0;
- memory = rttiReadElem(size, memory);
- memory = rttiReadElem(data.value, memory);
- memory = rttiReadElem(data.inTangent, memory);
- memory = rttiReadElem(data.outTangent, memory);
- memory = rttiReadElem(data.time, memory);
-
- return size;
- }
- /** @copydoc RTTIPlainType::getDynamicSize */
- static UINT32 getDynamicSize(const TKeyframe<T>& data)
- {
- UINT64 dataSize = sizeof(UINT32);
- dataSize += rttiGetElemSize(data.value);
- dataSize += rttiGetElemSize(data.inTangent);
- dataSize += rttiGetElemSize(data.outTangent);
- dataSize += rttiGetElemSize(data.time);
- assert(dataSize <= std::numeric_limits<UINT32>::max());
- return (UINT32)dataSize;
- }
- };
- template<class T> struct RTTIPlainType<TAnimationCurve<T>>
- {
- enum { id = TID_AnimationCurve }; enum { hasDynamicSize = 1 };
- /** @copydoc RTTIPlainType::toMemory */
- static void toMemory(const TAnimationCurve<T>& data, char* memory)
- {
- UINT32 size = sizeof(UINT32);
- char* memoryStart = memory;
- memory += sizeof(UINT32);
- UINT32 version = 0; // In case the data structure changes
- memory = rttiWriteElem(version, memory, size);
- memory = rttiWriteElem(data.mStart, memory, size);
- memory = rttiWriteElem(data.mEnd, memory, size);
- memory = rttiWriteElem(data.mLength, memory, size);
- memory = rttiWriteElem(data.mKeyframes, memory, size);
- memcpy(memoryStart, &size, sizeof(UINT32));
- }
- /** @copydoc RTTIPlainType::fromMemory */
- static UINT32 fromMemory(TAnimationCurve<T>& data, char* memory)
- {
- UINT32 size = 0;
- memory = rttiReadElem(size, memory);
- UINT32 version;
- memory = rttiReadElem(version, memory);
- memory = rttiReadElem(data.mStart, memory);
- memory = rttiReadElem(data.mEnd, memory);
- memory = rttiReadElem(data.mLength, memory);
- memory = rttiReadElem(data.mKeyframes, memory);
- return size;
- }
- /** @copydoc RTTIPlainType::getDynamicSize */
- static UINT32 getDynamicSize(const TAnimationCurve<T>& data)
- {
- UINT64 dataSize = sizeof(UINT32) + sizeof(UINT32);
- dataSize += rttiGetElemSize(data.mStart);
- dataSize += rttiGetElemSize(data.mEnd);
- dataSize += rttiGetElemSize(data.mLength);
- dataSize += rttiGetElemSize(data.mKeyframes);
- assert(dataSize <= std::numeric_limits<UINT32>::max());
- return (UINT32)dataSize;
- }
- };
- template<class T> struct RTTIPlainType<TNamedAnimationCurve<T>>
- {
- enum { id = TID_NamedAnimationCurve }; enum { hasDynamicSize = 1 };
- /** @copydoc RTTIPlainType::toMemory */
- static void toMemory(const TNamedAnimationCurve<T>& data, char* memory)
- {
- UINT32 size = sizeof(UINT32);
- char* memoryStart = memory;
- memory += sizeof(UINT32);
- memory = rttiWriteElem(data.name, memory, size);
- memory = rttiWriteElem(data.curve, memory, size);
- memcpy(memoryStart, &size, sizeof(UINT32));
- }
- /** @copydoc RTTIPlainType::fromMemory */
- static UINT32 fromMemory(TNamedAnimationCurve<T>& data, char* memory)
- {
- UINT32 size = 0;
- memory = rttiReadElem(size, memory);
- memory = rttiReadElem(data.name, memory);
- memory = rttiReadElem(data.curve, memory);
- return size;
- }
- /** @copydoc RTTIPlainType::getDynamicSize */
- static UINT32 getDynamicSize(const TNamedAnimationCurve<T>& data)
- {
- UINT64 dataSize = sizeof(UINT32);
- dataSize += rttiGetElemSize(data.name);
- dataSize += rttiGetElemSize(data.curve);
- assert(dataSize <= std::numeric_limits<UINT32>::max());
- return (UINT32)dataSize;
- }
- };
-
- /** @} */
- /** @endcond */
- }
|