using System.Collections; using System.Collections.Generic; using UnityEngine; using FSEvent; // 战场相关 namespace FSBattle { // 战场回合状态 public enum BattleFieldRound { BATTLE_FIELD_READY_GAME = 0X0010001, // 游戏准备 BATTLE_FIELD_PLAYER_PLAY_A_HAND = 0X0010002, // 玩家出牌 BATTLE_FIELD_ENEMY_ACTION = 0X0010003, // 敌人行动 BATTLE_FIELD_ROUND_END = 0X0010004, // 回合结束 } // 战场组件 public class BattleField : MonoBehaviour { // 记录战场状态 private BattleFieldRound round = BattleFieldRound.BATTLE_FIELD_READY_GAME; // Use this for initialization void Start() { InitEvent(); Invoke("ReadyHandle", 1.0f); } // Update is called once per frame void Update() { } private void OnDestroy() { RemoveEvent(); } /* * 注册事件 */ private void InitEvent() { EventListener.Instance.RegisterEvent(EventEnum.EVENT_ENTER_ENEMY_ACTION_ROUND, EnterEnemyRound); EventListener.Instance.RegisterEvent(EventEnum.EVENT_ENTER_PLAY_A_HAND_ROUND, EnterPlayAHandRound); } /* * 移除事件 */ private void RemoveEvent() { EventListener.Instance.RemoveEvent(EventEnum.EVENT_ENTER_ENEMY_ACTION_ROUND); EventListener.Instance.RemoveEvent(EventEnum.EVENT_ENTER_PLAY_A_HAND_ROUND); } /* * 进入下一个回合 */ public void NextRound() { // 回合循环转化 switch (round) { case BattleFieldRound.BATTLE_FIELD_READY_GAME: print("出牌 ... "); round = BattleFieldRound.BATTLE_FIELD_PLAYER_PLAY_A_HAND; EventListener.Instance.PostEvent(EventEnum.EVENT_SHOW_CARD_PANEL); break; case BattleFieldRound.BATTLE_FIELD_PLAYER_PLAY_A_HAND: print("敌人行动 ... "); round = BattleFieldRound.BATTLE_FIELD_ENEMY_ACTION; EnemyRoundHandle(); break; case BattleFieldRound.BATTLE_FIELD_ENEMY_ACTION: print("回合结束 ... "); round = BattleFieldRound.BATTLE_FIELD_ROUND_END; EventListener.Instance.PostEvent(EventEnum.EVENT_CLEAR_CARDS); break; case BattleFieldRound.BATTLE_FIELD_ROUND_END: print("出牌 ... "); round = BattleFieldRound.BATTLE_FIELD_PLAYER_PLAY_A_HAND; EventListener.Instance.PostEvent(EventEnum.EVENT_SHOW_CARD_PANEL); break; } } /* * 准备游戏回合的事件处理 */ private void ReadyHandle() { // 通过消息中心,发布带参数的消息 Dictionary info = new Dictionary(); info.Add("remind", "准备中 ... "); EventListener.Instance.PostEvent(EventEnum.EVENT_UPDATE_ROUND_TEXT, info); // 过1秒后进入下一回合 Invoke("NextRound", 1.0f); } /* * 进入敌人行动的回合 */ private void EnterEnemyRound() { // 首先得保证上一个回合是出牌回合 if (round == BattleFieldRound.BATTLE_FIELD_PLAYER_PLAY_A_HAND) { NextRound(); } } /* * 处理敌人行动的回合 */ private void EnemyRoundHandle() { // 暂时不处理,过5秒后切换下一回合 Invoke("NextRound", 2.0f); } /* * 回合轮回,重新开始 */ private void EnterPlayAHandRound() { // 首先需要保证上一个回合是结束回合 if (round == BattleFieldRound.BATTLE_FIELD_ROUND_END) { NextRound(); } } } }