BsEditorSettingsRTTI.h 3.2 KB

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