BsScriptResource.cpp 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsScriptResource.h"
  4. #include "BsScriptResourceManager.h"
  5. #include "BsResource.h"
  6. #include "BsMonoUtil.h"
  7. #include "BsScriptTexture2D.h"
  8. #include "BsScriptTexture3D.h"
  9. #include "BsScriptTextureCube.h"
  10. #include "BsScriptSpriteTexture.h"
  11. #include "BsScriptMaterial.h"
  12. #include "BsScriptMesh.h"
  13. #include "BsScriptFont.h"
  14. #include "BsScriptShader.h"
  15. #include "BsScriptShaderInclude.h"
  16. #include "BsScriptPlainText.h"
  17. #include "BsScriptScriptCode.h"
  18. #include "BsScriptStringTable.h"
  19. #include "BsScriptGUISkin.h"
  20. #include "BsScriptPhysicsMesh.h"
  21. #include "BsScriptPhysicsMaterial.h"
  22. #include "BsScriptAudioClip.h"
  23. #include "BsScriptPrefab.h"
  24. #include "BsScriptAnimationClip.h"
  25. namespace BansheeEngine
  26. {
  27. ScriptResourceBase::ScriptResourceBase(MonoObject* instance)
  28. :PersistentScriptObjectBase(instance), mRefreshInProgress(false)
  29. { }
  30. ScriptObjectBackup ScriptResourceBase::beginRefresh()
  31. {
  32. mRefreshInProgress = true;
  33. return PersistentScriptObjectBase::beginRefresh();
  34. }
  35. void ScriptResourceBase::endRefresh(const ScriptObjectBackup& backupData)
  36. {
  37. mRefreshInProgress = false;
  38. PersistentScriptObjectBase::endRefresh(backupData);
  39. }
  40. void ScriptResourceBase::destroy()
  41. {
  42. mManagedInstance = nullptr;
  43. if (!mRefreshInProgress)
  44. ScriptResourceManager::instance().destroyScriptResource(this);
  45. }
  46. void ScriptResource::initRuntimeData()
  47. {
  48. metaData.scriptClass->addInternalCall("Internal_GetName", &ScriptResource::internal_getName);
  49. metaData.scriptClass->addInternalCall("Internal_GetUUID", &ScriptResource::internal_getUUID);
  50. metaData.scriptClass->addInternalCall("Internal_Release", &ScriptResource::internal_release);
  51. }
  52. MonoClass* ScriptResource::getClassFromTypeId(UINT32 typeId)
  53. {
  54. switch (typeId)
  55. {
  56. case TID_Texture:
  57. // TODO - Need to distinguish from 2D/3D/Cube
  58. return ScriptTexture2D::getMetaData()->scriptClass;
  59. case TID_SpriteTexture:
  60. return ScriptSpriteTexture::getMetaData()->scriptClass;
  61. case TID_Font:
  62. return ScriptFont::getMetaData()->scriptClass;
  63. case TID_PlainText:
  64. return ScriptPlainText::getMetaData()->scriptClass;
  65. case TID_ScriptCode:
  66. return ScriptScriptCode::getMetaData()->scriptClass;
  67. case TID_Shader:
  68. return ScriptShader::getMetaData()->scriptClass;
  69. case TID_ShaderInclude:
  70. return ScriptShaderInclude::getMetaData()->scriptClass;
  71. case TID_Material:
  72. return ScriptMaterial::getMetaData()->scriptClass;
  73. case TID_Mesh:
  74. return ScriptMesh::getMetaData()->scriptClass;
  75. case TID_Prefab:
  76. return ScriptPrefab::getMetaData()->scriptClass;
  77. case TID_StringTable:
  78. return ScriptStringTable::getMetaData()->scriptClass;
  79. case TID_GUISkin:
  80. return ScriptGUISkin::getMetaData()->scriptClass;
  81. case TID_PhysicsMaterial:
  82. return ScriptPhysicsMaterial::getMetaData()->scriptClass;
  83. case TID_PhysicsMesh:
  84. return ScriptPhysicsMesh::getMetaData()->scriptClass;
  85. case TID_AudioClip:
  86. return ScriptAudioClip::getMetaData()->scriptClass;
  87. case TID_AnimationClip:
  88. return ScriptAnimationClip::getMetaData()->scriptClass;
  89. }
  90. return nullptr;
  91. }
  92. ScriptResourceType ScriptResource::getTypeFromTypeId(UINT32 typeId)
  93. {
  94. switch (typeId)
  95. {
  96. case TID_Texture:
  97. return ScriptResourceType::Texture;
  98. case TID_SpriteTexture:
  99. return ScriptResourceType::SpriteTexture;
  100. case TID_Mesh:
  101. return ScriptResourceType::Mesh;
  102. case TID_Shader:
  103. return ScriptResourceType::Shader;
  104. case TID_ShaderInclude:
  105. return ScriptResourceType::ShaderInclude;
  106. case TID_Material:
  107. return ScriptResourceType::Material;
  108. case TID_Font:
  109. return ScriptResourceType::Font;
  110. case TID_Prefab:
  111. return ScriptResourceType::Prefab;
  112. case TID_StringTable:
  113. return ScriptResourceType::StringTable;
  114. case TID_PlainText:
  115. return ScriptResourceType::PlainText;
  116. case TID_ScriptCode:
  117. return ScriptResourceType::ScriptCode;
  118. case TID_GUISkin:
  119. return ScriptResourceType::GUISkin;
  120. case TID_PhysicsMaterial:
  121. return ScriptResourceType::PhysicsMaterial;
  122. case TID_PhysicsMesh:
  123. return ScriptResourceType::PhysicsMesh;
  124. case TID_AudioClip:
  125. return ScriptResourceType::AudioClip;
  126. case TID_AnimationClip:
  127. return ScriptResourceType::AnimationClip;
  128. }
  129. return ScriptResourceType::Undefined;
  130. }
  131. UINT32 ScriptResource::getTypeIdFromType(ScriptResourceType type)
  132. {
  133. switch (type)
  134. {
  135. case ScriptResourceType::Texture:
  136. return TID_Texture;
  137. case ScriptResourceType::SpriteTexture:
  138. return TID_SpriteTexture;
  139. case ScriptResourceType::Mesh:
  140. return TID_Mesh;
  141. case ScriptResourceType::Shader:
  142. return TID_Shader;
  143. case ScriptResourceType::ShaderInclude:
  144. return TID_ShaderInclude;
  145. case ScriptResourceType::Font:
  146. return TID_Font;
  147. case ScriptResourceType::Material:
  148. return TID_Material;
  149. case ScriptResourceType::Prefab:
  150. return TID_Prefab;
  151. case ScriptResourceType::StringTable:
  152. return TID_StringTable;
  153. case ScriptResourceType::PlainText:
  154. return TID_PlainText;
  155. case ScriptResourceType::ScriptCode:
  156. return TID_ScriptCode;
  157. case ScriptResourceType::GUISkin:
  158. return TID_GUISkin;
  159. case ScriptResourceType::PhysicsMaterial:
  160. return TID_PhysicsMaterial;
  161. case ScriptResourceType::PhysicsMesh:
  162. return TID_PhysicsMesh;
  163. case ScriptResourceType::AudioClip:
  164. return TID_AudioClip;
  165. case ScriptResourceType::AnimationClip:
  166. return TID_AnimationClip;
  167. default:
  168. break;
  169. }
  170. return 0;
  171. }
  172. MonoString* ScriptResource::internal_getName(ScriptResourceBase* nativeInstance)
  173. {
  174. return MonoUtil::wstringToMono(nativeInstance->getGenericHandle()->getName());
  175. }
  176. MonoString* ScriptResource::internal_getUUID(ScriptResourceBase* nativeInstance)
  177. {
  178. return MonoUtil::stringToMono(nativeInstance->getGenericHandle().getUUID());
  179. }
  180. void ScriptResource::internal_release(ScriptResourceBase* nativeInstance)
  181. {
  182. nativeInstance->getGenericHandle().release();
  183. }
  184. }