EffectManager.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System;
  2. using System.Collections.Generic;
  3. namespace COM3D2.MeidoPhotoStudio.Plugin
  4. {
  5. internal class EffectManager : IManager, ISerializable
  6. {
  7. public const string header = "EFFECT";
  8. public const string footer = "END_EFFECT";
  9. private readonly Dictionary<Type, IEffectManager> EffectManagers = new Dictionary<Type, IEffectManager>();
  10. private readonly BloomEffectManager bloomEffectManager;
  11. public EffectManager()
  12. {
  13. // Not going to add more effects because SceneCapture does it better anyway
  14. bloomEffectManager = AddManager<BloomEffectManager>();
  15. AddManager<DepthOfFieldEffectManager>();
  16. AddManager<VignetteEffectManager>();
  17. AddManager<FogEffectManager>();
  18. }
  19. public T Get<T>() where T : IEffectManager
  20. => EffectManagers.ContainsKey(typeof(T)) ? (T)EffectManagers[typeof(T)] : default;
  21. private T AddManager<T>() where T : IEffectManager, new()
  22. {
  23. T manager = new T();
  24. EffectManagers[typeof(T)] = manager;
  25. return manager;
  26. }
  27. public void Serialize(System.IO.BinaryWriter binaryWriter)
  28. {
  29. binaryWriter.Write(header);
  30. foreach (IEffectManager effectManager in EffectManagers.Values) effectManager.Serialize(binaryWriter);
  31. binaryWriter.Write(footer);
  32. }
  33. public void Deserialize(System.IO.BinaryReader binaryReader)
  34. {
  35. string header;
  36. while ((header = binaryReader.ReadString()) != footer)
  37. {
  38. switch (header)
  39. {
  40. case BloomEffectManager.header:
  41. Get<BloomEffectManager>().Deserialize(binaryReader);
  42. break;
  43. case DepthOfFieldEffectManager.header:
  44. Get<DepthOfFieldEffectManager>().Deserialize(binaryReader);
  45. break;
  46. case VignetteEffectManager.header:
  47. Get<VignetteEffectManager>().Deserialize(binaryReader);
  48. break;
  49. case FogEffectManager.header:
  50. Get<FogEffectManager>().Deserialize(binaryReader);
  51. break;
  52. }
  53. }
  54. }
  55. public void Activate()
  56. {
  57. foreach (IEffectManager effectManager in EffectManagers.Values) effectManager.Activate();
  58. }
  59. public void Deactivate()
  60. {
  61. foreach (IEffectManager effectManager in EffectManagers.Values) effectManager.Deactivate();
  62. }
  63. public void Update()
  64. {
  65. // Bloom is the only effect that needs to update because I'm dumb/lazy
  66. bloomEffectManager.Update();
  67. }
  68. }
  69. }