| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 | using System;using Utility;namespace Core.State{    public class StateControl : IDisposable    {        public Map<string, IState> States        {            get { return _states; }        }        private Map<string, IState> _states = new Map<string, IState>();        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();                }            }        }    }}
 |