| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- #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)
- {
- MonoClass* managedClass = MonoManager::instance().findClass(mNamespace, mTypeName);
- if(managedClass == nullptr)
- {
- LOGWRN("Cannot create managed component: " + mNamespace + "." + mTypeName + " because that type doesn't exist.");
- return;
- }
- construct(managedClass->createInstance());
- }
- void ManagedComponent::construct(MonoObject* object)
- {
- mFullTypeName = mNamespace + "." + mTypeName;
- mManagedInstance = object;
- 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();
- }
- }
|