LogicBattleState.cs 1.9 KB

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