using Core.Input; using TowerDefense.UI.HUD; using State = TowerDefense.UI.HUD.EndlessGameUI.State; namespace TowerDefense.UI { /// /// TD Specific input switcher that also disables controls when the game is paused /// PVE 无尽模式使用 /// public class EndlessTowerDefenseInputSchemeSwitcher : InputSchemeSwitcher { /// /// Gets whether the game is in a paused state /// public bool isPaused { get { return EndlessGameUI.instance.state == State.Paused; } } /// /// Register GameUI's stateChanged event /// protected virtual void Start() { if (EndlessGameUI.instanceExists) EndlessGameUI.instance.stateChanged += OnUIStateChanged; } /// /// Do nothing when game is paused /// protected override void Update() { if (isPaused) return; base.Update(); } /// /// Unregister from GameUI's stateChanged event /// protected virtual void OnDestroy() { if (EndlessGameUI.instanceExists) EndlessGameUI.instance.stateChanged -= OnUIStateChanged; } /// /// Activate or deactivate the current input scheme when the game pauses/unpauses /// void OnUIStateChanged(State oldState, State newState) { if (m_CurrentScheme == null) return; if (newState == State.Paused) m_CurrentScheme.Deactivate(null); else m_CurrentScheme.Activate(null); } } }