BsScriptScriptCode.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include "BsScriptScriptCode.h"
  2. #include "BsScriptResourceManager.h"
  3. #include "BsScriptMeta.h"
  4. #include "BsMonoField.h"
  5. #include "BsMonoClass.h"
  6. #include "BsMonoManager.h"
  7. #include "BsMonoUtil.h"
  8. using namespace std::placeholders;
  9. namespace BansheeEngine
  10. {
  11. ScriptScriptCode::ScriptScriptCode(MonoObject* instance, const HScriptCode& scriptCode)
  12. :ScriptObject(instance), mScriptCode(scriptCode)
  13. {
  14. }
  15. void ScriptScriptCode::initRuntimeData()
  16. {
  17. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptScriptCode::internal_createInstance);
  18. metaData.scriptClass->addInternalCall("Internal_GetText", &ScriptScriptCode::internal_getText);
  19. metaData.scriptClass->addInternalCall("Internal_SetText", &ScriptScriptCode::internal_setText);
  20. }
  21. void ScriptScriptCode::internal_createInstance(MonoObject* instance, MonoString* text)
  22. {
  23. WString strText = MonoUtil::monoToWString(text);
  24. HScriptCode scriptCode = ScriptCode::create(strText);
  25. ScriptScriptCode* scriptInstance;
  26. ScriptResourceManager::instance().createScriptResource(instance, scriptCode, &scriptInstance);
  27. }
  28. MonoString* ScriptScriptCode::internal_getText(ScriptScriptCode* thisPtr)
  29. {
  30. HScriptCode scriptCode = thisPtr->mScriptCode;
  31. return MonoUtil::wstringToMono(MonoManager::instance().getDomain(), scriptCode->getString());
  32. }
  33. void ScriptScriptCode::internal_setText(ScriptScriptCode* thisPtr, MonoString* text)
  34. {
  35. HScriptCode scriptCode = thisPtr->mScriptCode;
  36. scriptCode->setString(MonoUtil::monoToWString(text));
  37. }
  38. void ScriptScriptCode::_onManagedInstanceDeleted()
  39. {
  40. mManagedInstance = nullptr;
  41. if (!mRefreshInProgress)
  42. ScriptResourceManager::instance().destroyScriptResource(this);
  43. }
  44. void ScriptScriptCode::setNativeHandle(const HResource& resource)
  45. {
  46. mScriptCode = static_resource_cast<ScriptCode>(resource);
  47. }
  48. }