BsScriptImportOptions.cpp 10 KB

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