TimeBattleState.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public enum TimeBattleStateType
  5. {
  6. None, //无状态,不执行任何操作
  7. Start, //起始状态,执行初始化操作。自动进入预加载
  8. Preloading, //预加载状态,加载部分战斗资源(场景信息等)。结束后进入战斗状态
  9. Battle, //战斗状态。
  10. BattleWin, //副本胜利状态
  11. BattleFailed, //副本失败状态
  12. End, //结束,释放资源等
  13. }
  14. delegate TimeBattleState TimeBattleStateCreator(TimeBattle battle);
  15. public abstract class TimeBattleState
  16. {
  17. static Dictionary<TimeBattleStateType, TimeBattleStateCreator> creators;
  18. public static TimeBattleState Create(TimeBattle battle, TimeBattleStateType state)
  19. {
  20. if (creators == null)
  21. RegisterCreators();
  22. return creators.ContainsKey(state) ? creators[state](battle) : null;
  23. }
  24. static void RegisterCreators()
  25. {
  26. creators = new Dictionary<TimeBattleStateType, TimeBattleStateCreator>();
  27. creators.Add(TimeBattleStateType.Start, TimeBattleStateStart.Creator);
  28. creators.Add(TimeBattleStateType.Preloading, TimeBattleStatePreloading.Creator);
  29. creators.Add(TimeBattleStateType.Battle, TimeBattleStateBattle.Creator);
  30. creators.Add(TimeBattleStateType.BattleWin, TimeBattleStateWin.Creator);
  31. creators.Add(TimeBattleStateType.BattleFailed, TimeBattleStateFailed.Creator);
  32. creators.Add(TimeBattleStateType.End, TimeBattleStateEnd.Creator);
  33. }
  34. protected TimeBattleStateType mState;
  35. protected TimeBattle mBattle;
  36. protected TimeBattleState(TimeBattle battle, TimeBattleStateType state)
  37. {
  38. mBattle = battle;
  39. mState = state;
  40. }
  41. public TimeBattleStateType State { get { return mState; } }
  42. protected void ChangeState(TimeBattleStateType state)
  43. {
  44. if (mBattle != null)
  45. mBattle.CurrentState = state;
  46. }
  47. public abstract void OnEnter();
  48. public abstract void OnLeave();
  49. public abstract void Update(float deltaTime);
  50. }