BsEditorSettingsRTTI.h 3.2 KB

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