BsEditorSettingsRTTI.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #pragma once
  2. #include "BsEditorPrerequisites.h"
  3. #include "BsEditorSettings.h"
  4. #include "BsRTTIType.h"
  5. namespace BansheeEngine
  6. {
  7. class EditorSettingsRTTI : public RTTIType <EditorSettings, Settings, EditorSettingsRTTI>
  8. {
  9. private:
  10. BS_PLAIN_MEMBER(mMoveSnapActive);
  11. BS_PLAIN_MEMBER(mRotateSnapActive);
  12. BS_PLAIN_MEMBER(mMoveSnap);
  13. BS_PLAIN_MEMBER(mRotationSnap);
  14. BS_PLAIN_MEMBER(mGridSize);
  15. BS_PLAIN_MEMBER(mGridAxisSpacing);
  16. BS_PLAIN_MEMBER(mActiveSceneTool);
  17. BS_PLAIN_MEMBER(mActiveCoordinateMode);
  18. BS_PLAIN_MEMBER(mActivePivotMode);
  19. BS_PLAIN_MEMBER(mHandleSize);
  20. BS_PLAIN_MEMBER(mLastOpenProject);
  21. BS_PLAIN_MEMBER(mAutoLoadLastProject);
  22. BS_PLAIN_MEMBER(mRecentProjects);
  23. public:
  24. EditorSettingsRTTI()
  25. {
  26. BS_ADD_PLAIN_FIELD(mMoveSnapActive, 0);
  27. BS_ADD_PLAIN_FIELD(mRotateSnapActive, 1);
  28. BS_ADD_PLAIN_FIELD(mMoveSnap, 2);
  29. BS_ADD_PLAIN_FIELD(mRotationSnap, 3);
  30. BS_ADD_PLAIN_FIELD(mGridSize, 4);
  31. BS_ADD_PLAIN_FIELD(mGridAxisSpacing, 5);
  32. BS_ADD_PLAIN_FIELD(mActiveSceneTool, 6);
  33. BS_ADD_PLAIN_FIELD(mActiveCoordinateMode, 7);
  34. BS_ADD_PLAIN_FIELD(mActivePivotMode, 8);
  35. BS_ADD_PLAIN_FIELD(mHandleSize, 9);
  36. BS_ADD_PLAIN_FIELD(mLastOpenProject, 10);
  37. BS_ADD_PLAIN_FIELD(mAutoLoadLastProject, 11);
  38. BS_ADD_PLAIN_FIELD(mRecentProjects, 12);
  39. }
  40. virtual const String& getRTTIName() override
  41. {
  42. static String name = "EditorSettings";
  43. return name;
  44. }
  45. virtual UINT32 getRTTIId() override
  46. {
  47. return TID_EditorSettings;
  48. }
  49. virtual std::shared_ptr<IReflectable> newRTTIObject() override
  50. {
  51. return bs_shared_ptr_new<EditorSettings>();
  52. }
  53. };
  54. template<> struct RTTIPlainType <RecentProject>
  55. {
  56. enum { id = TID_RecentProject }; enum { hasDynamicSize = 1 };
  57. static void toMemory(const RecentProject& data, char* memory)
  58. {
  59. UINT32 size = 0;
  60. char* memoryStart = memory;
  61. memory += sizeof(UINT32);
  62. size += sizeof(UINT32);
  63. memory = rttiWriteElem(data.path, memory, size);
  64. memory = rttiWriteElem(data.accessTimestamp, memory, size);
  65. memcpy(memoryStart, &size, sizeof(UINT32));
  66. }
  67. static UINT32 fromMemory(RecentProject& data, char* memory)
  68. {
  69. UINT32 size = 0;
  70. memcpy(&size, memory, sizeof(UINT32));
  71. memory += sizeof(UINT32);
  72. memory = rttiReadElem(data.path, memory);
  73. memory = rttiReadElem(data.accessTimestamp, memory);
  74. return size;
  75. }
  76. static UINT32 getDynamicSize(const RecentProject& data)
  77. {
  78. UINT64 dataSize = sizeof(UINT32) + rttiGetElemSize(data.path) + rttiGetElemSize(data.accessTimestamp);
  79. #if BS_DEBUG_MODE
  80. if (dataSize > std::numeric_limits<UINT32>::max())
  81. {
  82. __string_throwDataOverflowException();
  83. }
  84. #endif
  85. return (UINT32)dataSize;
  86. }
  87. };
  88. }