BattleField.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using FSEvent;
  5. // 战场相关
  6. namespace FSBattle {
  7. // 战场回合状态
  8. public enum BattleFieldRound {
  9. BATTLE_FIELD_READY_GAME = 0X0010001, // 游戏准备
  10. BATTLE_FIELD_PLAYER_PLAY_A_HAND = 0X0010002, // 玩家出牌
  11. BATTLE_FIELD_ENEMY_ACTION = 0X0010003, // 敌人行动
  12. BATTLE_FIELD_ROUND_END = 0X0010004, // 回合结束
  13. }
  14. // 战场组件
  15. public class BattleField : MonoBehaviour {
  16. // 记录战场状态
  17. private BattleFieldRound round = BattleFieldRound.BATTLE_FIELD_READY_GAME;
  18. // Use this for initialization
  19. void Start() {
  20. InitEvent();
  21. Invoke("ReadyHandle", 1.0f);
  22. }
  23. // Update is called once per frame
  24. void Update() {
  25. }
  26. private void OnDestroy() {
  27. RemoveEvent();
  28. }
  29. /*
  30. * 注册事件
  31. */
  32. private void InitEvent() {
  33. EventListener.Instance.RegisterEvent(EventEnum.EVENT_ENTER_ENEMY_ACTION_ROUND, EnterEnemyRound);
  34. EventListener.Instance.RegisterEvent(EventEnum.EVENT_ENTER_PLAY_A_HAND_ROUND, EnterPlayAHandRound);
  35. }
  36. /*
  37. * 移除事件
  38. */
  39. private void RemoveEvent() {
  40. EventListener.Instance.RemoveEvent(EventEnum.EVENT_ENTER_ENEMY_ACTION_ROUND);
  41. EventListener.Instance.RemoveEvent(EventEnum.EVENT_ENTER_PLAY_A_HAND_ROUND);
  42. }
  43. /*
  44. * 进入下一个回合
  45. */
  46. public void NextRound() {
  47. // 回合循环转化
  48. switch (round) {
  49. case BattleFieldRound.BATTLE_FIELD_READY_GAME:
  50. print("出牌 ... ");
  51. round = BattleFieldRound.BATTLE_FIELD_PLAYER_PLAY_A_HAND;
  52. EventListener.Instance.PostEvent(EventEnum.EVENT_SHOW_CARD_PANEL);
  53. break;
  54. case BattleFieldRound.BATTLE_FIELD_PLAYER_PLAY_A_HAND:
  55. print("敌人行动 ... ");
  56. round = BattleFieldRound.BATTLE_FIELD_ENEMY_ACTION;
  57. EnemyRoundHandle();
  58. break;
  59. case BattleFieldRound.BATTLE_FIELD_ENEMY_ACTION:
  60. print("回合结束 ... ");
  61. round = BattleFieldRound.BATTLE_FIELD_ROUND_END;
  62. EventListener.Instance.PostEvent(EventEnum.EVENT_CLEAR_CARDS);
  63. break;
  64. case BattleFieldRound.BATTLE_FIELD_ROUND_END:
  65. print("出牌 ... ");
  66. round = BattleFieldRound.BATTLE_FIELD_PLAYER_PLAY_A_HAND;
  67. EventListener.Instance.PostEvent(EventEnum.EVENT_SHOW_CARD_PANEL);
  68. break;
  69. }
  70. }
  71. /*
  72. * 准备游戏回合的事件处理
  73. */
  74. private void ReadyHandle() {
  75. // 通过消息中心,发布带参数的消息
  76. Dictionary<string, object> info = new Dictionary<string, object>();
  77. info.Add("remind", "准备中 ... ");
  78. EventListener.Instance.PostEvent(EventEnum.EVENT_UPDATE_ROUND_TEXT, info);
  79. // 过1秒后进入下一回合
  80. Invoke("NextRound", 1.0f);
  81. }
  82. /*
  83. * 进入敌人行动的回合
  84. */
  85. private void EnterEnemyRound() {
  86. // 首先得保证上一个回合是出牌回合
  87. if (round == BattleFieldRound.BATTLE_FIELD_PLAYER_PLAY_A_HAND) {
  88. NextRound();
  89. }
  90. }
  91. /*
  92. * 处理敌人行动的回合
  93. */
  94. private void EnemyRoundHandle() {
  95. // 暂时不处理,过5秒后切换下一回合
  96. Invoke("NextRound", 2.0f);
  97. }
  98. /*
  99. * 回合轮回,重新开始
  100. */
  101. private void EnterPlayAHandRound() {
  102. // 首先需要保证上一个回合是结束回合
  103. if (round == BattleFieldRound.BATTLE_FIELD_ROUND_END) {
  104. NextRound();
  105. }
  106. }
  107. }
  108. }