using System.Collections; using System.Collections.Generic; using UnityEngine; using FSEvent; using FSBuff; using LitJson; using FSFile; using FSAssist; using UnityEngine.UI; using FSRole; namespace FSCard { /* * 卡片管理 * 负责卡片的生成,销和执行 */ public class CardManager : Singleton { // 我方的手牌 public ArrayList ArmCards { set; get; } // 地方手牌 public ArrayList EnemyCards { set; get; } // 卡片json数据 private JsonData cardValue = null; public CardManager() { ArmCards = new ArrayList(); EnemyCards = new ArrayList(); ReadCardData(); InitListener(); } /* * 从资源中读取json数据 */ private void ReadCardData() { string json = FileManager.Instance.ReadResourceText("Jsons/cards"); if (json != null) { try { cardValue = JsonMapper.ToObject(json); } catch (JsonException e) { Debug.Log(e.ToString()); } } } /* * 初始化监听 */ private void InitListener() { EventListener.Instance.RegisterEvent(EventEnum.EVENT_ATTACK_CARD_EXECUTE, AttackExecute); EventListener.Instance.RegisterEvent(EventEnum.EVENT_DEFENSE_CARD_EXECUTE, DefenseExecute); EventListener.Instance.RegisterEvent(EventEnum.EVENT_SPECIAL_CARD_EXECUTE, SpecialExecute); } /* * 传入数据和GameObject * 挂上卡片类 */ public void LoadCard(GameObject obj, string id, Role source) { // 读取数据,如果没有此项数据,则抛出错误 JsonData oneValue = cardValue[id]; if (oneValue != null && oneValue.IsObject){ Card card = null; // 获取卡片类 int getType = AssistMethods.ReadInt(oneValue, "type"); switch (getType) { case 1: card = obj.AddComponent(); card.Type = CardType.CARD_TYPE_ATTACK; break; case 2: card = obj.AddComponent(); card.Type = CardType.CARD_TYPE_DEFANCE; break; case 3: card = obj.AddComponent(); card.Type = CardType.CARD_TYPE_SPEC; break; } // 配置ID card.ID = id; // 获取消耗 card.Cost = AssistMethods.ReadInt(oneValue, "cost"); // 获得韧性 card.Tenacity = AssistMethods.ReadInt(oneValue, "tenacity"); // 获得值 card.Value = AssistMethods.ReadInt(oneValue, "value"); // 获得对应的BUFF card.BuffID = AssistMethods.ReadString(oneValue, "buff"); // 获取描述 card.Desc = AssistMethods.ReadString(oneValue, "describe"); // 添加对应阵营 card.Source = source; } else { throw new System.Exception("ID : " + id + "没有对应ID的卡片 ... "); } } /* * 卡片执行,根据卡片种类来分别操作 */ /* * 攻击执行 */ private void AttackExecute(Dictionary info) { Card card = (Card)info["card"]; Debug.Log("ID " + card.ID + " 攻击执行 ... "); // 消耗HP card.Target.CurrentAttr.Hp -= card.Value; } /* * 防御执行 */ private void DefenseExecute(Dictionary info) { Card card = (Card)info["card"]; Debug.Log("防守执行 ... "); // 增加防御 card.Target.CurrentAttr.Def += card.Value; } /* * 特殊功能执行 */ private void SpecialExecute(Dictionary info) { SepCard card = (SepCard)info["card"]; if (card != null) { Debug.Log("给角色添加BUFF, ID为 : " + card.BuffID); BuffManager.Instance.LoadBuff(card.Target.gameObject, card.BuffID.ToString()); } } } }