BsScriptSerializedDiff.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Wrappers/BsScriptSerializedDiff.h"
  4. #include "BsScriptMeta.h"
  5. #include "BsMonoClass.h"
  6. #include "Serialization/BsManagedSerializableObject.h"
  7. #include "Wrappers/BsScriptSerializedObject.h"
  8. #include "Serialization/BsManagedSerializableDiff.h"
  9. namespace bs
  10. {
  11. ScriptSerializedDiff::ScriptSerializedDiff(MonoObject* instance, const SPtr<ManagedSerializableDiff>& obj)
  12. : ScriptObject(instance), mSerializedDiff(obj)
  13. {
  14. }
  15. void ScriptSerializedDiff::initRuntimeData()
  16. {
  17. metaData.scriptClass->addInternalCall("Internal_CreateDiff", (void*)&ScriptSerializedDiff::internal_CreateDiff);
  18. metaData.scriptClass->addInternalCall("Internal_ApplyDiff", (void*)&ScriptSerializedDiff::internal_ApplyDiff);
  19. }
  20. MonoObject* ScriptSerializedDiff::internal_CreateDiff(ScriptSerializedObject* oldObj, MonoObject* newObj)
  21. {
  22. SPtr<ManagedSerializableObject> oldSerializedObject = oldObj->getInternal();
  23. SPtr<ManagedSerializableObject> newSerializedObject = ManagedSerializableObject::createFromExisting(newObj);
  24. if (oldSerializedObject == nullptr || newSerializedObject == nullptr)
  25. return nullptr;
  26. oldSerializedObject->serialize();
  27. newSerializedObject->serialize();
  28. SPtr<ManagedSerializableDiff> diff = ManagedSerializableDiff::create(oldSerializedObject, newSerializedObject);
  29. MonoObject* instance = metaData.scriptClass->createInstance();
  30. new (bs_alloc<ScriptSerializedDiff>()) ScriptSerializedDiff(instance, diff);
  31. return instance;
  32. }
  33. void ScriptSerializedDiff::internal_ApplyDiff(ScriptSerializedDiff* thisPtr, MonoObject* obj)
  34. {
  35. SPtr<ManagedSerializableObject> serializedObject = ManagedSerializableObject::createFromExisting(obj);
  36. if (serializedObject == nullptr)
  37. return;
  38. thisPtr->mSerializedDiff->apply(serializedObject);
  39. }
  40. }