BsScriptObject.cpp 1004 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include "BsScriptObject.h"
  2. #include "BsMonoManager.h"
  3. #include "BsMonoField.h"
  4. namespace BansheeEngine
  5. {
  6. ScriptMeta ScriptObjectBase::metaData;
  7. ScriptObjectBase::ScriptObjectBase(MonoObject* instance)
  8. :mManagedInstance(instance)
  9. {
  10. ScriptObjectBase* param = this;
  11. if(metaData.thisPtrField != nullptr)
  12. metaData.thisPtrField->setValue(instance, &param);
  13. }
  14. ScriptObjectBase::~ScriptObjectBase()
  15. {
  16. if(mManagedInstance != nullptr)
  17. CM_EXCEPT(InvalidStateException, "Script object is being destroyed without its instance previously being released.");
  18. }
  19. void ScriptObjectBase::_onManagedInstanceDeleted()
  20. {
  21. cm_delete(this);
  22. }
  23. void ScriptObjectBase::registerTypeWithManager()
  24. {
  25. MonoManager::registerScriptType(&metaData);
  26. }
  27. void* ScriptObjectBase::getNativeInstance(MonoObject* managedInstance)
  28. {
  29. void* nativeInstance = nullptr;
  30. if(metaData.thisPtrField != nullptr)
  31. metaData.thisPtrField->getValue(managedInstance, &nativeInstance);
  32. return nativeInstance;
  33. }
  34. }