BsScriptResource.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  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. }
  45. MonoClass* ScriptResource::getClassFromTypeId(UINT32 typeId)
  46. {
  47. switch (typeId)
  48. {
  49. case TID_Texture:
  50. // TODO - Need to distinguish from 2D/3D/Cube
  51. return ScriptTexture2D::getMetaData()->scriptClass;
  52. case TID_SpriteTexture:
  53. return ScriptSpriteTexture::getMetaData()->scriptClass;
  54. case TID_Font:
  55. return ScriptFont::getMetaData()->scriptClass;
  56. case TID_PlainText:
  57. return ScriptPlainText::getMetaData()->scriptClass;
  58. case TID_ScriptCode:
  59. return ScriptScriptCode::getMetaData()->scriptClass;
  60. case TID_Shader:
  61. return ScriptShader::getMetaData()->scriptClass;
  62. case TID_ShaderInclude:
  63. return ScriptShaderInclude::getMetaData()->scriptClass;
  64. case TID_Material:
  65. return ScriptMaterial::getMetaData()->scriptClass;
  66. case TID_Mesh:
  67. return ScriptMesh::getMetaData()->scriptClass;
  68. case TID_Prefab:
  69. return ScriptPrefab::getMetaData()->scriptClass;
  70. case TID_StringTable:
  71. return ScriptStringTable::getMetaData()->scriptClass;
  72. case TID_GUISkin:
  73. return ScriptGUISkin::getMetaData()->scriptClass;
  74. }
  75. return nullptr;
  76. }
  77. ScriptResourceType ScriptResource::getTypeFromTypeId(UINT32 typeId)
  78. {
  79. switch (typeId)
  80. {
  81. case TID_Texture:
  82. return ScriptResourceType::Texture;
  83. case TID_SpriteTexture:
  84. return ScriptResourceType::SpriteTexture;
  85. case TID_Mesh:
  86. return ScriptResourceType::Mesh;
  87. case TID_Shader:
  88. return ScriptResourceType::Shader;
  89. case TID_ShaderInclude:
  90. return ScriptResourceType::ShaderInclude;
  91. case TID_Material:
  92. return ScriptResourceType::Material;
  93. case TID_Font:
  94. return ScriptResourceType::Font;
  95. case TID_Prefab:
  96. return ScriptResourceType::Prefab;
  97. case TID_StringTable:
  98. return ScriptResourceType::StringTable;
  99. case TID_PlainText:
  100. return ScriptResourceType::PlainText;
  101. case TID_ScriptCode:
  102. return ScriptResourceType::ScriptCode;
  103. case TID_GUISkin:
  104. return ScriptResourceType::GUISkin;
  105. }
  106. return ScriptResourceType::Undefined;
  107. }
  108. UINT32 ScriptResource::getTypeIdFromType(ScriptResourceType type)
  109. {
  110. switch (type)
  111. {
  112. case ScriptResourceType::Texture:
  113. return TID_Texture;
  114. case ScriptResourceType::SpriteTexture:
  115. return TID_SpriteTexture;
  116. case ScriptResourceType::Mesh:
  117. return TID_Mesh;
  118. case ScriptResourceType::Shader:
  119. return TID_Shader;
  120. case ScriptResourceType::ShaderInclude:
  121. return TID_ShaderInclude;
  122. case ScriptResourceType::Font:
  123. return TID_Font;
  124. case ScriptResourceType::Material:
  125. return TID_Material;
  126. case ScriptResourceType::Prefab:
  127. return TID_Prefab;
  128. case ScriptResourceType::StringTable:
  129. return TID_StringTable;
  130. case ScriptResourceType::PlainText:
  131. return TID_PlainText;
  132. case ScriptResourceType::ScriptCode:
  133. return TID_ScriptCode;
  134. case ScriptResourceType::GUISkin:
  135. return TID_GUISkin;
  136. }
  137. return 0;
  138. }
  139. MonoString* ScriptResource::internal_getName(ScriptResourceBase* nativeInstance)
  140. {
  141. return MonoUtil::wstringToMono(nativeInstance->getGenericHandle()->getName());
  142. }
  143. MonoString* ScriptResource::internal_getUUID(ScriptResourceBase* nativeInstance)
  144. {
  145. return MonoUtil::stringToMono(nativeInstance->getGenericHandle().getUUID());
  146. }
  147. }