BattleField.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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_DRAW_CARDS = 0X0010002, // 抽牌
  11. BATTLE_FIELD_ENEMY_DEAL = 0X0010003, // 敌方出牌
  12. BATTLE_FIELD_PLAYER_DEAL = 0X0010004, // 敌方出牌
  13. BATTLE_FIELD_COMPAIRE_CARDS = 0X0010005, // 比牌
  14. BATTLE_FIELD_MAKE_UP_CARDS = 0X0010006, // 补牌
  15. BATTLE_FIELD_PLAYER_PLAY_A_HAND = 0X0010007, // 玩家出牌
  16. BATTLE_FIELD_ENEMY_ACTION = 0X0010008, // 敌人行动
  17. BATTLE_FIELD_ROUND_END = 0X0010009, // 回合结束
  18. }
  19. // 战场组件
  20. public class BattleField : MonoBehaviour {
  21. // 记录战场状态
  22. private BattleFieldRound round = BattleFieldRound.BATTLE_FIELD_READY_GAME;
  23. // Use this for initialization
  24. void Start() {
  25. InitEvent();
  26. Invoke("ReadyHandle", 1.0f);
  27. }
  28. // Update is called once per frame
  29. void Update() {
  30. }
  31. private void OnDestroy() {
  32. RemoveEvent();
  33. }
  34. /*
  35. * 注册事件
  36. */
  37. private void InitEvent() {
  38. EventListener.Instance.RegisterEvent(EventEnum.EVENT_ENTER_COMPAIRE_CARD_ROUND, EnterCompaireRound);
  39. EventListener.Instance.RegisterEvent(EventEnum.EVENT_ENTER_ENEMY_DEAL_ROUND, EnterEnemyDealRound);
  40. EventListener.Instance.RegisterEvent(EventEnum.EVENT_ENTER_PLAY_A_HAND_ROUND, EnterPlayAHandRound);
  41. }
  42. /*
  43. * 移除事件
  44. */
  45. private void RemoveEvent() {
  46. EventListener.Instance.RemoveEvent(EventEnum.EVENT_ENTER_COMPAIRE_CARD_ROUND);
  47. EventListener.Instance.RemoveEvent(EventEnum.EVENT_ENTER_PLAY_A_HAND_ROUND);
  48. }
  49. /*
  50. * 进入下一个回合
  51. */
  52. public void NextRound() {
  53. // 回合循环转化
  54. switch (round) {
  55. case BattleFieldRound.BATTLE_FIELD_READY_GAME:
  56. round = BattleFieldRound.BATTLE_FIELD_DRAW_CARDS;
  57. // 推送玩家抽牌和敌人抽牌事件
  58. EventListener.Instance.PostEvent(EventEnum.EVENT_PLAYER_SHUFFLING_CARD);
  59. // 为了需要再添加敌人抽牌的事件
  60. print("抽牌");
  61. break;
  62. case BattleFieldRound.BATTLE_FIELD_DRAW_CARDS:
  63. round = BattleFieldRound.BATTLE_FIELD_ENEMY_DEAL;
  64. // 暂无行动
  65. // 等未来敌人管理类添加后再处理,当前过2秒后进入下一回合
  66. Invoke("NextRound", 2.0f);
  67. print("敌人出牌");
  68. break;
  69. case BattleFieldRound.BATTLE_FIELD_ENEMY_DEAL:
  70. round = BattleFieldRound.BATTLE_FIELD_PLAYER_DEAL;
  71. print("我方出牌,直到按下回合结束按钮 ... ");
  72. break;
  73. case BattleFieldRound.BATTLE_FIELD_PLAYER_DEAL:
  74. round = BattleFieldRound.BATTLE_FIELD_COMPAIRE_CARDS;
  75. // 暂无行动
  76. // 未来在此实现比牌功能,当前过2秒后进入下一回合
  77. Invoke("NextRound", 2.0f);
  78. print("开始比牌 ... ");
  79. break;
  80. case BattleFieldRound.BATTLE_FIELD_COMPAIRE_CARDS:
  81. round = BattleFieldRound.BATTLE_FIELD_READY_GAME;
  82. // 回合重新回到开始回合,过2秒后进入下一回合
  83. Invoke("NextRound", 2.0f);
  84. print("准备好了 ... ");
  85. break;
  86. case BattleFieldRound.BATTLE_FIELD_MAKE_UP_CARDS:
  87. break;
  88. }
  89. }
  90. /*
  91. * 准备游戏回合的事件处理
  92. */
  93. private void ReadyHandle() {
  94. // 通过消息中心,发布带参数的消息
  95. Dictionary<string, object> info = new Dictionary<string, object>();
  96. info.Add("remind", "准备中 ... ");
  97. EventListener.Instance.PostEvent(EventEnum.EVENT_UPDATE_ROUND_TEXT, info);
  98. // 过1秒后进入下一回合
  99. Invoke("NextRound", 1.0f);
  100. }
  101. /*
  102. * 抽牌结束,进入敌人行动回合
  103. */
  104. private void EnterEnemyDealRound() {
  105. // 保证当前处于抽牌阶段
  106. if (round == BattleFieldRound.BATTLE_FIELD_DRAW_CARDS) {
  107. NextRound();
  108. }
  109. }
  110. /*
  111. * 进入比牌回合
  112. */
  113. private void EnterCompaireRound() {
  114. // 首先得保证上一个回合是我方出牌回合
  115. if (round == BattleFieldRound.BATTLE_FIELD_PLAYER_DEAL) {
  116. NextRound();
  117. }
  118. }
  119. /*
  120. * 回合轮回,重新开始
  121. */
  122. private void EnterPlayAHandRound() {
  123. // 首先需要保证上一个回合是结束回合
  124. if (round == BattleFieldRound.BATTLE_FIELD_ROUND_END) {
  125. NextRound();
  126. }
  127. }
  128. }
  129. }