BsScriptSerializableDictionary.cpp 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include "BsScriptSerializableDictionary.h"
  2. #include "BsScriptMeta.h"
  3. #include "BsMonoField.h"
  4. #include "BsMonoClass.h"
  5. #include "BsMonoManager.h"
  6. #include "BsRuntimeScriptObjects.h"
  7. #include "BsManagedSerializableObjectInfo.h"
  8. #include "BsScriptSerializableProperty.h"
  9. namespace BansheeEngine
  10. {
  11. ScriptSerializableDictionary::ScriptSerializableDictionary(MonoObject* instance, const ManagedSerializableTypeInfoDictionaryPtr& typeInfo)
  12. :ScriptObject(instance), mTypeInfo(typeInfo)
  13. {
  14. }
  15. void ScriptSerializableDictionary::initRuntimeData()
  16. {
  17. metaData.scriptClass->addInternalCall("Internal_CreateKeyProperty", &ScriptSerializableDictionary::internal_createKeyProperty);
  18. metaData.scriptClass->addInternalCall("Internal_CreateValueProperty", &ScriptSerializableDictionary::internal_createValueProperty);
  19. }
  20. ScriptSerializableDictionary* ScriptSerializableDictionary::create(const ManagedSerializableTypeInfoDictionaryPtr& typeInfo, MonoObject* object)
  21. {
  22. MonoType* monoInternalKeyType = mono_class_get_type(typeInfo->mKeyType->getMonoClass());
  23. MonoReflectionType* internalKeyType = mono_type_get_object(MonoManager::instance().getDomain(), monoInternalKeyType);
  24. MonoType* monoInternalValueType = mono_class_get_type(typeInfo->mValueType->getMonoClass());
  25. MonoReflectionType* internalValueType = mono_type_get_object(MonoManager::instance().getDomain(), monoInternalValueType);
  26. void* params[3] = { object, internalKeyType, internalValueType };
  27. MonoObject* managedInstance = metaData.scriptClass->createInstance(params, 3);
  28. ScriptSerializableDictionary* nativeInstance = new (bs_alloc<ScriptSerializableDictionary>()) ScriptSerializableDictionary(managedInstance, typeInfo);
  29. return nativeInstance;
  30. }
  31. MonoObject* ScriptSerializableDictionary::internal_createKeyProperty(ScriptSerializableDictionary* nativeInstance)
  32. {
  33. ScriptSerializableProperty* newProperty = ScriptSerializableProperty::create(nativeInstance->mTypeInfo->mKeyType);
  34. return newProperty->getManagedInstance();
  35. }
  36. MonoObject* ScriptSerializableDictionary::internal_createValueProperty(ScriptSerializableDictionary* nativeInstance)
  37. {
  38. ScriptSerializableProperty* newProperty = ScriptSerializableProperty::create(nativeInstance->mTypeInfo->mValueType);
  39. return newProperty->getManagedInstance();
  40. }
  41. }