CardPanelManager.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. using FSEvent;
  6. using FSBattle;
  7. public class CardPanelManager : MonoBehaviour {
  8. public Transform cardPanel;
  9. public GameObject cardPrefab;
  10. // Use this for initialization
  11. void Start () {
  12. InitEvents();
  13. }
  14. // Update is called once per frame
  15. void Update () {
  16. }
  17. private void OnDestroy() {
  18. RemoveEvents();
  19. }
  20. /*
  21. * 注册监听事件
  22. */
  23. private void InitEvents() {
  24. print("Card Panel 注册事件 ... ");
  25. EventListener.Instance.RegisterEvent(EventEnum.EVENT_PLAYER_SHUFFLING_CARD, ShufflingCard);
  26. EventListener.Instance.RegisterEvent(EventEnum.EVENT_CLEAR_CARDS, CleatCards);
  27. EventListener.Instance.RegisterEvent(EventEnum.EVENT_REMOVE_TARGET_CARD, RemoveTargetCard);
  28. EventListener.Instance.RegisterEvent(EventEnum.EVENT_ENEMY_DEAL_CARD, EnemyDealCard);
  29. }
  30. /*
  31. * 移除监听事件
  32. */
  33. private void RemoveEvents() {
  34. EventListener.Instance.RemoveEvent(EventEnum.EVENT_PLAYER_SHUFFLING_CARD);
  35. EventListener.Instance.RemoveEvent(EventEnum.EVENT_CLEAR_CARDS);
  36. EventListener.Instance.RemoveEvent(EventEnum.EVENT_REMOVE_TARGET_CARD);
  37. EventListener.Instance.RemoveEvent(EventEnum.EVENT_ENEMY_DEAL_CARD);
  38. }
  39. /*
  40. * 发牌
  41. */
  42. private void ShufflingCard() {
  43. // 如果手牌小于5,则
  44. if (BattleFieldManager.Instance.GetArmyHandCards().Count < 5) {
  45. AddPlayerCard();
  46. Invoke("ShufflingCard", 1.0f);
  47. } else {
  48. Invoke("NoticeEnemyDeal", 2.0f);
  49. }
  50. }
  51. /*
  52. * 通知可以进入敌人出牌的回合了
  53. */
  54. private void NoticeEnemyDeal() {
  55. EventListener.Instance.PostEvent(EventEnum.EVENT_ENTER_ENEMY_DEAL_ROUND);
  56. }
  57. /*
  58. * 添加卡牌
  59. */
  60. public void AddPlayerCard() {
  61. // 创建一个卡牌
  62. GameObject card = Instantiate(cardPrefab);
  63. // 将卡牌加到指定的图层中
  64. card.transform.SetParent(cardPanel, false);
  65. BattleFieldManager.Instance.GetArmyHandCards().Add(card.transform);
  66. ArrangePlayerCards();
  67. }
  68. /*
  69. * 重新排列卡牌
  70. */
  71. private void ArrangePlayerCards() {
  72. // 空隙
  73. float space = 50;
  74. // 配置的半径
  75. float radius = 300;
  76. // 获取偏移的角度
  77. float angle = Mathf.Atan(space / radius) * 180 / Mathf.PI;
  78. // 遍历数组
  79. for (int i = 0; i < BattleFieldManager.Instance.GetArmyHandCards().Count; i++) {
  80. // 重定义位置
  81. float loc = i - (float)(BattleFieldManager.Instance.GetArmyHandCards().Count - 1) / 2;
  82. Transform cardTransform = (Transform)BattleFieldManager.Instance.GetArmyHandCards()[i];
  83. // 设置位置
  84. cardTransform.localPosition = new Vector3(loc * space, 0, 0);
  85. // 设置角度
  86. cardTransform.localRotation = Quaternion.Euler(0, 0, angle * (loc * -1));
  87. float scale = 1 - (Mathf.Abs(loc) / 5);
  88. cardTransform.localScale = new Vector3(scale, scale, 1);
  89. }
  90. }
  91. /*
  92. * 敌人出牌
  93. */
  94. private void EnemyDealCard() {
  95. // 暂时设定为新建3个卡片,排列到某个位置
  96. for (int i = 0; i < 3; i++) {
  97. // 创建卡片
  98. GameObject card = Instantiate(cardPrefab);
  99. card.transform.SetParent(cardPanel);
  100. card.transform.localScale = new Vector3(0.6f, 0.6f, 1);
  101. card.transform.localPosition = new Vector3(Screen.width / 2 - 100, Screen.height / 2 + i * 30, 0);
  102. BattleFieldManager.Instance.GetEnemyHandCards().Add(card.transform);
  103. }
  104. Invoke("NotifyPlayerDeal", 0.2f);
  105. }
  106. /*
  107. * 通知玩家出牌
  108. */
  109. private void NotifyPlayerDeal() {
  110. EventListener.Instance.PostEvent(EventEnum.EVENT_ENTER_PLAYER_DEAL_ROUND);
  111. }
  112. /*
  113. * 移除指定的卡片
  114. */
  115. private void RemoveTargetCard(Dictionary<string, object> info) {
  116. // 首先获取卡片
  117. Transform card = (Transform)info["card"];
  118. // 从视图和数组中
  119. Destroy(card.gameObject);
  120. BattleFieldManager.Instance.GetArmyHandCards().Remove(card);
  121. // 重新排列
  122. ArrangePlayerCards();
  123. }
  124. /*
  125. * 清理手牌
  126. */
  127. private void CleatCards() {
  128. // 清理我方手牌
  129. foreach (Transform card in BattleFieldManager.Instance.GetArmyHandCards()) {
  130. Destroy(card.gameObject);
  131. }
  132. BattleFieldManager.Instance.GetArmyHandCards().Clear();
  133. // 清理地方手牌
  134. foreach (Transform card in BattleFieldManager.Instance.GetEnemyHandCards()) {
  135. Destroy(card.gameObject);
  136. }
  137. BattleFieldManager.Instance.GetEnemyHandCards().Clear();
  138. EventListener.Instance.PostEvent(EventEnum.EVENT_ENTER_PLAY_A_HAND_ROUND);
  139. }
  140. }