using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using FSEvent; using FSBattle; public class CardPanelManager : MonoBehaviour { public Transform cardPanel; public GameObject cardPrefab; // Use this for initialization void Start () { InitEvents(); } // Update is called once per frame void Update () { } private void OnDestroy() { RemoveEvents(); } /* * 注册监听事件 */ private void InitEvents() { print("Card Panel 注册事件 ... "); EventListener.Instance.RegisterEvent(EventEnum.EVENT_PLAYER_SHUFFLING_CARD, ShufflingCard); EventListener.Instance.RegisterEvent(EventEnum.EVENT_CLEAR_CARDS, CleatCards); EventListener.Instance.RegisterEvent(EventEnum.EVENT_REMOVE_TARGET_CARD, RemoveTargetCard); EventListener.Instance.RegisterEvent(EventEnum.EVENT_ENEMY_DEAL_CARD, EnemyDealCard); } /* * 移除监听事件 */ private void RemoveEvents() { EventListener.Instance.RemoveEvent(EventEnum.EVENT_PLAYER_SHUFFLING_CARD); EventListener.Instance.RemoveEvent(EventEnum.EVENT_CLEAR_CARDS); EventListener.Instance.RemoveEvent(EventEnum.EVENT_REMOVE_TARGET_CARD); EventListener.Instance.RemoveEvent(EventEnum.EVENT_ENEMY_DEAL_CARD); } /* * 发牌 */ private void ShufflingCard() { // 如果手牌小于5,则 if (BattleFieldManager.Instance.GetArmyHandCards().Count < 5) { AddPlayerCard(); Invoke("ShufflingCard", 1.0f); } else { Invoke("NoticeEnemyDeal", 2.0f); } } /* * 通知可以进入敌人出牌的回合了 */ private void NoticeEnemyDeal() { EventListener.Instance.PostEvent(EventEnum.EVENT_ENTER_ENEMY_DEAL_ROUND); } /* * 添加卡牌 */ public void AddPlayerCard() { // 创建一个卡牌 GameObject card = Instantiate(cardPrefab); // 将卡牌加到指定的图层中 card.transform.SetParent(cardPanel, false); BattleFieldManager.Instance.GetArmyHandCards().Add(card.transform); ArrangePlayerCards(); } /* * 重新排列卡牌 */ private void ArrangePlayerCards() { // 空隙 float space = 50; // 配置的半径 float radius = 300; // 获取偏移的角度 float angle = Mathf.Atan(space / radius) * 180 / Mathf.PI; // 遍历数组 for (int i = 0; i < BattleFieldManager.Instance.GetArmyHandCards().Count; i++) { // 重定义位置 float loc = i - (float)(BattleFieldManager.Instance.GetArmyHandCards().Count - 1) / 2; Transform cardTransform = (Transform)BattleFieldManager.Instance.GetArmyHandCards()[i]; // 设置位置 cardTransform.localPosition = new Vector3(loc * space, 0, 0); // 设置角度 cardTransform.localRotation = Quaternion.Euler(0, 0, angle * (loc * -1)); float scale = 1 - (Mathf.Abs(loc) / 5); cardTransform.localScale = new Vector3(scale, scale, 1); } } /* * 敌人出牌 */ private void EnemyDealCard() { // 暂时设定为新建3个卡片,排列到某个位置 for (int i = 0; i < 3; i++) { // 创建卡片 GameObject card = Instantiate(cardPrefab); card.transform.SetParent(cardPanel); card.transform.localScale = new Vector3(0.6f, 0.6f, 1); card.transform.localPosition = new Vector3(Screen.width / 2 - 100, Screen.height / 2 + i * 30, 0); BattleFieldManager.Instance.GetEnemyHandCards().Add(card.transform); } Invoke("NotifyPlayerDeal", 0.2f); } /* * 通知玩家出牌 */ private void NotifyPlayerDeal() { EventListener.Instance.PostEvent(EventEnum.EVENT_ENTER_PLAYER_DEAL_ROUND); } /* * 移除指定的卡片 */ private void RemoveTargetCard(Dictionary info) { // 首先获取卡片 Transform card = (Transform)info["card"]; // 从视图和数组中 Destroy(card.gameObject); BattleFieldManager.Instance.GetArmyHandCards().Remove(card); // 重新排列 ArrangePlayerCards(); } /* * 清理手牌 */ private void CleatCards() { // 清理我方手牌 foreach (Transform card in BattleFieldManager.Instance.GetArmyHandCards()) { Destroy(card.gameObject); } BattleFieldManager.Instance.GetArmyHandCards().Clear(); // 清理地方手牌 foreach (Transform card in BattleFieldManager.Instance.GetEnemyHandCards()) { Destroy(card.gameObject); } BattleFieldManager.Instance.GetEnemyHandCards().Clear(); EventListener.Instance.PostEvent(EventEnum.EVENT_ENTER_PLAY_A_HAND_ROUND); } }