using System; using UnityEngine; public abstract class GameMod : MonoBehaviour { public enum Result { Success, Timeout, Dead, Quit, MissionFail } [SerializeField] GameModProperty property; bool isInitialized = false; public uint ModID => property.id; public event Action OnDone; private void Awake() { gameObject.SetActive(false); } public void StartMod() { if (!isInitialized) { OnInitialize(); isInitialized = true; } Logger.Log("Start Dungeon " + GetType().Name); OnStartMod(); gameObject.SetActive(true); } public void EndMod() { Logger.Log("End Dungeon " + GetType().Name); OnEndMod(); gameObject.SetActive(false); } private void Update() { if (!isInitialized) return; OnUpdate(); } protected abstract void OnInitialize(); protected abstract void OnStartMod(); protected abstract void OnUpdate(); protected abstract void OnEndMod(); protected void FireOnDone(Result result) => OnDone?.Invoke(result); }