using System.Collections; using System.Collections.Generic; using UnityEngine; using AX.MessageSystem; using System; using UnityEngine.AI; public enum Cloth { 战斗服黄, 避火服, 防化服, 隔热服 } public class Bag : MonoBehaviour { public List EquipList = new List(); private Transform zhandoufu_yellow; private Transform BHF; private Transform FHF; private Transform GRF; private XiaoFangYuanDrawLine drawLine; // private Transform BagUI; private void Awake() { zhandoufu_yellow = transform.Find("zhandoufu_yellow"); BHF = transform.Find("BHF_Body"); FHF = transform.Find("FHF_Body"); GRF = transform.Find("GHF_Body"); //BagUI = GameObject.Find("Canvas").transform.Find("Bag"); // MessageDispatcher.AddListener("ReplayFrame", ReplayFrameSelectEquip); MessageDispatcher.AddListener("ReplayEvent", ReplayEventEquipChange); MessageDispatcher.AddListener("DelectEquip", DelectEquip); } private void ReplayEventEquipChange(IMessage obj) { var eventData = (EventData)obj.Data; if (eventData.eventType == RecordEventType.SelectEquip) { FiremanEquipRecordData data = JsonUtility.FromJson(eventData.json); if (gameObject.name == data.objectName) { EquipList = data.equips; ChangeCloth(); var work = GetComponent().workType; if (work == FireManSkills.LayWaterHose || work == FireManSkills.SprayFoam || work == FireManSkills.SprayWater || work == FireManSkills.Decontamination) { for (int i = 0; i < data.equips.Count; i++) { if (data.equips[i].Name == "消防高压水带") { drawLine.BeginLineNum += data.equips[i].Number; if (!GetComponent().enabled) { GetComponent().enabled = true; GetComponent().enabled = true; } if (GetComponent()) { // if (GetComponent() == null) GetComponent().setLine(); } } } } else if (work == FireManSkills.LayLifeSavingFlarePath) { for (int i = 0; i < data.equips.Count; i++) { if (data.equips[i].Name == "救生照明线") { drawLine.BeginLiftLineNum += data.equips[i].Number; } } } } } } private void OnEnable() { MessageDispatcher.AddListener("EquipSureSubmit", AddEquipFromEquip); } private void OnDisable() { MessageDispatcher.RemoveListener("EquipSureSubmit", AddEquipFromEquip); } private void OnDestroy() { MessageDispatcher.RemoveListener("EquipSureSubmit", AddEquipFromEquip); //MessageDispatcher.RemoveListener("ReplayFrame", ReplayFrameSelectEquip); MessageDispatcher.RemoveListener("ReplayEvent", ReplayEventEquipChange); MessageDispatcher.RemoveListener("DelectEquip", DelectEquip); } private void Start() { drawLine = GetComponent(); } private void DelectEquip(IMessage obj) { if (gameObject == SelectedObjs.selectedCharacters[0]) { List list = (List)obj.Data; for (int i = 0; i < list.Count; i++) { delectEquip(list[i], false); } bagChange(false); //ChangeCloth(); } } private void AddEquipFromEquip(IMessage obj) { FiremanEquipRecordData data = (FiremanEquipRecordData)obj.Data; if (gameObject.name == data.objectName) { EquipAdd(data.equips); // ChangeCloth(); //GetComponent().BagChange(true); //在铺设状态下选择管线/照明线 var work = GetComponent().workType; if (work == FireManSkills.LayWaterHose || work == FireManSkills.SprayFoam || work == FireManSkills.SprayWater || work == FireManSkills.Decontamination) { for (int i = 0; i < data.equips.Count; i++) { if (data.equips[i].Name == "消防高压水带") { drawLine.BeginLineNum += data.equips[i].Number; if (!GetComponent().enabled) { GetComponent().enabled = true; GetComponent().enabled = true; } if (GetComponent()) { // if (GetComponent() == null) GetComponent().setLine(); } } } } else if (work == FireManSkills.LayLifeSavingFlarePath) { for (int i = 0; i < data.equips.Count; i++) { if (data.equips[i].Name == "救生照明线") { drawLine.BeginLiftLineNum += data.equips[i].Number; } } } } } /// /// 消耗装备 /// /// 装备名称 /// 消耗数量,默认为1 private void EquipExped(string equipname, int usenum = 1) { Equip eq = null; for (int i = 0; i < EquipList.Count; i++) { if (EquipList[i].Name == equipname) { eq = EquipList[i]; break; } } if (eq == null) { ResourceLoadWindow.Instance.LoadTextHintWindow("背包中没有该装备", 0.5f); return; } if (eq.IsSelectMore) { if (eq.Number < usenum) { ResourceLoadWindow.Instance.LoadTextHintWindow("背包没有足够的装备", 0.5f); return; } eq.Number -= usenum; if (eq.Number <= 0) { EquipList.Remove(eq); } } else { eq.Number = 0; } bagChange(false); } public void SetEquipNum(string equipname,int num) { Equip eq = GetEquipFromBag(equipname); if (eq!=null) { if (eq.IsSelectMore) { eq.Number = num; } } bagChange(false); } /// /// 删除装备 /// /// /// private void delectEquip(string equipname, bool send = true) { for (int i = 0; i < EquipList.Count; i++) { if (EquipList[i].Name == equipname) { //在铺设过程中更改管线,修改铺设的初始管线数量 if (equipname == "消防高压水带") { //在铺设状态下选择管线/照明线 var work = GetComponent().workType; if (work == FireManSkills.LayWaterHose || work == FireManSkills.SprayFoam || work == FireManSkills.SprayWater || work == FireManSkills.Decontamination) { drawLine.BeginLineNum -= EquipList[i].Number; } } else if (equipname=="救生照明线") { var work = GetComponent().workType; if (work == FireManSkills.LayLifeSavingFlarePath) { drawLine.BeginLiftLineNum -= EquipList[i].Number; } } EquipList.Remove(EquipList[i]); } } if (send) { bagChange(false); } } /// /// 批量添加装备 /// /// /// public void EquipAdd(List qlist) { for (int i = 0; i < qlist.Count; i++) { EquipAdd(qlist[i].Name, qlist[i].Number, false); } bagChange(true); } /// /// 添加一种装备,默认发送UI更改信息 /// /// /// /// public void EquipAdd(string Equipname, int num = 1, bool send = true) { Equip eq = GetEquipFromBag(Equipname); if (eq == null) { eq = EquipSelect.GetInstance.GetInitEquipByName(Equipname); if (eq.IsSelectMore) { eq.Number = num; } EquipList.Add(eq); } else { //可多选装备,背包已有 if (eq.IsSelectMore) { eq.Number += num; } } if (send) { bagChange(true); } } /// /// 从背包获取装备,没有返回null /// /// /// public Equip GetEquipFromBag(string name) { Equip eq = null; for (int i = 0; i < EquipList.Count; i++) { if (EquipList[i].Name == name) { eq = EquipList[i]; break; } } return eq; } /// /// 背包装备更改 /// /// 是否是添加 private void bagChange(bool add) { if (BagPanel.GetInstance.gameObject.activeInHierarchy) { MessageDispatcher.SendMessage("BagChaneg", gameObject); } if (FireManSkillsPanel.GetInstance.gameObject.activeInHierarchy) { if (SelectedObjs.selectedCharacters[0] == gameObject) { FireManSkillsPanel.GetInstance.setUI(this); } } GetComponent().SetEnableSkill(add); FiremanEquipRecordData data = new FiremanEquipRecordData { equips = EquipList, objectName = gameObject.name }; AddRecordEquipChange(data); ChangeCloth(); } /// /// 换装 /// public void ChangeCloth() { Cloth cl = CheckClosthInBag(); ChanageCloth(cl); } private void ChanageCloth(Cloth cloth) { switch (cloth) { case Cloth.战斗服黄: zhandoufu_yellow.gameObject.SetActive(true); BHF.gameObject.SetActive(false); FHF.gameObject.SetActive(false); GRF.gameObject.SetActive(false); break; case Cloth.避火服: zhandoufu_yellow.gameObject.SetActive(false); BHF.gameObject.SetActive(true); FHF.gameObject.SetActive(false); GRF.gameObject.SetActive(false); break; case Cloth.防化服: zhandoufu_yellow.gameObject.SetActive(false); BHF.gameObject.SetActive(false); FHF.gameObject.SetActive(true); GRF.gameObject.SetActive(false); break; case Cloth.隔热服: zhandoufu_yellow.gameObject.SetActive(false); BHF.gameObject.SetActive(false); FHF.gameObject.SetActive(false); GRF.gameObject.SetActive(true); break; default: break; } } /// /// 检查服装 /// /// private Cloth CheckClosthInBag() { Cloth c = Cloth.战斗服黄; for (int i = 0; i < EquipList.Count; i++) { if (EquipList[i].Name == "隔热防护服") { c = Cloth.隔热服; } else if (EquipList[i].Name == "消防避火服") { c = Cloth.避火服; } else if (EquipList[i].Name == "消防防化服") { c = Cloth.防化服; } } return c; } /// /// 添加事件记录 /// /// public void AddRecordEquipChange(FiremanEquipRecordData args) { if (ReplaySetting.PlayStatus == PlayStatus.isEditor && RecordManager.Instance.recordStatus == RecordStatus.normal) { var eventData = new EventData(); eventData.time = RecordManager.Instance.RecordTimer; eventData.cloneObjType = CloneObjType.None; eventData.eventType = RecordEventType.SelectEquip; string json = JsonUtility.ToJson(args); eventData.json = json; RecordManager.Instance.jsonData.eventDataList.Add(eventData); } } /// /// 获取某装备的数量,返回-2为没有装备.-1为不课多选装备 /// /// public int GetEquipNum(string equipname) { int num = 0; Equip sd = GetEquipFromBag(equipname); if (sd == null) { num = -2; } else { if (sd.IsSelectMore) { num = sd.Number; } else { num = -1; } } return num; } }