BsScriptEditorSettings.cpp 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Wrappers/BsScriptEditorSettings.h"
  4. #include "BsMonoManager.h"
  5. #include "BsMonoClass.h"
  6. #include "BsMonoMethod.h"
  7. #include "BsMonoUtil.h"
  8. #include "BsEditorApplication.h"
  9. #include "Settings/BsEditorSettings.h"
  10. #include "Reflection/BsRTTIType.h"
  11. #include "Serialization/BsManagedSerializableObject.h"
  12. namespace bs
  13. {
  14. ScriptEditorSettings::ScriptEditorSettings(MonoObject* instance)
  15. :ScriptObject(instance)
  16. { }
  17. void ScriptEditorSettings::initRuntimeData()
  18. {
  19. metaData.scriptClass->addInternalCall("Internal_GetMoveHandleSnapActive", (void*)&ScriptEditorSettings::internal_GetMoveHandleSnapActive);
  20. metaData.scriptClass->addInternalCall("Internal_SetMoveHandleSnapActive", (void*)&ScriptEditorSettings::internal_SetMoveHandleSnapActive);
  21. metaData.scriptClass->addInternalCall("Internal_GetRotateHandleSnapActive", (void*)&ScriptEditorSettings::internal_GetRotateHandleSnapActive);
  22. metaData.scriptClass->addInternalCall("Internal_SetRotateHandleSnapActive", (void*)&ScriptEditorSettings::internal_SetRotateHandleSnapActive);
  23. metaData.scriptClass->addInternalCall("Internal_GetMoveHandleSnapAmount", (void*)&ScriptEditorSettings::internal_GetMoveHandleSnapAmount);
  24. metaData.scriptClass->addInternalCall("Internal_SetMoveHandleSnapAmount", (void*)&ScriptEditorSettings::internal_SetMoveHandleSnapAmount);
  25. metaData.scriptClass->addInternalCall("Internal_GetRotateHandleSnapAmount", (void*)&ScriptEditorSettings::internal_GetRotateHandleSnapAmount);
  26. metaData.scriptClass->addInternalCall("Internal_SetRotateHandleSnapAmount", (void*)&ScriptEditorSettings::internal_SetRotateHandleSnapAmount);
  27. metaData.scriptClass->addInternalCall("Internal_GetDefaultHandleSize", (void*)&ScriptEditorSettings::internal_GetDefaultHandleSize);
  28. metaData.scriptClass->addInternalCall("Internal_SetDefaultHandleSize", (void*)&ScriptEditorSettings::internal_SetDefaultHandleSize);
  29. metaData.scriptClass->addInternalCall("Internal_GetActiveSceneTool", (void*)&ScriptEditorSettings::internal_GetActiveSceneTool);
  30. metaData.scriptClass->addInternalCall("Internal_SetActiveSceneTool", (void*)&ScriptEditorSettings::internal_SetActiveSceneTool);
  31. metaData.scriptClass->addInternalCall("Internal_GetActiveCoordinateMode", (void*)&ScriptEditorSettings::internal_GetActiveCoordinateMode);
  32. metaData.scriptClass->addInternalCall("Internal_SetActiveCoordinateMode", (void*)&ScriptEditorSettings::internal_SetActiveCoordinateMode);
  33. metaData.scriptClass->addInternalCall("Internal_GetActivePivotMode", (void*)&ScriptEditorSettings::internal_GetActivePivotMode);
  34. metaData.scriptClass->addInternalCall("Internal_SetActivePivotMode", (void*)&ScriptEditorSettings::internal_SetActivePivotMode);
  35. metaData.scriptClass->addInternalCall("Internal_GetFPSLimit", (void*)&ScriptEditorSettings::internal_GetFPSLimit);
  36. metaData.scriptClass->addInternalCall("Internal_SetFPSLimit", (void*)&ScriptEditorSettings::internal_SetFPSLimit);
  37. metaData.scriptClass->addInternalCall("Internal_GetMouseSensitivity", (void*)&ScriptEditorSettings::internal_GetMouseSensitivity);
  38. metaData.scriptClass->addInternalCall("Internal_SetMouseSensitivity", (void*)&ScriptEditorSettings::internal_SetMouseSensitivity);
  39. metaData.scriptClass->addInternalCall("Internal_GetLastOpenProject", (void*)&ScriptEditorSettings::internal_GetLastOpenProject);
  40. metaData.scriptClass->addInternalCall("Internal_SetLastOpenProject", (void*)&ScriptEditorSettings::internal_SetLastOpenProject);
  41. metaData.scriptClass->addInternalCall("Internal_GetAutoLoadLastProject", (void*)&ScriptEditorSettings::internal_GetAutoLoadLastProject);
  42. metaData.scriptClass->addInternalCall("Internal_SetAutoLoadLastProject", (void*)&ScriptEditorSettings::internal_SetAutoLoadLastProject);
  43. metaData.scriptClass->addInternalCall("Internal_GetRecentProjects", (void*)&ScriptEditorSettings::internal_GetRecentProjects);
  44. metaData.scriptClass->addInternalCall("Internal_SetRecentProjects", (void*)&ScriptEditorSettings::internal_SetRecentProjects);
  45. metaData.scriptClass->addInternalCall("Internal_SetFloat", (void*)&ScriptEditorSettings::internal_SetFloat);
  46. metaData.scriptClass->addInternalCall("Internal_SetInt", (void*)&ScriptEditorSettings::internal_SetInt);
  47. metaData.scriptClass->addInternalCall("Internal_SetBool", (void*)&ScriptEditorSettings::internal_SetBool);
  48. metaData.scriptClass->addInternalCall("Internal_SetString", (void*)&ScriptEditorSettings::internal_SetString);
  49. metaData.scriptClass->addInternalCall("Internal_SetObject", (void*)&ScriptEditorSettings::internal_SetObject);
  50. metaData.scriptClass->addInternalCall("Internal_GetFloat", (void*)&ScriptEditorSettings::internal_GetFloat);
  51. metaData.scriptClass->addInternalCall("Internal_GetInt", (void*)&ScriptEditorSettings::internal_GetInt);
  52. metaData.scriptClass->addInternalCall("Internal_GetBool", (void*)&ScriptEditorSettings::internal_GetBool);
  53. metaData.scriptClass->addInternalCall("Internal_GetString", (void*)&ScriptEditorSettings::internal_GetString);
  54. metaData.scriptClass->addInternalCall("Internal_GetObject", (void*)&ScriptEditorSettings::internal_GetObject);
  55. metaData.scriptClass->addInternalCall("Internal_HasKey", (void*)&ScriptEditorSettings::internal_HasKey);
  56. metaData.scriptClass->addInternalCall("Internal_DeleteKey", (void*)&ScriptEditorSettings::internal_DeleteKey);
  57. metaData.scriptClass->addInternalCall("Internal_DeleteAllKeys", (void*)&ScriptEditorSettings::internal_DeleteAllKeys);
  58. metaData.scriptClass->addInternalCall("Internal_GetHash", (void*)&ScriptEditorSettings::internal_GetHash);
  59. metaData.scriptClass->addInternalCall("Internal_Save", (void*)&ScriptEditorSettings::internal_Save);
  60. }
  61. bool ScriptEditorSettings::internal_GetMoveHandleSnapActive()
  62. {
  63. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  64. return settings->getMoveHandleSnapActive();
  65. }
  66. void ScriptEditorSettings::internal_SetMoveHandleSnapActive(bool value)
  67. {
  68. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  69. settings->setMoveHandleSnapActive(value);
  70. }
  71. bool ScriptEditorSettings::internal_GetRotateHandleSnapActive()
  72. {
  73. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  74. return settings->getRotateHandleSnapActive();
  75. }
  76. void ScriptEditorSettings::internal_SetRotateHandleSnapActive(bool value)
  77. {
  78. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  79. settings->setRotateHandleSnapActive(value);
  80. }
  81. float ScriptEditorSettings::internal_GetMoveHandleSnapAmount()
  82. {
  83. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  84. return settings->getMoveHandleSnap();
  85. }
  86. void ScriptEditorSettings::internal_SetMoveHandleSnapAmount(float value)
  87. {
  88. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  89. settings->setMoveHandleSnap(value);
  90. }
  91. float ScriptEditorSettings::internal_GetRotateHandleSnapAmount()
  92. {
  93. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  94. return settings->getRotationHandleSnap().valueDegrees();
  95. }
  96. void ScriptEditorSettings::internal_SetRotateHandleSnapAmount(float value)
  97. {
  98. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  99. settings->setRotationHandleSnap(Degree(value));
  100. }
  101. float ScriptEditorSettings::internal_GetDefaultHandleSize()
  102. {
  103. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  104. return settings->getHandleSize();
  105. }
  106. void ScriptEditorSettings::internal_SetDefaultHandleSize(float value)
  107. {
  108. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  109. settings->setHandleSize(value);
  110. }
  111. UINT32 ScriptEditorSettings::internal_GetActiveSceneTool()
  112. {
  113. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  114. return settings->getActiveSceneTool();
  115. }
  116. void ScriptEditorSettings::internal_SetActiveSceneTool(UINT32 value)
  117. {
  118. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  119. settings->setActiveSceneTool(value);
  120. }
  121. UINT32 ScriptEditorSettings::internal_GetActiveCoordinateMode()
  122. {
  123. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  124. return settings->getActiveCoordinateMode();
  125. }
  126. void ScriptEditorSettings::internal_SetActiveCoordinateMode(UINT32 value)
  127. {
  128. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  129. settings->setActiveCoordinateMode(value);
  130. }
  131. UINT32 ScriptEditorSettings::internal_GetActivePivotMode()
  132. {
  133. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  134. return settings->getActivePivotMode();
  135. }
  136. void ScriptEditorSettings::internal_SetActivePivotMode(UINT32 value)
  137. {
  138. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  139. settings->setActivePivotMode(value);
  140. }
  141. UINT32 ScriptEditorSettings::internal_GetFPSLimit()
  142. {
  143. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  144. return settings->getFPSLimit();
  145. }
  146. void ScriptEditorSettings::internal_SetFPSLimit(UINT32 value)
  147. {
  148. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  149. settings->setFPSLimit(value);
  150. }
  151. float ScriptEditorSettings::internal_GetMouseSensitivity()
  152. {
  153. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  154. return settings->getMouseSensitivity();
  155. }
  156. void ScriptEditorSettings::internal_SetMouseSensitivity(float value)
  157. {
  158. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  159. settings->setMouseSensitivity(value);
  160. }
  161. MonoString* ScriptEditorSettings::internal_GetLastOpenProject()
  162. {
  163. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  164. return MonoUtil::stringToMono(settings->getLastOpenProject().toString());
  165. }
  166. void ScriptEditorSettings::internal_SetLastOpenProject(MonoString* value)
  167. {
  168. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  169. settings->setLastOpenProject(MonoUtil::monoToString(value));
  170. }
  171. bool ScriptEditorSettings::internal_GetAutoLoadLastProject()
  172. {
  173. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  174. return settings->getAutoLoadLastProject();
  175. }
  176. void ScriptEditorSettings::internal_SetAutoLoadLastProject(bool value)
  177. {
  178. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  179. settings->setAutoLoadLastProject(value);
  180. }
  181. void ScriptEditorSettings::internal_GetRecentProjects(MonoArray** paths, MonoArray** timeStamps)
  182. {
  183. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  184. const Vector<RecentProject>& recentProjects = settings->getRecentProjects();
  185. UINT32 numEntries = (UINT32)recentProjects.size();
  186. ScriptArray outputPaths = ScriptArray::create<String>(numEntries);
  187. ScriptArray outputTimeStamps = ScriptArray::create<UINT64>(numEntries);
  188. for (UINT32 i = 0; i < numEntries; i++)
  189. {
  190. String projectPath = recentProjects[i].path.toString();
  191. MonoString* monoPath = MonoUtil::stringToMono(projectPath);
  192. outputPaths.set(i, monoPath);
  193. outputTimeStamps.set(i, recentProjects[i].accessTimestamp);
  194. }
  195. MonoUtil::referenceCopy(paths, (MonoObject*)outputPaths.getInternal());
  196. MonoUtil::referenceCopy(timeStamps, (MonoObject*)outputPaths.getInternal());
  197. }
  198. void ScriptEditorSettings::internal_SetRecentProjects(MonoArray* paths, MonoArray* timeStamps)
  199. {
  200. ScriptArray pathsArray(paths);
  201. ScriptArray timeStampsArray(timeStamps);
  202. UINT32 numEntries = pathsArray.size();
  203. Vector<RecentProject> recentProjects(numEntries);
  204. for (UINT32 i = 0; i < numEntries; i++)
  205. {
  206. recentProjects[i].path = pathsArray.get<String>(i);
  207. recentProjects[i].accessTimestamp = timeStampsArray.get<UINT64>(i);
  208. }
  209. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  210. settings->setRecentProjects(recentProjects);
  211. }
  212. void ScriptEditorSettings::internal_SetFloat(MonoString* name, float value)
  213. {
  214. String nativeName = MonoUtil::monoToString(name);
  215. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  216. settings->setFloat(nativeName, value);
  217. }
  218. void ScriptEditorSettings::internal_SetInt(MonoString* name, int value)
  219. {
  220. String nativeName = MonoUtil::monoToString(name);
  221. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  222. settings->setInt(nativeName, value);
  223. }
  224. void ScriptEditorSettings::internal_SetBool(MonoString* name, bool value)
  225. {
  226. String nativeName = MonoUtil::monoToString(name);
  227. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  228. settings->setBool(nativeName, value);
  229. }
  230. void ScriptEditorSettings::internal_SetString(MonoString* name, MonoString* value)
  231. {
  232. String nativeName = MonoUtil::monoToString(name);
  233. String nativeValue = MonoUtil::monoToString(value);
  234. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  235. settings->setString(nativeName, nativeValue);
  236. }
  237. void ScriptEditorSettings::internal_SetObject(MonoString* name, MonoObject* value)
  238. {
  239. String nativeName = MonoUtil::monoToString(name);
  240. SPtr<ManagedSerializableObject> nativeValue = ManagedSerializableObject::createFromExisting(value);
  241. if(!nativeValue)
  242. return;
  243. nativeValue->serialize();
  244. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  245. settings->setObject(nativeName, nativeValue);
  246. }
  247. float ScriptEditorSettings::internal_GetFloat(MonoString* name, float defaultValue)
  248. {
  249. String nativeName = MonoUtil::monoToString(name);
  250. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  251. return settings->getFloat(nativeName, defaultValue);
  252. }
  253. int ScriptEditorSettings::internal_GetInt(MonoString* name, int defaultValue)
  254. {
  255. String nativeName = MonoUtil::monoToString(name);
  256. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  257. return settings->getInt(nativeName, defaultValue);
  258. }
  259. bool ScriptEditorSettings::internal_GetBool(MonoString* name, bool defaultValue)
  260. {
  261. String nativeName = MonoUtil::monoToString(name);
  262. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  263. return settings->getBool(nativeName, defaultValue);
  264. }
  265. MonoString* ScriptEditorSettings::internal_GetString(MonoString* name, MonoString* defaultValue)
  266. {
  267. String nativeName = MonoUtil::monoToString(name);
  268. String nativeDefaultValue = MonoUtil::monoToString(defaultValue);
  269. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  270. String nativeValue = settings->getString(nativeName, nativeDefaultValue);
  271. return MonoUtil::stringToMono(nativeValue);
  272. }
  273. MonoObject* ScriptEditorSettings::internal_GetObject(MonoString* name)
  274. {
  275. String nativeName = MonoUtil::monoToString(name);
  276. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  277. SPtr<ManagedSerializableObject> value = rtti_cast<ManagedSerializableObject>(settings->getObject(nativeName));
  278. if(!value)
  279. return nullptr;
  280. return value->deserialize();
  281. }
  282. bool ScriptEditorSettings::internal_HasKey(MonoString* name)
  283. {
  284. String nativeName = MonoUtil::monoToString(name);
  285. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  286. return settings->hasKey(nativeName);
  287. }
  288. void ScriptEditorSettings::internal_DeleteKey(MonoString* name)
  289. {
  290. String nativeName = MonoUtil::monoToString(name);
  291. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  292. settings->deleteKey(nativeName);
  293. }
  294. void ScriptEditorSettings::internal_DeleteAllKeys()
  295. {
  296. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  297. settings->deleteAllKeys();
  298. }
  299. UINT32 ScriptEditorSettings::internal_GetHash()
  300. {
  301. SPtr<EditorSettings> settings = gEditorApplication().getEditorSettings();
  302. return settings->getHash();
  303. }
  304. void ScriptEditorSettings::internal_Save()
  305. {
  306. gEditorApplication().saveEditorSettings();
  307. }
  308. }