BsScriptResource.cpp 5.1 KB

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