BsScriptProjectSettings.cpp 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Wrappers/BsScriptProjectSettings.h"
  4. #include "BsMonoManager.h"
  5. #include "BsMonoClass.h"
  6. #include "BsMonoMethod.h"
  7. #include "BsMonoUtil.h"
  8. #include "BsEditorApplication.h"
  9. #include "Settings/BsProjectSettings.h"
  10. #include "Serialization/BsManagedSerializableObject.h"
  11. #include "Reflection/BsRTTIType.h"
  12. #include "Serialization/BsScriptAssemblyManager.h"
  13. #include "Settings/BsEditorSettings.h"
  14. namespace bs
  15. {
  16. ScriptProjectSettings::ScriptProjectSettings(MonoObject* instance)
  17. :ScriptObject(instance)
  18. { }
  19. void ScriptProjectSettings::initRuntimeData()
  20. {
  21. metaData.scriptClass->addInternalCall("Internal_GetLastOpenScene", (void*)&ScriptProjectSettings::internal_GetLastOpenScene);
  22. metaData.scriptClass->addInternalCall("Internal_SetLastOpenScene", (void*)&ScriptProjectSettings::internal_SetLastOpenScene);
  23. metaData.scriptClass->addInternalCall("Internal_SetFloat", (void*)&ScriptProjectSettings::internal_SetFloat);
  24. metaData.scriptClass->addInternalCall("Internal_SetInt", (void*)&ScriptProjectSettings::internal_SetInt);
  25. metaData.scriptClass->addInternalCall("Internal_SetBool", (void*)&ScriptProjectSettings::internal_SetBool);
  26. metaData.scriptClass->addInternalCall("Internal_SetString", (void*)&ScriptProjectSettings::internal_SetString);
  27. metaData.scriptClass->addInternalCall("Internal_SetObject", (void*)&ScriptProjectSettings::internal_SetObject);
  28. metaData.scriptClass->addInternalCall("Internal_GetFloat", (void*)&ScriptProjectSettings::internal_GetFloat);
  29. metaData.scriptClass->addInternalCall("Internal_GetInt", (void*)&ScriptProjectSettings::internal_GetInt);
  30. metaData.scriptClass->addInternalCall("Internal_GetBool", (void*)&ScriptProjectSettings::internal_GetBool);
  31. metaData.scriptClass->addInternalCall("Internal_GetString", (void*)&ScriptProjectSettings::internal_GetString);
  32. metaData.scriptClass->addInternalCall("Internal_GetObject", (void*)&ScriptProjectSettings::internal_GetObject);
  33. metaData.scriptClass->addInternalCall("Internal_HasKey", (void*)&ScriptProjectSettings::internal_HasKey);
  34. metaData.scriptClass->addInternalCall("Internal_DeleteKey", (void*)&ScriptProjectSettings::internal_DeleteKey);
  35. metaData.scriptClass->addInternalCall("Internal_DeleteAllKeys", (void*)&ScriptProjectSettings::internal_DeleteAllKeys);
  36. metaData.scriptClass->addInternalCall("Internal_GetHash", (void*)&ScriptProjectSettings::internal_GetHash);
  37. metaData.scriptClass->addInternalCall("Internal_Save", (void*)&ScriptProjectSettings::internal_Save);
  38. }
  39. MonoString* ScriptProjectSettings::internal_GetLastOpenScene()
  40. {
  41. SPtr<ProjectSettings> settings = gEditorApplication().getProjectSettings();
  42. return MonoUtil::stringToMono(settings->getLastOpenScene());
  43. }
  44. void ScriptProjectSettings::internal_SetLastOpenScene(MonoString* value)
  45. {
  46. SPtr<ProjectSettings> settings = gEditorApplication().getProjectSettings();
  47. settings->setLastOpenScene(MonoUtil::monoToString(value));
  48. }
  49. void ScriptProjectSettings::internal_SetFloat(MonoString* name, float value)
  50. {
  51. String nativeName = MonoUtil::monoToString(name);
  52. SPtr<ProjectSettings> settings = gEditorApplication().getProjectSettings();
  53. settings->setFloat(nativeName, value);
  54. }
  55. void ScriptProjectSettings::internal_SetInt(MonoString* name, int value)
  56. {
  57. String nativeName = MonoUtil::monoToString(name);
  58. SPtr<ProjectSettings> settings = gEditorApplication().getProjectSettings();
  59. settings->setInt(nativeName, value);
  60. }
  61. void ScriptProjectSettings::internal_SetBool(MonoString* name, bool value)
  62. {
  63. String nativeName = MonoUtil::monoToString(name);
  64. SPtr<ProjectSettings> settings = gEditorApplication().getProjectSettings();
  65. settings->setBool(nativeName, value);
  66. }
  67. void ScriptProjectSettings::internal_SetString(MonoString* name, MonoString* value)
  68. {
  69. String nativeName = MonoUtil::monoToString(name);
  70. String nativeValue = MonoUtil::monoToString(value);
  71. SPtr<ProjectSettings> settings = gEditorApplication().getProjectSettings();
  72. settings->setString(nativeName, nativeValue);
  73. }
  74. void ScriptProjectSettings::internal_SetObject(MonoString* name, MonoObject* value)
  75. {
  76. String nativeName = MonoUtil::monoToString(name);
  77. SPtr<IReflectable> nativeValue;
  78. if(value != nullptr)
  79. {
  80. nativeValue = ScriptAssemblyManager::getReflectableFromManagedObject(value);
  81. if(!nativeValue)
  82. return;
  83. }
  84. SPtr<ProjectSettings> settings = gEditorApplication().getProjectSettings();
  85. settings->setObject(nativeName, nativeValue);
  86. }
  87. float ScriptProjectSettings::internal_GetFloat(MonoString* name, float defaultValue)
  88. {
  89. String nativeName = MonoUtil::monoToString(name);
  90. SPtr<ProjectSettings> settings = gEditorApplication().getProjectSettings();
  91. return settings->getFloat(nativeName, defaultValue);
  92. }
  93. int ScriptProjectSettings::internal_GetInt(MonoString* name, int defaultValue)
  94. {
  95. String nativeName = MonoUtil::monoToString(name);
  96. SPtr<ProjectSettings> settings = gEditorApplication().getProjectSettings();
  97. return settings->getInt(nativeName, defaultValue);
  98. }
  99. bool ScriptProjectSettings::internal_GetBool(MonoString* name, bool defaultValue)
  100. {
  101. String nativeName = MonoUtil::monoToString(name);
  102. SPtr<ProjectSettings> settings = gEditorApplication().getProjectSettings();
  103. return settings->getBool(nativeName, defaultValue);
  104. }
  105. MonoString* ScriptProjectSettings::internal_GetString(MonoString* name, MonoString* defaultValue)
  106. {
  107. String nativeName = MonoUtil::monoToString(name);
  108. String nativeDefaultValue = MonoUtil::monoToString(defaultValue);
  109. SPtr<ProjectSettings> settings = gEditorApplication().getProjectSettings();
  110. String nativeValue = settings->getString(nativeName, nativeDefaultValue);
  111. return MonoUtil::stringToMono(nativeValue);
  112. }
  113. MonoObject* ScriptProjectSettings::internal_GetObject(MonoString* name)
  114. {
  115. String nativeName = MonoUtil::monoToString(name);
  116. SPtr<ProjectSettings> settings = gEditorApplication().getProjectSettings();
  117. SPtr<IReflectable> obj = settings->getObject(nativeName);
  118. if(!obj)
  119. return nullptr;
  120. if(auto managedSerializableObject = rtti_cast<ManagedSerializableObject>(obj))
  121. {
  122. if (!managedSerializableObject)
  123. return nullptr;
  124. return managedSerializableObject->deserialize();
  125. }
  126. else
  127. {
  128. UINT32 rttiId = obj->getRTTI()->getRTTIId();
  129. const ReflectableTypeInfo* reflTypeInfo = ScriptAssemblyManager::instance().getReflectableTypeInfo(rttiId);
  130. if(reflTypeInfo == nullptr)
  131. {
  132. LOGERR(StringUtil::format("Mapping between a reflectable object and a managed type is missing "
  133. "for type \"{0}\"", rttiId))
  134. return nullptr;
  135. }
  136. return reflTypeInfo->createCallback(obj);
  137. }
  138. }
  139. bool ScriptProjectSettings::internal_HasKey(MonoString* name)
  140. {
  141. String nativeName = MonoUtil::monoToString(name);
  142. SPtr<ProjectSettings> settings = gEditorApplication().getProjectSettings();
  143. return settings->hasKey(nativeName);
  144. }
  145. void ScriptProjectSettings::internal_DeleteKey(MonoString* name)
  146. {
  147. String nativeName = MonoUtil::monoToString(name);
  148. SPtr<ProjectSettings> settings = gEditorApplication().getProjectSettings();
  149. settings->deleteKey(nativeName);
  150. }
  151. void ScriptProjectSettings::internal_DeleteAllKeys()
  152. {
  153. SPtr<ProjectSettings> settings = gEditorApplication().getProjectSettings();
  154. settings->deleteAllKeys();
  155. }
  156. UINT32 ScriptProjectSettings::internal_GetHash()
  157. {
  158. SPtr<ProjectSettings> settings = gEditorApplication().getProjectSettings();
  159. return settings->getHash();
  160. }
  161. void ScriptProjectSettings::internal_Save()
  162. {
  163. gEditorApplication().saveProjectSettings();
  164. }
  165. }