BsScriptGameObject.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Wrappers/BsScriptGameObject.h"
  4. #include "BsMonoUtil.h"
  5. #include <assert.h>
  6. namespace bs
  7. {
  8. ScriptGameObjectBase::ScriptGameObjectBase(MonoObject* instance)
  9. :PersistentScriptObjectBase(instance), mGCHandle(0)
  10. {
  11. }
  12. ScriptGameObjectBase::~ScriptGameObjectBase()
  13. {
  14. BS_ASSERT(mGCHandle == 0 && "Object being destroyed without its managed instance being freed first.");
  15. }
  16. MonoObject* ScriptGameObjectBase::getManagedInstance() const
  17. {
  18. return MonoUtil::getObjectFromGCHandle(mGCHandle);
  19. }
  20. void ScriptGameObjectBase::setManagedInstance(::MonoObject* instance)
  21. {
  22. BS_ASSERT(mGCHandle == 0 && "Attempting to set a new managed instance without freeing the old one.");
  23. mGCHandle = MonoUtil::newGCHandle(instance, false);
  24. }
  25. void ScriptGameObjectBase::freeManagedInstance()
  26. {
  27. if (mGCHandle != 0)
  28. {
  29. MonoUtil::freeGCHandle(mGCHandle);
  30. mGCHandle = 0;
  31. }
  32. }
  33. ScriptGameObject::ScriptGameObject(MonoObject* instance)
  34. :ScriptObject(instance)
  35. { }
  36. void ScriptGameObject::initRuntimeData()
  37. {
  38. metaData.scriptClass->addInternalCall("Internal_GetInstanceId", (void*)&ScriptGameObject::internal_getInstanceId);
  39. }
  40. UINT64 ScriptGameObject::internal_getInstanceId(ScriptGameObject* nativeInstance)
  41. {
  42. return nativeInstance->getNativeHandle().getInstanceId();
  43. }
  44. }