BsScriptImportOptions.cpp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. #include "BsScriptImportOptions.h"
  2. #include "BsScriptMeta.h"
  3. #include "BsMonoField.h"
  4. #include "BsMonoClass.h"
  5. #include "BsMonoManager.h"
  6. #include "BsMonoMethod.h"
  7. #include "BsMonoUtil.h"
  8. #include "BsTextureImportOptions.h"
  9. #include "BsFontImportOptions.h"
  10. #include "BsScriptCodeImportOptions.h"
  11. #include "BsRenderer.h"
  12. #include "BsScriptFont.h"
  13. #include "BsRTTIType.h"
  14. using namespace std::placeholders;
  15. namespace BansheeEngine
  16. {
  17. struct CharRange
  18. {
  19. UINT32 start, end;
  20. };
  21. ScriptImportOptionsBase::ScriptImportOptionsBase(MonoObject* instance)
  22. :ScriptObjectBase(instance)
  23. { }
  24. void ScriptImportOptions::initRuntimeData()
  25. { }
  26. MonoObject* ScriptImportOptions::create(const SPtr<ImportOptions>& importOptions)
  27. {
  28. UINT32 typeId = importOptions->getRTTI()->getRTTIId();
  29. switch (typeId)
  30. {
  31. case TID_TextureImportOptions:
  32. return ScriptTextureImportOptions::create(std::static_pointer_cast<TextureImportOptions>(importOptions));
  33. break;
  34. case TID_FontImportOptions:
  35. return ScriptFontImportOptions::create(std::static_pointer_cast<FontImportOptions>(importOptions));
  36. break;
  37. case TID_ScriptCodeImportOptions:
  38. return ScriptScriptCodeImportOptions::create(std::static_pointer_cast<ScriptCodeImportOptions>(importOptions));
  39. break;
  40. }
  41. MonoObject* managedInstance = metaData.scriptClass->createInstance();
  42. ScriptImportOptions* scriptObj = ScriptImportOptions::toNative(managedInstance);
  43. scriptObj->mImportOptions = importOptions;
  44. return managedInstance;
  45. }
  46. ScriptImportOptions::ScriptImportOptions(MonoObject* instance)
  47. :ScriptObject(instance)
  48. {
  49. mImportOptions = bs_shared_ptr_new<ImportOptions>();
  50. }
  51. ScriptTextureImportOptions::ScriptTextureImportOptions(MonoObject* instance)
  52. :ScriptObject(instance)
  53. {
  54. mImportOptions = bs_shared_ptr_new<TextureImportOptions>();
  55. }
  56. void ScriptTextureImportOptions::initRuntimeData()
  57. {
  58. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptTextureImportOptions::internal_CreateInstance);
  59. metaData.scriptClass->addInternalCall("Internal_GetPixelFormat", &ScriptTextureImportOptions::internal_GetPixelFormat);
  60. metaData.scriptClass->addInternalCall("Internal_SetPixelFormat", &ScriptTextureImportOptions::internal_SetPixelFormat);
  61. metaData.scriptClass->addInternalCall("Internal_GetGenerateMipmaps", &ScriptTextureImportOptions::internal_GetGenerateMipmaps);
  62. metaData.scriptClass->addInternalCall("Internal_SetGenerateMipmaps", &ScriptTextureImportOptions::internal_SetGenerateMipmaps);
  63. metaData.scriptClass->addInternalCall("Internal_GetMaxMipmapLevel", &ScriptTextureImportOptions::internal_GetMaxMipmapLevel);
  64. metaData.scriptClass->addInternalCall("Internal_SetMaxMipmapLevel", &ScriptTextureImportOptions::internal_SetMaxMipmapLevel);
  65. }
  66. SPtr<TextureImportOptions> ScriptTextureImportOptions::getTexImportOptions()
  67. {
  68. return std::static_pointer_cast<TextureImportOptions>(mImportOptions);
  69. }
  70. MonoObject* ScriptTextureImportOptions::create()
  71. {
  72. return metaData.scriptClass->createInstance();
  73. }
  74. MonoObject* ScriptTextureImportOptions::create(const SPtr<TextureImportOptions>& options)
  75. {
  76. MonoObject* managedInstance = metaData.scriptClass->createInstance();
  77. ScriptTextureImportOptions* scriptObj = ScriptTextureImportOptions::toNative(managedInstance);
  78. scriptObj->mImportOptions = options;
  79. return managedInstance;
  80. }
  81. void ScriptTextureImportOptions::internal_CreateInstance(MonoObject* instance)
  82. {
  83. ScriptTextureImportOptions* nativeInstance = new (bs_alloc<ScriptTextureImportOptions>()) ScriptTextureImportOptions(instance);
  84. }
  85. PixelFormat ScriptTextureImportOptions::internal_GetPixelFormat(ScriptTextureImportOptions* thisPtr)
  86. {
  87. return thisPtr->getTexImportOptions()->getFormat();
  88. }
  89. void ScriptTextureImportOptions::internal_SetPixelFormat(ScriptTextureImportOptions* thisPtr, PixelFormat value)
  90. {
  91. thisPtr->getTexImportOptions()->setFormat(value);
  92. }
  93. bool ScriptTextureImportOptions::internal_GetGenerateMipmaps(ScriptTextureImportOptions* thisPtr)
  94. {
  95. return thisPtr->getTexImportOptions()->getGenerateMipmaps();
  96. }
  97. void ScriptTextureImportOptions::internal_SetGenerateMipmaps(ScriptTextureImportOptions* thisPtr, bool value)
  98. {
  99. thisPtr->getTexImportOptions()->setGenerateMipmaps(value);
  100. }
  101. UINT32 ScriptTextureImportOptions::internal_GetMaxMipmapLevel(ScriptTextureImportOptions* thisPtr)
  102. {
  103. return thisPtr->getTexImportOptions()->getMaxMip();
  104. }
  105. void ScriptTextureImportOptions::internal_SetMaxMipmapLevel(ScriptTextureImportOptions* thisPtr, UINT32 value)
  106. {
  107. thisPtr->getTexImportOptions()->setMaxMip(value);
  108. }
  109. ScriptFontImportOptions::ScriptFontImportOptions(MonoObject* instance)
  110. :ScriptObject(instance)
  111. {
  112. mImportOptions = bs_shared_ptr_new<FontImportOptions>();
  113. }
  114. void ScriptFontImportOptions::initRuntimeData()
  115. {
  116. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptFontImportOptions::internal_CreateInstance);
  117. metaData.scriptClass->addInternalCall("Internal_GetFontSizes", &ScriptFontImportOptions::internal_GetFontSizes);
  118. metaData.scriptClass->addInternalCall("Internal_SetFontSizes", &ScriptFontImportOptions::internal_SetFontSizes);
  119. metaData.scriptClass->addInternalCall("Internal_GetDPI", &ScriptFontImportOptions::internal_GetDPI);
  120. metaData.scriptClass->addInternalCall("Internal_SetDPI", &ScriptFontImportOptions::internal_SetDPI);
  121. metaData.scriptClass->addInternalCall("Internal_GetAntialiasing", &ScriptFontImportOptions::internal_GetAntialiasing);
  122. metaData.scriptClass->addInternalCall("Internal_SetAntialiasing", &ScriptFontImportOptions::internal_SetAntialiasing);
  123. metaData.scriptClass->addInternalCall("Internal_GetCharRanges", &ScriptFontImportOptions::internal_GetCharRanges);
  124. metaData.scriptClass->addInternalCall("Internal_SetCharRanges", &ScriptFontImportOptions::internal_SetCharRanges);
  125. }
  126. SPtr<FontImportOptions> ScriptFontImportOptions::getFontImportOptions()
  127. {
  128. return std::static_pointer_cast<FontImportOptions>(mImportOptions);
  129. }
  130. MonoObject* ScriptFontImportOptions::create()
  131. {
  132. return metaData.scriptClass->createInstance();
  133. }
  134. MonoObject* ScriptFontImportOptions::create(const SPtr<FontImportOptions>& options)
  135. {
  136. MonoObject* managedInstance = metaData.scriptClass->createInstance();
  137. ScriptFontImportOptions* scriptObj = ScriptFontImportOptions::toNative(managedInstance);
  138. scriptObj->mImportOptions = options;
  139. return managedInstance;
  140. }
  141. void ScriptFontImportOptions::internal_CreateInstance(MonoObject* instance)
  142. {
  143. ScriptFontImportOptions* nativeInstance = new (bs_alloc<ScriptFontImportOptions>()) ScriptFontImportOptions(instance);
  144. }
  145. MonoArray* ScriptFontImportOptions::internal_GetFontSizes(ScriptFontImportOptions* thisPtr)
  146. {
  147. Vector<UINT32> fontSizes = thisPtr->getFontImportOptions()->getFontSizes();
  148. ScriptArray outArray = ScriptArray::create<UINT32>((UINT32)fontSizes.size());
  149. for (UINT32 i = 0; i < fontSizes.size(); i++)
  150. outArray.set(i, fontSizes[i]);
  151. return outArray.getInternal();
  152. }
  153. void ScriptFontImportOptions::internal_SetFontSizes(ScriptFontImportOptions* thisPtr, MonoArray* value)
  154. {
  155. ScriptArray inArray(value);
  156. Vector<UINT32> fontSizes(inArray.size());
  157. for (UINT32 i = 0; i < inArray.size(); i++)
  158. fontSizes[i] = inArray.get<UINT32>(i);
  159. thisPtr->getFontImportOptions()->setFontSizes(fontSizes);
  160. }
  161. UINT32 ScriptFontImportOptions::internal_GetDPI(ScriptFontImportOptions* thisPtr)
  162. {
  163. return thisPtr->getFontImportOptions()->getDPI();
  164. }
  165. void ScriptFontImportOptions::internal_SetDPI(ScriptFontImportOptions* thisPtr, UINT32 value)
  166. {
  167. thisPtr->getFontImportOptions()->setDPI(value);
  168. }
  169. bool ScriptFontImportOptions::internal_GetAntialiasing(ScriptFontImportOptions* thisPtr)
  170. {
  171. return thisPtr->getFontImportOptions()->getAntialiasing();
  172. }
  173. void ScriptFontImportOptions::internal_SetAntialiasing(ScriptFontImportOptions* thisPtr, bool value)
  174. {
  175. thisPtr->getFontImportOptions()->setAntialiasing(value);
  176. }
  177. MonoArray* ScriptFontImportOptions::internal_GetCharRanges(ScriptFontImportOptions* thisPtr)
  178. {
  179. Vector<std::pair<UINT32, UINT32>> charRanges = thisPtr->getFontImportOptions()->getCharIndexRanges();
  180. ScriptArray outArray = ScriptArray::create<ScriptCharRange>((UINT32)charRanges.size());
  181. for (UINT32 i = 0; i < (UINT32)charRanges.size(); i++)
  182. {
  183. CharRange range;
  184. range.start = charRanges[i].first;
  185. range.end = charRanges[i].second;
  186. outArray.set(i, range);
  187. }
  188. return outArray.getInternal();
  189. }
  190. void ScriptFontImportOptions::internal_SetCharRanges(ScriptFontImportOptions* thisPtr, MonoArray* value)
  191. {
  192. ScriptArray inArray(value);
  193. thisPtr->getFontImportOptions()->clearCharIndexRanges();
  194. for (UINT32 i = 0; i < inArray.size(); i++)
  195. {
  196. CharRange range = inArray.get<CharRange>(i);
  197. thisPtr->getFontImportOptions()->addCharIndexRange(range.start, range.end);
  198. }
  199. }
  200. ScriptScriptCodeImportOptions::ScriptScriptCodeImportOptions(MonoObject* instance)
  201. :ScriptObject(instance)
  202. {
  203. mImportOptions = bs_shared_ptr_new<ScriptCodeImportOptions>();
  204. }
  205. void ScriptScriptCodeImportOptions::initRuntimeData()
  206. {
  207. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptScriptCodeImportOptions::internal_CreateInstance);
  208. metaData.scriptClass->addInternalCall("Internal_IsEditorScript", &ScriptScriptCodeImportOptions::internal_IsEditorScript);
  209. metaData.scriptClass->addInternalCall("Internal_SetEditorScript", &ScriptScriptCodeImportOptions::internal_SetEditorScript);
  210. }
  211. SPtr<ScriptCodeImportOptions> ScriptScriptCodeImportOptions::getCodeImportOptions()
  212. {
  213. return std::static_pointer_cast<ScriptCodeImportOptions>(mImportOptions);
  214. }
  215. MonoObject* ScriptScriptCodeImportOptions::create()
  216. {
  217. return metaData.scriptClass->createInstance();
  218. }
  219. MonoObject* ScriptScriptCodeImportOptions::create(const SPtr<ScriptCodeImportOptions>& options)
  220. {
  221. MonoObject* managedInstance = metaData.scriptClass->createInstance();
  222. ScriptScriptCodeImportOptions* scriptObj = ScriptScriptCodeImportOptions::toNative(managedInstance);
  223. scriptObj->mImportOptions = options;
  224. return managedInstance;
  225. }
  226. void ScriptScriptCodeImportOptions::internal_CreateInstance(MonoObject* instance)
  227. {
  228. ScriptScriptCodeImportOptions* nativeInstance = new (bs_alloc<ScriptScriptCodeImportOptions>()) ScriptScriptCodeImportOptions(instance);
  229. }
  230. bool ScriptScriptCodeImportOptions::internal_IsEditorScript(ScriptScriptCodeImportOptions* thisPtr)
  231. {
  232. return thisPtr->getCodeImportOptions()->isEditorScript();
  233. }
  234. void ScriptScriptCodeImportOptions::internal_SetEditorScript(ScriptScriptCodeImportOptions* thisPtr, bool value)
  235. {
  236. thisPtr->getCodeImportOptions()->setEditorScript(value);
  237. }
  238. }