LogicBattleFieldState.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. public enum LogicBattleFieldStateType
  5. {
  6. None, //无状态,不执行任何操作
  7. DialogBeforeSearch, //巡游前对话
  8. Search, //寻敌阶段(英雄一直往前跑)
  9. Start, //刷怪阶段(提示信息,怪物刷新,站位变化)
  10. Prepare, //准备阶段(buff Debuff阶段,接近阶段,战场位置说明)
  11. BossIntro, //boss出场阶段
  12. BossIntroPrepare, //boss出场结束后,准备阶段
  13. StartingFight, //开始战斗(开始战斗UI动画,相机切换到开战)
  14. Fighting, //战斗
  15. Win, //胜利(人物归位)
  16. Failed, //失败(人物归位)
  17. End, //结束
  18. EditorFighting, //编辑器单机战斗
  19. }
  20. delegate LogicBattleFieldState LogicBattleFieldStateCreator (LogicBattleField field);
  21. public abstract class LogicBattleFieldState
  22. {
  23. static Dictionary<LogicBattleFieldStateType, LogicBattleFieldStateCreator> creators;
  24. public static LogicBattleFieldState Create (LogicBattleField field, LogicBattleFieldStateType state)
  25. {
  26. if (creators == null)
  27. RegisterCreators ();
  28. return creators.ContainsKey (state) ? creators [state] (field) : null;
  29. }
  30. static void RegisterCreators ()
  31. {
  32. creators = new Dictionary<LogicBattleFieldStateType, LogicBattleFieldStateCreator> ();
  33. creators.Add(LogicBattleFieldStateType.DialogBeforeSearch, LogicBattleFieldStateDialogBS.Creator);
  34. creators.Add(LogicBattleFieldStateType.Search, LogicBattleFieldStateSearch.Creator);
  35. creators.Add(LogicBattleFieldStateType.Start, LogicBattleFieldStateStart.Creator);
  36. creators.Add(LogicBattleFieldStateType.BossIntro, LogicBattleFieldStateBossIntro.Creator);
  37. creators.Add(LogicBattleFieldStateType.BossIntroPrepare, LogicBattleFieldStateBossIntroPrepare.Creator);
  38. creators.Add(LogicBattleFieldStateType.StartingFight, LogicBattleFieldStateStartingFight.Creator);
  39. creators.Add(LogicBattleFieldStateType.Fighting, LogicBattleFieldStateFighting.Creator);
  40. creators.Add(LogicBattleFieldStateType.Win, LogicBattleFieldStateWin.Creator);
  41. creators.Add(LogicBattleFieldStateType.Failed, LogicBattleFieldStateFailed.Creator);
  42. creators.Add(LogicBattleFieldStateType.End, LogicBattleFieldStateEnd.Creator);
  43. creators.Add(LogicBattleFieldStateType.EditorFighting, LogicBattleFieldStateEditorFighting.Creator);
  44. }
  45. protected LogicBattleFieldStateType mState;
  46. protected LogicBattleField mField;
  47. protected LogicBattleFieldState (LogicBattleField field, LogicBattleFieldStateType state)
  48. {
  49. mField = field;
  50. mState = state;
  51. }
  52. public LogicBattleFieldStateType State { get { return mState; } }
  53. public float StateTime { get; protected set; }
  54. protected void ChangeState (LogicBattleFieldStateType state)
  55. {
  56. if (mField != null)
  57. mField.CurrentState = state;
  58. }
  59. public abstract void OnEnter ();
  60. public abstract void OnLeave ();
  61. public abstract void Update (float deltaTime);
  62. public abstract void OnDataChanged();
  63. }