BsScriptSerializableArray.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Wrappers/BsScriptSerializableArray.h"
  4. #include "BsScriptMeta.h"
  5. #include "BsMonoField.h"
  6. #include "BsMonoClass.h"
  7. #include "BsMonoManager.h"
  8. #include "BsMonoUtil.h"
  9. #include "Serialization/BsScriptAssemblyManager.h"
  10. #include "Serialization/BsManagedSerializableObjectInfo.h"
  11. #include "Wrappers/BsScriptSerializableProperty.h"
  12. namespace bs
  13. {
  14. ScriptSerializableArray::ScriptSerializableArray(MonoObject* instance, const SPtr<ManagedSerializableTypeInfoArray>& typeInfo)
  15. :ScriptObject(instance), mTypeInfo(typeInfo)
  16. {
  17. }
  18. void ScriptSerializableArray::initRuntimeData()
  19. {
  20. metaData.scriptClass->addInternalCall("Internal_CreateProperty", (void*)&ScriptSerializableArray::internal_createProperty);
  21. }
  22. MonoObject* ScriptSerializableArray::create(const ScriptSerializableProperty* native, MonoObject* managed)
  23. {
  24. SPtr<ManagedSerializableTypeInfoArray> arrayTypeInfo =
  25. std::static_pointer_cast<ManagedSerializableTypeInfoArray>(native->getTypeInfo());
  26. MonoReflectionType* internalElementType = MonoUtil::getType(arrayTypeInfo->mElementType->getMonoClass());
  27. void* params[2] = { internalElementType, managed };
  28. MonoObject* managedInstance = metaData.scriptClass->createInstance(params, 2);
  29. new (bs_alloc<ScriptSerializableArray>()) ScriptSerializableArray(managedInstance, arrayTypeInfo);
  30. return managedInstance;
  31. }
  32. MonoObject* ScriptSerializableArray::internal_createProperty(ScriptSerializableArray* nativeInstance)
  33. {
  34. return ScriptSerializableProperty::create(nativeInstance->mTypeInfo->mElementType);
  35. }
  36. }