BsScriptResource.cpp 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  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 "BsScriptPrefab.h"
  23. namespace BansheeEngine
  24. {
  25. ScriptResourceBase::ScriptResourceBase(MonoObject* instance)
  26. :PersistentScriptObjectBase(instance), mRefreshInProgress(false)
  27. { }
  28. ScriptObjectBackup ScriptResourceBase::beginRefresh()
  29. {
  30. mRefreshInProgress = true;
  31. return PersistentScriptObjectBase::beginRefresh();
  32. }
  33. void ScriptResourceBase::endRefresh(const ScriptObjectBackup& backupData)
  34. {
  35. mRefreshInProgress = false;
  36. PersistentScriptObjectBase::endRefresh(backupData);
  37. }
  38. void ScriptResourceBase::destroy()
  39. {
  40. mManagedInstance = nullptr;
  41. if (!mRefreshInProgress)
  42. ScriptResourceManager::instance().destroyScriptResource(this);
  43. }
  44. void ScriptResource::initRuntimeData()
  45. {
  46. metaData.scriptClass->addInternalCall("Internal_GetName", &ScriptResource::internal_getName);
  47. metaData.scriptClass->addInternalCall("Internal_GetUUID", &ScriptResource::internal_getUUID);
  48. metaData.scriptClass->addInternalCall("Internal_Release", &ScriptResource::internal_release);
  49. }
  50. MonoClass* ScriptResource::getClassFromTypeId(UINT32 typeId)
  51. {
  52. switch (typeId)
  53. {
  54. case TID_Texture:
  55. // TODO - Need to distinguish from 2D/3D/Cube
  56. return ScriptTexture2D::getMetaData()->scriptClass;
  57. case TID_SpriteTexture:
  58. return ScriptSpriteTexture::getMetaData()->scriptClass;
  59. case TID_Font:
  60. return ScriptFont::getMetaData()->scriptClass;
  61. case TID_PlainText:
  62. return ScriptPlainText::getMetaData()->scriptClass;
  63. case TID_ScriptCode:
  64. return ScriptScriptCode::getMetaData()->scriptClass;
  65. case TID_Shader:
  66. return ScriptShader::getMetaData()->scriptClass;
  67. case TID_ShaderInclude:
  68. return ScriptShaderInclude::getMetaData()->scriptClass;
  69. case TID_Material:
  70. return ScriptMaterial::getMetaData()->scriptClass;
  71. case TID_Mesh:
  72. return ScriptMesh::getMetaData()->scriptClass;
  73. case TID_Prefab:
  74. return ScriptPrefab::getMetaData()->scriptClass;
  75. case TID_StringTable:
  76. return ScriptStringTable::getMetaData()->scriptClass;
  77. case TID_GUISkin:
  78. return ScriptGUISkin::getMetaData()->scriptClass;
  79. case TID_PhysicsMaterial:
  80. return ScriptPhysicsMaterial::getMetaData()->scriptClass;
  81. case TID_PhysicsMesh:
  82. return ScriptPhysicsMesh::getMetaData()->scriptClass;
  83. }
  84. return nullptr;
  85. }
  86. ScriptResourceType ScriptResource::getTypeFromTypeId(UINT32 typeId)
  87. {
  88. switch (typeId)
  89. {
  90. case TID_Texture:
  91. return ScriptResourceType::Texture;
  92. case TID_SpriteTexture:
  93. return ScriptResourceType::SpriteTexture;
  94. case TID_Mesh:
  95. return ScriptResourceType::Mesh;
  96. case TID_Shader:
  97. return ScriptResourceType::Shader;
  98. case TID_ShaderInclude:
  99. return ScriptResourceType::ShaderInclude;
  100. case TID_Material:
  101. return ScriptResourceType::Material;
  102. case TID_Font:
  103. return ScriptResourceType::Font;
  104. case TID_Prefab:
  105. return ScriptResourceType::Prefab;
  106. case TID_StringTable:
  107. return ScriptResourceType::StringTable;
  108. case TID_PlainText:
  109. return ScriptResourceType::PlainText;
  110. case TID_ScriptCode:
  111. return ScriptResourceType::ScriptCode;
  112. case TID_GUISkin:
  113. return ScriptResourceType::GUISkin;
  114. case TID_PhysicsMaterial:
  115. return ScriptResourceType::PhysicsMaterial;
  116. case TID_PhysicsMesh:
  117. return ScriptResourceType::PhysicsMesh;
  118. }
  119. return ScriptResourceType::Undefined;
  120. }
  121. UINT32 ScriptResource::getTypeIdFromType(ScriptResourceType type)
  122. {
  123. switch (type)
  124. {
  125. case ScriptResourceType::Texture:
  126. return TID_Texture;
  127. case ScriptResourceType::SpriteTexture:
  128. return TID_SpriteTexture;
  129. case ScriptResourceType::Mesh:
  130. return TID_Mesh;
  131. case ScriptResourceType::Shader:
  132. return TID_Shader;
  133. case ScriptResourceType::ShaderInclude:
  134. return TID_ShaderInclude;
  135. case ScriptResourceType::Font:
  136. return TID_Font;
  137. case ScriptResourceType::Material:
  138. return TID_Material;
  139. case ScriptResourceType::Prefab:
  140. return TID_Prefab;
  141. case ScriptResourceType::StringTable:
  142. return TID_StringTable;
  143. case ScriptResourceType::PlainText:
  144. return TID_PlainText;
  145. case ScriptResourceType::ScriptCode:
  146. return TID_ScriptCode;
  147. case ScriptResourceType::GUISkin:
  148. return TID_GUISkin;
  149. case ScriptResourceType::PhysicsMaterial:
  150. return TID_PhysicsMaterial;
  151. case ScriptResourceType::PhysicsMesh:
  152. return TID_PhysicsMesh;
  153. }
  154. return 0;
  155. }
  156. MonoString* ScriptResource::internal_getName(ScriptResourceBase* nativeInstance)
  157. {
  158. return MonoUtil::wstringToMono(nativeInstance->getGenericHandle()->getName());
  159. }
  160. MonoString* ScriptResource::internal_getUUID(ScriptResourceBase* nativeInstance)
  161. {
  162. return MonoUtil::stringToMono(nativeInstance->getGenericHandle().getUUID());
  163. }
  164. void ScriptResource::internal_release(ScriptResourceBase* nativeInstance)
  165. {
  166. nativeInstance->getGenericHandle().release();
  167. }
  168. }