BsScriptScriptCode.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. ScriptResourceManager::instance().createScriptScriptCode(instance, scriptCode);
  26. }
  27. MonoString* ScriptScriptCode::internal_getText(ScriptScriptCode* thisPtr)
  28. {
  29. HScriptCode scriptCode = thisPtr->mScriptCode;
  30. return MonoUtil::wstringToMono(MonoManager::instance().getDomain(), scriptCode->getString());
  31. }
  32. void ScriptScriptCode::internal_setText(ScriptScriptCode* thisPtr, MonoString* text)
  33. {
  34. HScriptCode scriptCode = thisPtr->mScriptCode;
  35. scriptCode->setString(MonoUtil::monoToWString(text));
  36. }
  37. void ScriptScriptCode::_onManagedInstanceDeleted()
  38. {
  39. mManagedInstance = nullptr;
  40. if (!mRefreshInProgress)
  41. ScriptResourceManager::instance().destroyScriptResource(this);
  42. }
  43. void ScriptScriptCode::setNativeHandle(const HResource& resource)
  44. {
  45. mScriptCode = static_resource_cast<ScriptCode>(resource);
  46. }
  47. }