BaseAdapter.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. using UnityEngine;
  2. namespace DunGen.Adapters
  3. {
  4. public abstract class BaseAdapter : MonoBehaviour
  5. {
  6. public int Priority = 0;
  7. public virtual bool RunDuringAnalysis { get; set; }
  8. protected DungeonGenerator dungeonGenerator;
  9. protected virtual void OnEnable()
  10. {
  11. var runtimeDungeon = GetComponent<RuntimeDungeon>();
  12. if (runtimeDungeon != null)
  13. {
  14. dungeonGenerator = runtimeDungeon.Generator;
  15. dungeonGenerator.RegisterPostProcessStep(OnPostProcess, Priority);
  16. dungeonGenerator.Cleared += Clear;
  17. }
  18. else
  19. Debug.LogError("[DunGen Adapter] RuntimeDungeon component is missing on GameObject '" + gameObject.name + "'. Adapters must be attached to the same GameObject as your RuntimeDungeon component");
  20. }
  21. protected virtual void OnDisable()
  22. {
  23. if (dungeonGenerator != null)
  24. {
  25. dungeonGenerator.UnregisterPostProcessStep(OnPostProcess);
  26. dungeonGenerator.Cleared -= Clear;
  27. }
  28. }
  29. private void OnPostProcess(DungeonGenerator generator)
  30. {
  31. if (!generator.IsAnalysis || RunDuringAnalysis)
  32. Run(generator);
  33. }
  34. protected virtual void Clear() { }
  35. protected abstract void Run(DungeonGenerator generator);
  36. }
  37. }