BsScriptSerializableProperty.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "BsScriptSerializableProperty.h"
  2. #include "BsScriptMeta.h"
  3. #include "BsMonoField.h"
  4. #include "BsMonoClass.h"
  5. #include "BsMonoManager.h"
  6. #include "BsMonoUtil.h"
  7. #include "BsManagedSerializableObjectInfo.h"
  8. #include "BsScriptSerializableObject.h"
  9. #include "BsScriptSerializableArray.h"
  10. namespace BansheeEngine
  11. {
  12. ScriptSerializableProperty::ScriptSerializableProperty(MonoObject* instance, const ManagedSerializableTypeInfoPtr& typeInfo)
  13. :ScriptObject(instance), mTypeInfo(typeInfo)
  14. {
  15. }
  16. void ScriptSerializableProperty::initRuntimeData()
  17. {
  18. metaData.scriptClass->addInternalCall("Internal_CreateObject", &ScriptSerializableProperty::internal_createObject);
  19. metaData.scriptClass->addInternalCall("Internal_CreateArray", &ScriptSerializableProperty::internal_createArray);
  20. }
  21. ScriptSerializableProperty* ScriptSerializableProperty::create(const ManagedSerializableTypeInfoPtr& typeInfo)
  22. {
  23. MonoObject* managedInstance = metaData.scriptClass->createInstance();
  24. ScriptSerializableProperty* nativeInstance = new (bs_alloc<ScriptSerializableProperty>()) ScriptSerializableProperty(managedInstance, typeInfo);
  25. return nativeInstance;
  26. }
  27. MonoObject* ScriptSerializableProperty::internal_createObject(ScriptSerializableProperty* nativeInstance, MonoObject* object)
  28. {
  29. ScriptSerializableObject* newObject = ScriptSerializableObject::create(nativeInstance->mTypeInfo, object);
  30. return newObject->getManagedInstance();
  31. }
  32. MonoObject* ScriptSerializableProperty::internal_createArray(ScriptSerializableProperty* nativeInstance, MonoObject* object)
  33. {
  34. ManagedSerializableTypeInfoArrayPtr arrayTypeInfo = std::static_pointer_cast<ManagedSerializableTypeInfoArray>(nativeInstance->mTypeInfo);
  35. ScriptSerializableArray* newObject = ScriptSerializableArray::create(arrayTypeInfo, object);
  36. return newObject->getManagedInstance();
  37. }
  38. }