using System; using Utility; namespace Core.State { public class StateControl : IDisposable { public Map States { get { return _states; } } private Map _states = new Map(); public IState CurrIState { get { return _currIState; } } private IState _currIState; public string CurrStateName; public void AddState(string name, IState state) { _states[name] = state; } public void Update(float t) { if (_currIState != null) { _currIState.Update(t); } } public void ChangeState(string name, IStateEnterData iStateEnterData = null,bool isQiangZhi=false) { if (name.Equals(CurrStateName)) { return; } if (!_states.TryGetValue(name, out IState state)) { return; } if (_currIState != null) { if (!isQiangZhi&&!_currIState.IsSwitch(state)) { return; } _currIState.Exit(); } CurrStateName = name; _currIState = state; _currIState.Enter(iStateEnterData); } public void Dispose() { for (int i = 0; i < _states.Count; i++) { IState istate = _states.GetValueByIndex(i); if (istate != null) { istate.Dispose(); } } } } }