BsManagedComponent.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #include "BsManagedComponent.h"
  2. #include "BsManagedComponentRTTI.h"
  3. #include "BsMonoManager.h"
  4. #include "BsMonoClass.h"
  5. #include "CmDebug.h"
  6. using namespace CamelotFramework;
  7. namespace BansheeEngine
  8. {
  9. ManagedComponent::ManagedComponent(const CM::HSceneObject& parent, const CM::String& ns, const CM::String& typeName)
  10. :mManagedInstance(nullptr), mNamespace(ns), mTypeName(typeName)
  11. {
  12. MonoClass* managedClass = MonoManager::instance().findClass(mNamespace, mTypeName);
  13. if(managedClass == nullptr)
  14. {
  15. LOGWRN("Cannot create managed component: " + mNamespace + "." + mTypeName + " because that type doesn't exist.");
  16. return;
  17. }
  18. construct(managedClass->createInstance());
  19. }
  20. void ManagedComponent::construct(MonoObject* object)
  21. {
  22. mFullTypeName = mNamespace + "." + mTypeName;
  23. mManagedInstance = object;
  24. mManagedHandle = mono_gchandle_new(mManagedInstance, false);
  25. }
  26. void ManagedComponent::onDestroyed()
  27. {
  28. if(mManagedInstance != nullptr)
  29. {
  30. mManagedInstance = nullptr;
  31. mono_gchandle_free(mManagedHandle);
  32. }
  33. }
  34. CM::RTTITypeBase* ManagedComponent::getRTTIStatic()
  35. {
  36. return ManagedComponentRTTI::instance();
  37. }
  38. CM::RTTITypeBase* ManagedComponent::getRTTI() const
  39. {
  40. return ManagedComponent::getRTTIStatic();
  41. }
  42. }