#include "BsManagedComponent.h" #include "BsManagedComponentRTTI.h" #include "BsMonoManager.h" #include "BsMonoClass.h" #include "CmDebug.h" using namespace CamelotFramework; namespace BansheeEngine { ManagedComponent::ManagedComponent(const CM::HSceneObject& parent, const CM::String& ns, const CM::String& typeName) :mManagedInstance(nullptr), mNamespace(ns), mTypeName(typeName) { } void ManagedComponent::construct() { mFullTypeName = mNamespace + "." + mTypeName; MonoClass* managedClass = MonoManager::instance().findClass(mNamespace, mTypeName); if(managedClass == nullptr) { LOGWRN("Cannot create managed component: " + mNamespace + "." + mTypeName + " because that type doesn't exist."); return; } mManagedInstance = managedClass->createInstance(); mManagedHandle = mono_gchandle_new(mManagedInstance, false); } void ManagedComponent::onDestroyed() { if(mManagedInstance != nullptr) { mManagedInstance = nullptr; mono_gchandle_free(mManagedHandle); } } CM::RTTITypeBase* ManagedComponent::getRTTIStatic() { return ManagedComponentRTTI::instance(); } CM::RTTITypeBase* ManagedComponent::getRTTI() const { return ManagedComponent::getRTTIStatic(); } }