VersusBattleFieldState.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. public enum VersusBattleFieldStateType
  5. {
  6. None, //无状态,不执行任何操作
  7. Start, //准备阶
  8. Interlude, //过场 (in:相机TransitionIn,执行开场相机动画 (若有),激活更新触发器逻辑 out:所有角色就位准备)
  9. StartingFight, //开始战斗(角色跑到战场)
  10. Fighting, //战斗
  11. Win, //胜利(人物归位)
  12. Failed, //失败(人物归位)
  13. End, //结束
  14. }
  15. delegate VersusBattleFieldState VersusBattleFieldStateCreator(VersusBattleField field);
  16. public abstract class VersusBattleFieldState
  17. {
  18. static Dictionary<VersusBattleFieldStateType, VersusBattleFieldStateCreator> creators;
  19. public static VersusBattleFieldState Create(VersusBattleField field,VersusBattleFieldStateType state)
  20. {
  21. if (creators == null)
  22. RegisterCreators();
  23. return creators.ContainsKey(state) ? creators[state](field) : null;
  24. }
  25. static void RegisterCreators()
  26. {
  27. creators = new Dictionary<VersusBattleFieldStateType, VersusBattleFieldStateCreator>();
  28. creators.Add(VersusBattleFieldStateType.Start, VersusBattleFieldStateStart.Creator);
  29. creators.Add(VersusBattleFieldStateType.Interlude, VersusBattleFieldStateInterlude.Creator);
  30. creators.Add(VersusBattleFieldStateType.StartingFight, VersusBattleFieldStateStartingFight.Creator);
  31. creators.Add(VersusBattleFieldStateType.Fighting, VersusBattleFieldStateFighting.Creator);
  32. creators.Add(VersusBattleFieldStateType.Win, VersusBattleFieldStateWin.Creator);
  33. creators.Add(VersusBattleFieldStateType.Failed, VersusBattleFieldStateFailed.Creator);
  34. creators.Add(VersusBattleFieldStateType.End, VersusBattleFieldStateEnd.Creator);
  35. }
  36. protected VersusBattleFieldStateType mState;
  37. protected VersusBattleField mField;
  38. protected VersusBattleFieldState(VersusBattleField field, VersusBattleFieldStateType state)
  39. {
  40. mField = field;
  41. mState = state;
  42. }
  43. public VersusBattleFieldStateType State { get { return mState; } }
  44. public float StateTime { get; protected set; }
  45. protected void ChangeState(VersusBattleFieldStateType state)
  46. {
  47. if (mField != null)
  48. mField.CurrentState = state;
  49. }
  50. public abstract void OnEnter();
  51. public abstract void OnLeave();
  52. public abstract void Update(float deltaTime);
  53. public abstract void OnDataChanged();
  54. }