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)
- {
- if (name.Equals(CurrStateName))
- {
- return;
- }
- if (!_states.TryGetValue(name, out IState state))
- {
- return;
- }
- if (_currIState != null)
- {
- if (!_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();
- }
- }
- }
- }
- }
|