You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
1.9 KiB

  1. using IPA.Old;
  2. using System;
  3. using System.Collections.Generic;
  4. using Logger = IPA.Logging.Logger;
  5. namespace IPA.Loader.Composite
  6. {
  7. #pragma warning disable CS0618 // Type or member is obsolete
  8. internal class CompositeIPAPlugin : IPlugin
  9. {
  10. private readonly IEnumerable<IPlugin> plugins;
  11. private delegate void CompositeCall(IPlugin plugin);
  12. public CompositeIPAPlugin(IEnumerable<IPlugin> plugins) {
  13. this.plugins = plugins;
  14. }
  15. public void OnApplicationStart() {
  16. Invoke(plugin => plugin.OnApplicationStart());
  17. }
  18. public void OnApplicationQuit() {
  19. Invoke(plugin => plugin.OnApplicationQuit());
  20. }
  21. private void Invoke(CompositeCall callback) {
  22. foreach (var plugin in plugins) {
  23. try {
  24. callback(plugin);
  25. }
  26. catch (Exception ex) {
  27. Logger.log.Error($"{plugin.Name}: {ex}");
  28. }
  29. }
  30. }
  31. public void OnUpdate() {
  32. Invoke(plugin => plugin.OnUpdate());
  33. }
  34. public void OnFixedUpdate() {
  35. Invoke(plugin => plugin.OnFixedUpdate());
  36. }
  37. public string Name => throw new InvalidOperationException();
  38. public string Version => throw new InvalidOperationException();
  39. public void OnLateUpdate() {
  40. Invoke(plugin => {
  41. if (plugin is IEnhancedPlugin saberPlugin)
  42. saberPlugin.OnLateUpdate();
  43. });
  44. }
  45. public void OnLevelWasLoaded(int level)
  46. {
  47. Invoke(plugin => plugin.OnLevelWasLoaded(level));
  48. }
  49. public void OnLevelWasInitialized(int level)
  50. {
  51. Invoke(plugin => plugin.OnLevelWasInitialized(level));
  52. }
  53. }
  54. #pragma warning restore CS0618 // Type or member is obsolete
  55. }