StateControl.cs 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. using System;
  2. using Utility;
  3. namespace Core.State
  4. {
  5. public class StateControl : IDisposable
  6. {
  7. public Map<string, IState> States
  8. {
  9. get { return _states; }
  10. }
  11. private Map<string, IState> _states = new Map<string, IState>();
  12. public IState CurrIState
  13. {
  14. get { return _currIState; }
  15. }
  16. private IState _currIState;
  17. public string CurrStateName;
  18. public void AddState(string name, IState state)
  19. {
  20. _states[name] = state;
  21. }
  22. public void Update(float t)
  23. {
  24. if (_currIState != null)
  25. {
  26. _currIState.Update(t);
  27. }
  28. }
  29. public void ChangeState(string name, IStateEnterData iStateEnterData = null,bool isQiangZhi=false)
  30. {
  31. if (name.Equals(CurrStateName))
  32. {
  33. return;
  34. }
  35. if (!_states.TryGetValue(name, out IState state))
  36. {
  37. return;
  38. }
  39. if (_currIState != null)
  40. {
  41. if (!isQiangZhi&&!_currIState.IsSwitch(state))
  42. {
  43. return;
  44. }
  45. _currIState.Exit();
  46. }
  47. CurrStateName = name;
  48. _currIState = state;
  49. _currIState.Enter(iStateEnterData);
  50. }
  51. public void Dispose()
  52. {
  53. for (int i = 0; i < _states.Count; i++)
  54. {
  55. IState istate = _states.GetValueByIndex(i);
  56. if (istate != null)
  57. {
  58. istate.Dispose();
  59. }
  60. }
  61. }
  62. }
  63. }