2
0

BsScriptResource.cpp 4.7 KB

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