BsScriptSerializableList.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "BsScriptSerializableList.h"
  4. #include "BsScriptMeta.h"
  5. #include "BsMonoField.h"
  6. #include "BsMonoClass.h"
  7. #include "BsMonoManager.h"
  8. #include "BsScriptAssemblyManager.h"
  9. #include "BsManagedSerializableObjectInfo.h"
  10. #include "BsScriptSerializableProperty.h"
  11. namespace BansheeEngine
  12. {
  13. ScriptSerializableList::ScriptSerializableList(MonoObject* instance, const ManagedSerializableTypeInfoListPtr& typeInfo)
  14. :ScriptObject(instance), mTypeInfo(typeInfo)
  15. {
  16. }
  17. void ScriptSerializableList::initRuntimeData()
  18. {
  19. metaData.scriptClass->addInternalCall("Internal_CreateProperty", &ScriptSerializableList::internal_createProperty);
  20. }
  21. ScriptSerializableList* ScriptSerializableList::create(const ScriptSerializableProperty* parentProperty)
  22. {
  23. ManagedSerializableTypeInfoListPtr listTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoList>(parentProperty->getTypeInfo());
  24. MonoType* monoInternalElementType = mono_class_get_type(listTypeInfo->mElementType->getMonoClass());
  25. MonoReflectionType* internalElementType = mono_type_get_object(MonoManager::instance().getDomain(), monoInternalElementType);
  26. void* params[2] = { internalElementType, parentProperty->getManagedInstance() };
  27. MonoObject* managedInstance = metaData.scriptClass->createInstance(params, 2);
  28. ScriptSerializableList* nativeInstance = new (bs_alloc<ScriptSerializableList>()) ScriptSerializableList(managedInstance, listTypeInfo);
  29. return nativeInstance;
  30. }
  31. MonoObject* ScriptSerializableList::internal_createProperty(ScriptSerializableList* nativeInstance)
  32. {
  33. ScriptSerializableProperty* newProperty = ScriptSerializableProperty::create(nativeInstance->mTypeInfo->mElementType);
  34. return newProperty->getManagedInstance();
  35. }
  36. }