EffectManager.cs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using System;
  2. using System.Collections.Generic;
  3. namespace COM3D2.MeidoPhotoStudio.Plugin
  4. {
  5. internal class EffectManager
  6. {
  7. private Dictionary<Type, IEffectManager> EffectManagers = new Dictionary<Type, IEffectManager>();
  8. private BloomEffectManager bloomEffectManager;
  9. public EffectManager()
  10. {
  11. // Not going to add more effects because SceneCapture does it better anyway
  12. bloomEffectManager = AddManager<BloomEffectManager>();
  13. AddManager<DepthOfFieldEffectManager>();
  14. AddManager<VignetteEffectManager>();
  15. AddManager<FogEffectManager>();
  16. }
  17. public T Get<T>() where T : IEffectManager
  18. {
  19. if (EffectManagers.ContainsKey(typeof(T))) return (T)EffectManagers[typeof(T)];
  20. else return default(T);
  21. }
  22. private T AddManager<T>() where T : IEffectManager, new()
  23. {
  24. T manager = new T();
  25. EffectManagers[typeof(T)] = manager;
  26. return manager;
  27. }
  28. public void Activate()
  29. {
  30. foreach (IEffectManager effectManager in EffectManagers.Values)
  31. {
  32. effectManager.Activate();
  33. }
  34. }
  35. public void Deactivate()
  36. {
  37. foreach (IEffectManager effectManager in EffectManagers.Values)
  38. {
  39. effectManager.Deactivate();
  40. }
  41. }
  42. public void Update()
  43. {
  44. // Bloom is the only effect that needs to update because I'm dumb/lazy
  45. bloomEffectManager.Update();
  46. }
  47. }
  48. }