2
0

BsEditorSettingsRTTI.h 2.7 KB

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