BsScriptImportOptions.cpp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsScriptImportOptions.h"
  4. #include "BsScriptMeta.h"
  5. #include "BsMonoField.h"
  6. #include "BsMonoClass.h"
  7. #include "BsMonoManager.h"
  8. #include "BsMonoMethod.h"
  9. #include "BsMonoUtil.h"
  10. #include "BsTextureImportOptions.h"
  11. #include "BsFontImportOptions.h"
  12. #include "BsScriptCodeImportOptions.h"
  13. #include "BsMeshImportOptions.h"
  14. #include "BsRenderer.h"
  15. #include "BsScriptFont.h"
  16. #include "BsRTTIType.h"
  17. using namespace std::placeholders;
  18. namespace BansheeEngine
  19. {
  20. struct CharRange
  21. {
  22. UINT32 start, end;
  23. };
  24. ScriptImportOptionsBase::ScriptImportOptionsBase(MonoObject* instance)
  25. :ScriptObjectBase(instance)
  26. { }
  27. void ScriptImportOptions::initRuntimeData()
  28. { }
  29. MonoObject* ScriptImportOptions::create(const SPtr<ImportOptions>& importOptions)
  30. {
  31. UINT32 typeId = importOptions->getRTTI()->getRTTIId();
  32. switch (typeId)
  33. {
  34. case TID_TextureImportOptions:
  35. return ScriptTextureImportOptions::create(std::static_pointer_cast<TextureImportOptions>(importOptions));
  36. break;
  37. case TID_MeshImportOptions:
  38. return ScriptMeshImportOptions::create(std::static_pointer_cast<MeshImportOptions>(importOptions));
  39. break;
  40. case TID_FontImportOptions:
  41. return ScriptFontImportOptions::create(std::static_pointer_cast<FontImportOptions>(importOptions));
  42. break;
  43. case TID_ScriptCodeImportOptions:
  44. return ScriptScriptCodeImportOptions::create(std::static_pointer_cast<ScriptCodeImportOptions>(importOptions));
  45. break;
  46. }
  47. MonoObject* managedInstance = metaData.scriptClass->createInstance();
  48. ScriptImportOptions* scriptObj = ScriptImportOptions::toNative(managedInstance);
  49. scriptObj->mImportOptions = importOptions;
  50. return managedInstance;
  51. }
  52. ScriptImportOptions::ScriptImportOptions(MonoObject* instance)
  53. :ScriptObject(instance)
  54. {
  55. mImportOptions = bs_shared_ptr_new<ImportOptions>();
  56. }
  57. ScriptTextureImportOptions::ScriptTextureImportOptions(MonoObject* instance)
  58. :ScriptObject(instance)
  59. {
  60. mImportOptions = bs_shared_ptr_new<TextureImportOptions>();
  61. }
  62. void ScriptTextureImportOptions::initRuntimeData()
  63. {
  64. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptTextureImportOptions::internal_CreateInstance);
  65. metaData.scriptClass->addInternalCall("Internal_GetPixelFormat", &ScriptTextureImportOptions::internal_GetPixelFormat);
  66. metaData.scriptClass->addInternalCall("Internal_SetPixelFormat", &ScriptTextureImportOptions::internal_SetPixelFormat);
  67. metaData.scriptClass->addInternalCall("Internal_GetGenerateMipmaps", &ScriptTextureImportOptions::internal_GetGenerateMipmaps);
  68. metaData.scriptClass->addInternalCall("Internal_SetGenerateMipmaps", &ScriptTextureImportOptions::internal_SetGenerateMipmaps);
  69. metaData.scriptClass->addInternalCall("Internal_GetMaxMipmapLevel", &ScriptTextureImportOptions::internal_GetMaxMipmapLevel);
  70. metaData.scriptClass->addInternalCall("Internal_SetMaxMipmapLevel", &ScriptTextureImportOptions::internal_SetMaxMipmapLevel);
  71. metaData.scriptClass->addInternalCall("Internal_GetCPUReadable", &ScriptTextureImportOptions::internal_GetCPUReadable);
  72. metaData.scriptClass->addInternalCall("Internal_SetCPUReadable", &ScriptTextureImportOptions::internal_SetCPUReadable);
  73. metaData.scriptClass->addInternalCall("Internal_GetIsSRGB", &ScriptTextureImportOptions::internal_GetIsSRGB);
  74. metaData.scriptClass->addInternalCall("Internal_SetIsSRGB", &ScriptTextureImportOptions::internal_SetIsSRGB);
  75. }
  76. SPtr<TextureImportOptions> ScriptTextureImportOptions::getTexImportOptions()
  77. {
  78. return std::static_pointer_cast<TextureImportOptions>(mImportOptions);
  79. }
  80. MonoObject* ScriptTextureImportOptions::create()
  81. {
  82. return metaData.scriptClass->createInstance();
  83. }
  84. MonoObject* ScriptTextureImportOptions::create(const SPtr<TextureImportOptions>& options)
  85. {
  86. MonoObject* managedInstance = metaData.scriptClass->createInstance();
  87. ScriptTextureImportOptions* scriptObj = ScriptTextureImportOptions::toNative(managedInstance);
  88. scriptObj->mImportOptions = options;
  89. return managedInstance;
  90. }
  91. void ScriptTextureImportOptions::internal_CreateInstance(MonoObject* instance)
  92. {
  93. ScriptTextureImportOptions* nativeInstance = new (bs_alloc<ScriptTextureImportOptions>()) ScriptTextureImportOptions(instance);
  94. }
  95. PixelFormat ScriptTextureImportOptions::internal_GetPixelFormat(ScriptTextureImportOptions* thisPtr)
  96. {
  97. return thisPtr->getTexImportOptions()->getFormat();
  98. }
  99. void ScriptTextureImportOptions::internal_SetPixelFormat(ScriptTextureImportOptions* thisPtr, PixelFormat value)
  100. {
  101. thisPtr->getTexImportOptions()->setFormat(value);
  102. }
  103. bool ScriptTextureImportOptions::internal_GetGenerateMipmaps(ScriptTextureImportOptions* thisPtr)
  104. {
  105. return thisPtr->getTexImportOptions()->getGenerateMipmaps();
  106. }
  107. void ScriptTextureImportOptions::internal_SetGenerateMipmaps(ScriptTextureImportOptions* thisPtr, bool value)
  108. {
  109. thisPtr->getTexImportOptions()->setGenerateMipmaps(value);
  110. }
  111. UINT32 ScriptTextureImportOptions::internal_GetMaxMipmapLevel(ScriptTextureImportOptions* thisPtr)
  112. {
  113. return thisPtr->getTexImportOptions()->getMaxMip();
  114. }
  115. void ScriptTextureImportOptions::internal_SetMaxMipmapLevel(ScriptTextureImportOptions* thisPtr, UINT32 value)
  116. {
  117. thisPtr->getTexImportOptions()->setMaxMip(value);
  118. }
  119. bool ScriptTextureImportOptions::internal_GetCPUReadable(ScriptTextureImportOptions* thisPtr)
  120. {
  121. return thisPtr->getTexImportOptions()->getCPUReadable();
  122. }
  123. void ScriptTextureImportOptions::internal_SetCPUReadable(ScriptTextureImportOptions* thisPtr, bool value)
  124. {
  125. thisPtr->getTexImportOptions()->setCPUReadable(value);
  126. }
  127. bool ScriptTextureImportOptions::internal_GetIsSRGB(ScriptTextureImportOptions* thisPtr)
  128. {
  129. return thisPtr->getTexImportOptions()->getSRGB();
  130. }
  131. void ScriptTextureImportOptions::internal_SetIsSRGB(ScriptTextureImportOptions* thisPtr, bool value)
  132. {
  133. thisPtr->getTexImportOptions()->setSRGB(value);
  134. }
  135. ScriptMeshImportOptions::ScriptMeshImportOptions(MonoObject* instance)
  136. :ScriptObject(instance)
  137. {
  138. mImportOptions = bs_shared_ptr_new<MeshImportOptions>();
  139. }
  140. void ScriptMeshImportOptions::initRuntimeData()
  141. {
  142. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptMeshImportOptions::internal_CreateInstance);
  143. metaData.scriptClass->addInternalCall("Internal_GetCPUReadable", &ScriptMeshImportOptions::internal_GetCPUReadable);
  144. metaData.scriptClass->addInternalCall("Internal_SetCPUReadable", &ScriptMeshImportOptions::internal_SetCPUReadable);
  145. metaData.scriptClass->addInternalCall("Internal_GetImportNormals", &ScriptMeshImportOptions::internal_GetImportNormals);
  146. metaData.scriptClass->addInternalCall("Internal_SetImportNormals", &ScriptMeshImportOptions::internal_SetImportNormals);
  147. metaData.scriptClass->addInternalCall("Internal_GetImportTangents", &ScriptMeshImportOptions::internal_GetImportTangents);
  148. metaData.scriptClass->addInternalCall("Internal_SetImportTangents", &ScriptMeshImportOptions::internal_SetImportTangents);
  149. metaData.scriptClass->addInternalCall("Internal_GetImportSkin", &ScriptMeshImportOptions::internal_GetImportSkin);
  150. metaData.scriptClass->addInternalCall("Internal_SetImportSkin", &ScriptMeshImportOptions::internal_SetImportSkin);
  151. metaData.scriptClass->addInternalCall("Internal_GetImportAnimation", &ScriptMeshImportOptions::internal_GetImportAnimation);
  152. metaData.scriptClass->addInternalCall("Internal_SetImportAnimation", &ScriptMeshImportOptions::internal_SetImportAnimation);
  153. metaData.scriptClass->addInternalCall("Internal_GetImportBlendShapes", &ScriptMeshImportOptions::internal_GetImportBlendShapes);
  154. metaData.scriptClass->addInternalCall("Internal_SetImportBlendShapes", &ScriptMeshImportOptions::internal_SetImportBlendShapes);
  155. metaData.scriptClass->addInternalCall("Internal_GetScale", &ScriptMeshImportOptions::internal_GetScale);
  156. metaData.scriptClass->addInternalCall("Internal_SetScale", &ScriptMeshImportOptions::internal_SetScale);
  157. }
  158. SPtr<MeshImportOptions> ScriptMeshImportOptions::getMeshImportOptions()
  159. {
  160. return std::static_pointer_cast<MeshImportOptions>(mImportOptions);
  161. }
  162. MonoObject* ScriptMeshImportOptions::create()
  163. {
  164. return metaData.scriptClass->createInstance();
  165. }
  166. MonoObject* ScriptMeshImportOptions::create(const SPtr<MeshImportOptions>& options)
  167. {
  168. MonoObject* managedInstance = metaData.scriptClass->createInstance();
  169. ScriptMeshImportOptions* scriptObj = ScriptMeshImportOptions::toNative(managedInstance);
  170. scriptObj->mImportOptions = options;
  171. return managedInstance;
  172. }
  173. void ScriptMeshImportOptions::internal_CreateInstance(MonoObject* instance)
  174. {
  175. ScriptMeshImportOptions* nativeInstance = new (bs_alloc<ScriptMeshImportOptions>()) ScriptMeshImportOptions(instance);
  176. }
  177. bool ScriptMeshImportOptions::internal_GetCPUReadable(ScriptMeshImportOptions* thisPtr)
  178. {
  179. return thisPtr->getMeshImportOptions()->getCPUReadable();
  180. }
  181. void ScriptMeshImportOptions::internal_SetCPUReadable(ScriptMeshImportOptions* thisPtr, bool value)
  182. {
  183. thisPtr->getMeshImportOptions()->setCPUReadable(value);
  184. }
  185. bool ScriptMeshImportOptions::internal_GetImportNormals(ScriptMeshImportOptions* thisPtr)
  186. {
  187. return thisPtr->getMeshImportOptions()->getImportNormals();
  188. }
  189. void ScriptMeshImportOptions::internal_SetImportNormals(ScriptMeshImportOptions* thisPtr, bool value)
  190. {
  191. thisPtr->getMeshImportOptions()->setImportNormals(value);
  192. }
  193. bool ScriptMeshImportOptions::internal_GetImportTangents(ScriptMeshImportOptions* thisPtr)
  194. {
  195. return thisPtr->getMeshImportOptions()->getImportTangents();
  196. }
  197. void ScriptMeshImportOptions::internal_SetImportTangents(ScriptMeshImportOptions* thisPtr, bool value)
  198. {
  199. thisPtr->getMeshImportOptions()->setImportTangents(value);
  200. }
  201. bool ScriptMeshImportOptions::internal_GetImportSkin(ScriptMeshImportOptions* thisPtr)
  202. {
  203. return thisPtr->getMeshImportOptions()->getImportSkin();
  204. }
  205. void ScriptMeshImportOptions::internal_SetImportSkin(ScriptMeshImportOptions* thisPtr, bool value)
  206. {
  207. thisPtr->getMeshImportOptions()->setImportSkin(value);
  208. }
  209. bool ScriptMeshImportOptions::internal_GetImportAnimation(ScriptMeshImportOptions* thisPtr)
  210. {
  211. return thisPtr->getMeshImportOptions()->getImportAnimation();
  212. }
  213. void ScriptMeshImportOptions::internal_SetImportAnimation(ScriptMeshImportOptions* thisPtr, bool value)
  214. {
  215. thisPtr->getMeshImportOptions()->setImportAnimation(value);
  216. }
  217. bool ScriptMeshImportOptions::internal_GetImportBlendShapes(ScriptMeshImportOptions* thisPtr)
  218. {
  219. return thisPtr->getMeshImportOptions()->getImportBlendShapes();
  220. }
  221. void ScriptMeshImportOptions::internal_SetImportBlendShapes(ScriptMeshImportOptions* thisPtr, bool value)
  222. {
  223. thisPtr->getMeshImportOptions()->setImportBlendShapes(value);
  224. }
  225. float ScriptMeshImportOptions::internal_GetScale(ScriptMeshImportOptions* thisPtr)
  226. {
  227. return thisPtr->getMeshImportOptions()->getImportScale();
  228. }
  229. void ScriptMeshImportOptions::internal_SetScale(ScriptMeshImportOptions* thisPtr, float value)
  230. {
  231. thisPtr->getMeshImportOptions()->setImportScale(value);
  232. }
  233. ScriptFontImportOptions::ScriptFontImportOptions(MonoObject* instance)
  234. :ScriptObject(instance)
  235. {
  236. mImportOptions = bs_shared_ptr_new<FontImportOptions>();
  237. }
  238. void ScriptFontImportOptions::initRuntimeData()
  239. {
  240. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptFontImportOptions::internal_CreateInstance);
  241. metaData.scriptClass->addInternalCall("Internal_GetFontSizes", &ScriptFontImportOptions::internal_GetFontSizes);
  242. metaData.scriptClass->addInternalCall("Internal_SetFontSizes", &ScriptFontImportOptions::internal_SetFontSizes);
  243. metaData.scriptClass->addInternalCall("Internal_GetDPI", &ScriptFontImportOptions::internal_GetDPI);
  244. metaData.scriptClass->addInternalCall("Internal_SetDPI", &ScriptFontImportOptions::internal_SetDPI);
  245. metaData.scriptClass->addInternalCall("Internal_GetRenderMode", &ScriptFontImportOptions::internal_GetRenderMode);
  246. metaData.scriptClass->addInternalCall("Internal_SetRenderMode", &ScriptFontImportOptions::internal_SetRenderMode);
  247. metaData.scriptClass->addInternalCall("Internal_GetBold", &ScriptFontImportOptions::internal_GetBold);
  248. metaData.scriptClass->addInternalCall("Internal_SetBold", &ScriptFontImportOptions::internal_SetBold);
  249. metaData.scriptClass->addInternalCall("Internal_GetItalic", &ScriptFontImportOptions::internal_GetItalic);
  250. metaData.scriptClass->addInternalCall("Internal_SetItalic", &ScriptFontImportOptions::internal_SetItalic);
  251. metaData.scriptClass->addInternalCall("Internal_GetCharRanges", &ScriptFontImportOptions::internal_GetCharRanges);
  252. metaData.scriptClass->addInternalCall("Internal_SetCharRanges", &ScriptFontImportOptions::internal_SetCharRanges);
  253. }
  254. SPtr<FontImportOptions> ScriptFontImportOptions::getFontImportOptions()
  255. {
  256. return std::static_pointer_cast<FontImportOptions>(mImportOptions);
  257. }
  258. MonoObject* ScriptFontImportOptions::create()
  259. {
  260. return metaData.scriptClass->createInstance();
  261. }
  262. MonoObject* ScriptFontImportOptions::create(const SPtr<FontImportOptions>& options)
  263. {
  264. MonoObject* managedInstance = metaData.scriptClass->createInstance();
  265. ScriptFontImportOptions* scriptObj = ScriptFontImportOptions::toNative(managedInstance);
  266. scriptObj->mImportOptions = options;
  267. return managedInstance;
  268. }
  269. void ScriptFontImportOptions::internal_CreateInstance(MonoObject* instance)
  270. {
  271. ScriptFontImportOptions* nativeInstance = new (bs_alloc<ScriptFontImportOptions>()) ScriptFontImportOptions(instance);
  272. }
  273. MonoArray* ScriptFontImportOptions::internal_GetFontSizes(ScriptFontImportOptions* thisPtr)
  274. {
  275. Vector<UINT32> fontSizes = thisPtr->getFontImportOptions()->getFontSizes();
  276. ScriptArray outArray = ScriptArray::create<UINT32>((UINT32)fontSizes.size());
  277. for (UINT32 i = 0; i < fontSizes.size(); i++)
  278. outArray.set(i, fontSizes[i]);
  279. return outArray.getInternal();
  280. }
  281. void ScriptFontImportOptions::internal_SetFontSizes(ScriptFontImportOptions* thisPtr, MonoArray* value)
  282. {
  283. ScriptArray inArray(value);
  284. Vector<UINT32> fontSizes(inArray.size());
  285. for (UINT32 i = 0; i < inArray.size(); i++)
  286. fontSizes[i] = inArray.get<UINT32>(i);
  287. thisPtr->getFontImportOptions()->setFontSizes(fontSizes);
  288. }
  289. UINT32 ScriptFontImportOptions::internal_GetDPI(ScriptFontImportOptions* thisPtr)
  290. {
  291. return thisPtr->getFontImportOptions()->getDPI();
  292. }
  293. void ScriptFontImportOptions::internal_SetDPI(ScriptFontImportOptions* thisPtr, UINT32 value)
  294. {
  295. thisPtr->getFontImportOptions()->setDPI(value);
  296. }
  297. FontRenderMode ScriptFontImportOptions::internal_GetRenderMode(ScriptFontImportOptions* thisPtr)
  298. {
  299. return thisPtr->getFontImportOptions()->getRenderMode();
  300. }
  301. void ScriptFontImportOptions::internal_SetRenderMode(ScriptFontImportOptions* thisPtr, FontRenderMode value)
  302. {
  303. thisPtr->getFontImportOptions()->setRenderMode(value);
  304. }
  305. bool ScriptFontImportOptions::internal_GetBold(ScriptFontImportOptions* thisPtr)
  306. {
  307. return thisPtr->getFontImportOptions()->getBold();
  308. }
  309. void ScriptFontImportOptions::internal_SetBold(ScriptFontImportOptions* thisPtr, bool value)
  310. {
  311. thisPtr->getFontImportOptions()->setBold(value);
  312. }
  313. bool ScriptFontImportOptions::internal_GetItalic(ScriptFontImportOptions* thisPtr)
  314. {
  315. return thisPtr->getFontImportOptions()->getItalic();
  316. }
  317. void ScriptFontImportOptions::internal_SetItalic(ScriptFontImportOptions* thisPtr, bool value)
  318. {
  319. thisPtr->getFontImportOptions()->setItalic(value);
  320. }
  321. MonoArray* ScriptFontImportOptions::internal_GetCharRanges(ScriptFontImportOptions* thisPtr)
  322. {
  323. Vector<std::pair<UINT32, UINT32>> charRanges = thisPtr->getFontImportOptions()->getCharIndexRanges();
  324. ScriptArray outArray = ScriptArray::create<ScriptCharRange>((UINT32)charRanges.size());
  325. for (UINT32 i = 0; i < (UINT32)charRanges.size(); i++)
  326. {
  327. CharRange range;
  328. range.start = charRanges[i].first;
  329. range.end = charRanges[i].second;
  330. outArray.set(i, range);
  331. }
  332. return outArray.getInternal();
  333. }
  334. void ScriptFontImportOptions::internal_SetCharRanges(ScriptFontImportOptions* thisPtr, MonoArray* value)
  335. {
  336. ScriptArray inArray(value);
  337. thisPtr->getFontImportOptions()->clearCharIndexRanges();
  338. for (UINT32 i = 0; i < inArray.size(); i++)
  339. {
  340. CharRange range = inArray.get<CharRange>(i);
  341. thisPtr->getFontImportOptions()->addCharIndexRange(range.start, range.end);
  342. }
  343. }
  344. ScriptScriptCodeImportOptions::ScriptScriptCodeImportOptions(MonoObject* instance)
  345. :ScriptObject(instance)
  346. {
  347. mImportOptions = bs_shared_ptr_new<ScriptCodeImportOptions>();
  348. }
  349. void ScriptScriptCodeImportOptions::initRuntimeData()
  350. {
  351. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptScriptCodeImportOptions::internal_CreateInstance);
  352. metaData.scriptClass->addInternalCall("Internal_IsEditorScript", &ScriptScriptCodeImportOptions::internal_IsEditorScript);
  353. metaData.scriptClass->addInternalCall("Internal_SetEditorScript", &ScriptScriptCodeImportOptions::internal_SetEditorScript);
  354. }
  355. SPtr<ScriptCodeImportOptions> ScriptScriptCodeImportOptions::getCodeImportOptions()
  356. {
  357. return std::static_pointer_cast<ScriptCodeImportOptions>(mImportOptions);
  358. }
  359. MonoObject* ScriptScriptCodeImportOptions::create()
  360. {
  361. return metaData.scriptClass->createInstance();
  362. }
  363. MonoObject* ScriptScriptCodeImportOptions::create(const SPtr<ScriptCodeImportOptions>& options)
  364. {
  365. MonoObject* managedInstance = metaData.scriptClass->createInstance();
  366. ScriptScriptCodeImportOptions* scriptObj = ScriptScriptCodeImportOptions::toNative(managedInstance);
  367. scriptObj->mImportOptions = options;
  368. return managedInstance;
  369. }
  370. void ScriptScriptCodeImportOptions::internal_CreateInstance(MonoObject* instance)
  371. {
  372. ScriptScriptCodeImportOptions* nativeInstance = new (bs_alloc<ScriptScriptCodeImportOptions>()) ScriptScriptCodeImportOptions(instance);
  373. }
  374. bool ScriptScriptCodeImportOptions::internal_IsEditorScript(ScriptScriptCodeImportOptions* thisPtr)
  375. {
  376. return thisPtr->getCodeImportOptions()->isEditorScript();
  377. }
  378. void ScriptScriptCodeImportOptions::internal_SetEditorScript(ScriptScriptCodeImportOptions* thisPtr, bool value)
  379. {
  380. thisPtr->getCodeImportOptions()->setEditorScript(value);
  381. }
  382. }