BossBattleFieldState.cs 2.7 KB

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