BsManagedComponent.cpp 1.2 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. }
  13. void ManagedComponent::construct()
  14. {
  15. mFullTypeName = mNamespace + "." + mTypeName;
  16. MonoClass* managedClass = MonoManager::instance().findClass(mNamespace, mTypeName);
  17. if(managedClass == nullptr)
  18. {
  19. LOGWRN("Cannot create managed component: " + mNamespace + "." + mTypeName + " because that type doesn't exist.");
  20. return;
  21. }
  22. mManagedInstance = managedClass->createInstance();
  23. mManagedHandle = mono_gchandle_new(mManagedInstance, false);
  24. }
  25. void ManagedComponent::onDestroyed()
  26. {
  27. if(mManagedInstance != nullptr)
  28. {
  29. mManagedInstance = nullptr;
  30. mono_gchandle_free(mManagedHandle);
  31. }
  32. }
  33. CM::RTTITypeBase* ManagedComponent::getRTTIStatic()
  34. {
  35. return ManagedComponentRTTI::instance();
  36. }
  37. CM::RTTITypeBase* ManagedComponent::getRTTI() const
  38. {
  39. return ManagedComponent::getRTTIStatic();
  40. }
  41. }