BattleField.cs 6.3 KB

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