CameraManagerSerializer.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. using System.IO;
  2. namespace MeidoPhotoStudio.Plugin;
  3. public class CameraManagerSerializer : Serializer<CameraManager>
  4. {
  5. private const short Version = 1;
  6. private static readonly CameraInfo DummyInfo = new();
  7. private static Serializer<CameraInfo> InfoSerializer =>
  8. Serialization.Get<CameraInfo>();
  9. public override void Serialize(CameraManager manager, BinaryWriter writer)
  10. {
  11. writer.Write(CameraManager.Header);
  12. writer.WriteVersion(Version);
  13. var cameraInfos = GetCameraInfos(manager);
  14. cameraInfos[manager.CurrentCameraIndex].UpdateInfo(CameraUtility.MainCamera);
  15. writer.Write(manager.CurrentCameraIndex);
  16. writer.Write(manager.CameraCount);
  17. foreach (var info in cameraInfos)
  18. InfoSerializer.Serialize(info, writer);
  19. CameraUtility.StopAll();
  20. }
  21. public override void Deserialize(CameraManager manager, BinaryReader reader, SceneMetadata metadata)
  22. {
  23. _ = reader.ReadVersion();
  24. var camera = CameraUtility.MainCamera;
  25. manager.CurrentCameraIndex = reader.ReadInt32();
  26. var cameraCount = reader.ReadInt32();
  27. var cameraInfos = GetCameraInfos(manager);
  28. for (var i = 0; i < cameraCount; i++)
  29. InfoSerializer.Deserialize(i >= manager.CameraCount ? DummyInfo : cameraInfos[i], reader, metadata);
  30. if (metadata.Environment)
  31. return;
  32. cameraInfos[manager.CurrentCameraIndex].Apply(camera);
  33. CameraUtility.StopAll();
  34. }
  35. private static CameraInfo[] GetCameraInfos(CameraManager manager) =>
  36. Utility.GetFieldValue<CameraManager, CameraInfo[]>(manager, "cameraInfos");
  37. }