public class BattleClock { public delegate void TimeChangedAction(BattleTime timeNow); public event TimeChangedAction OnTimeChanged; private int mRoundNumber; private RoundStep mStep; public BattleClock() { mRoundNumber = 0; mStep = RoundStep.None; } public void AdvanceRound() { mRoundNumber++; mStep = RoundStep.StartOfRound; TriggerOnTimeChanged(); } public void AdvanceToStep(RoundStep step) { mStep = step; TriggerOnTimeChanged(); } private void TriggerOnTimeChanged() { if (OnTimeChanged != null) OnTimeChanged(this.Now); } public BattleTime Now {get => new BattleTime(mRoundNumber, mStep);} }