BsScriptSerializableList.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include "BsScriptSerializableList.h"
  2. #include "BsScriptMeta.h"
  3. #include "BsMonoField.h"
  4. #include "BsMonoClass.h"
  5. #include "BsMonoManager.h"
  6. #include "BsRuntimeScriptObjects.h"
  7. #include "BsManagedSerializableObjectInfo.h"
  8. #include "BsScriptSerializableProperty.h"
  9. namespace BansheeEngine
  10. {
  11. ScriptSerializableList::ScriptSerializableList(MonoObject* instance, const ManagedSerializableTypeInfoListPtr& typeInfo)
  12. :ScriptObject(instance), mTypeInfo(typeInfo)
  13. {
  14. }
  15. void ScriptSerializableList::initRuntimeData()
  16. {
  17. metaData.scriptClass->addInternalCall("Internal_CreateProperty", &ScriptSerializableList::internal_createProperty);
  18. }
  19. ScriptSerializableList* ScriptSerializableList::create(const ManagedSerializableTypeInfoListPtr& typeInfo, MonoObject* object)
  20. {
  21. MonoType* monoInternalElementType = mono_class_get_type(typeInfo->mElementType->getMonoClass());
  22. MonoReflectionType* internalElementType = mono_type_get_object(MonoManager::instance().getDomain(), monoInternalElementType);
  23. void* params[2] = { object, internalElementType };
  24. MonoObject* managedInstance = metaData.scriptClass->createInstance(params, 2);
  25. ScriptSerializableList* nativeInstance = new (bs_alloc<ScriptSerializableList>()) ScriptSerializableList(managedInstance, typeInfo);
  26. return nativeInstance;
  27. }
  28. MonoObject* ScriptSerializableList::internal_createProperty(ScriptSerializableList* nativeInstance)
  29. {
  30. ScriptSerializableProperty* newProperty = ScriptSerializableProperty::create(nativeInstance->mTypeInfo->mElementType);
  31. return newProperty->getManagedInstance();
  32. }
  33. }