BsScriptSerializableArray.cpp 1.7 KB

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