BsScriptSerializableArrayInfo.cpp 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #include "BsScriptSerializableArrayInfo.h"
  2. #include "BsScriptSerializableField.h"
  3. #include "BsScriptMeta.h"
  4. #include "BsMonoField.h"
  5. #include "BsMonoClass.h"
  6. #include "BsMonoManager.h"
  7. #include "BsRuntimeScriptObjects.h"
  8. #include "BsManagedSerializableArray.h"
  9. #include "BsManagedSerializableObjectInfo.h"
  10. namespace BansheeEngine
  11. {
  12. MonoField* ScriptSerializableArrayInfo::ElementTypeField = nullptr;
  13. ScriptSerializableArrayInfo::ScriptSerializableArrayInfo()
  14. {
  15. }
  16. void ScriptSerializableArrayInfo::initMetaData()
  17. {
  18. metaData = ScriptMeta(BansheeEngineAssemblyName, "BansheeEngine", "SerializableArrayInfo", &ScriptSerializableArrayInfo::initRuntimeData);
  19. MonoManager::registerScriptType(&metaData);
  20. }
  21. void ScriptSerializableArrayInfo::initRuntimeData()
  22. {
  23. metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptSerializableArrayInfo::internal_createInstance);
  24. metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptSerializableArrayInfo::internal_destroyInstance);
  25. ElementTypeField = metaData.scriptClass->getField("elementType");
  26. }
  27. void ScriptSerializableArrayInfo::internal_createInstance(MonoObject* instance, MonoObject* object)
  28. {
  29. ScriptSerializableArrayInfo* nativeInstance = new (cm_alloc<ScriptSerializableArrayInfo>()) ScriptSerializableArrayInfo();
  30. nativeInstance->createInstance(instance);
  31. metaData.thisPtrField->setValue(instance, &nativeInstance);
  32. //MonoManager::instance().findClass(mono_object_get_class(object));
  33. //RuntimeScriptObjects::instance().determineType()
  34. //ManagedSerializableArrayPtr serializableArray = ManagedSerializableArray::create(object);
  35. //if(serializableObject == nullptr) // Object is not serializable
  36. // return;
  37. //ManagedSerializableObjectInfoPtr objInfo = serializableObject->getObjectInfo();
  38. //::MonoClass* serializableFieldClass = ScriptSerializableField::getMetaData()->scriptClass->_getInternalClass();
  39. //MonoArray* serializableFieldArray = mono_array_new(MonoManager::instance().getDomain(),
  40. // serializableFieldClass, (UINT32)objInfo->mFields.size());
  41. //UINT32 i = 0;
  42. //for(auto& field : objInfo->mFields)
  43. //{
  44. // ScriptSerializableField* serializableField = ScriptSerializableField::create(instance, field.second);
  45. // MonoObject* fieldManagedInstance = serializableField->getManagedInstance();
  46. // void* elemAddr = mono_array_addr_with_size(serializableFieldArray, sizeof(MonoObject*), i);
  47. // memcpy(elemAddr, &fieldManagedInstance, sizeof(MonoObject*));
  48. // i++;
  49. //}
  50. //FieldsField->setValue(instance, serializableFieldArray);
  51. }
  52. void ScriptSerializableArrayInfo::internal_destroyInstance(ScriptSerializableArrayInfo* nativeInstance)
  53. {
  54. nativeInstance->~ScriptSerializableArrayInfo();
  55. cm_free(nativeInstance);
  56. }
  57. }