using AX.InputSystem; using AX.MessageSystem; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; using UnityEngine.UI; public enum FireManSkills { None = 0, LayWaterHose = 1 << 1, LayLifeSavingFlarePath = 1 << 2, SprayWater = 1 << 3, SprayFoam = 1 << 4, ForcibleEntry = 1 << 5, DischargeSmoke = 1 << 6, Lighting = 1 << 7, PackUpLine = 1 << 8, TagSearchRoom = 1 << 9, EquipSelect = 1 << 10, Save = 1 << 11, AskPeople = 1 << 12, ClearDangerous = 1 << 13, ClearSundries = 1 << 14, Decontamination = 1 << 15 } public class FireManMessage : MonoBehaviour { public FireManSkills workType;//记录是喷水还是照明等 public FireManSkills EnabledSkills; //public ParticleEnum waterType;//记录喷水方式 private GameObject shuiqiang; private GameObject wuchiju; private GameObject zhaomingdeng; private GameObject panyanji; private Bag bag; private XiaoFangYuanDrawLine drawline; private long GameObjID; private bool flag;//是否连接水源 void Awake() { wuchiju = TransformHelper.FindChild(transform, "WuChiJu").gameObject; zhaomingdeng = TransformHelper.FindChild(transform, "ZhaoMingDeng").gameObject; panyanji = TransformHelper.FindChild(transform, "PaiYanJi").gameObject; MessageDispatcher.AddListener("WaterSourceChanged", WaterSourceChanged); MessageDispatcher.AddListener("WaterSeparaterChange", WaterseparadChange); MessageDispatcher.AddListener("LayWaterHose", LayWaterHose); MessageDispatcher.AddListener("LayLifeSavingFlarePath", LayLifeSavingFlarePath); MessageDispatcher.AddListener("ForcibleEntry", ForcibleEntry); MessageDispatcher.AddListener("DischargeSmoke", DischargeSmoke); MessageDispatcher.AddListener("Lighting", Lightingfunc); MessageDispatcher.AddListener("Save", Save); MessageDispatcher.AddListener("PackUpLine", PackUpLine); MessageDispatcher.AddListener("TagSearchRoom", TagSearchRoom); MessageDispatcher.AddListener("EquipSelect", EquipSelectfunc); MessageDispatcher.AddListener("SprayWater", SprayWater); MessageDispatcher.AddListener("SprayFoam", SprayFoam); // MessageDispatcher.AddListener("BagChaneg", BagChange); } void OnDestroy() { MessageDispatcher.RemoveListener("WaterSourceChanged", WaterSourceChanged); MessageDispatcher.RemoveListener("WaterSeparaterChange", WaterseparadChange); MessageDispatcher.RemoveListener("LayWaterHose", LayWaterHose); MessageDispatcher.RemoveListener("LayLifeSavingFlarePath", LayLifeSavingFlarePath); MessageDispatcher.RemoveListener("ForcibleEntry", ForcibleEntry); MessageDispatcher.RemoveListener("DischargeSmoke", DischargeSmoke); MessageDispatcher.RemoveListener("Lighting", Lightingfunc); MessageDispatcher.RemoveListener("Save", Save); MessageDispatcher.RemoveListener("PackUpLine", PackUpLine); MessageDispatcher.RemoveListener("TagSearchRoom", TagSearchRoom); MessageDispatcher.RemoveListener("EquipSelect", EquipSelectfunc); MessageDispatcher.RemoveListener("SprayWater", SprayWater); MessageDispatcher.RemoveListener("SprayFoam", SprayFoam); //MessageDispatcher.RemoveListener("BagChaneg", BagChange); } private void WaterseparadChange(IMessage obj) { if (GetComponent()) { Waterseparadata waterdata = (Waterseparadata)obj.Data; if (waterdata.receiveId == GameObjID) { flag = waterdata.IsContent; int type = (int)waterdata.watertype; if (type==0) { flag = false; if (workType == FireManSkills.SprayWater || workType == FireManSkills.Decontamination) { workType = FireManSkills.None; EnabledSkills &= ~FireManSkills.SprayWater; EnabledSkills &= ~FireManSkills.Decontamination; MessageDispatcher.SendMessage(GameObjID, "WaterSwitch", flag); GetComponent().EndDraw(); } else { if ((EnabledSkills & FireManSkills.SprayWater) != 0) { EnabledSkills &= ~FireManSkills.SprayWater; } if ((EnabledSkills & FireManSkills.Decontamination) != 0) { EnabledSkills &= ~FireManSkills.Decontamination; } } } if (type == 1)//普通水 { if (flag) { EnabledSkills |= FireManSkills.SprayWater; EnabledSkills |= FireManSkills.Decontamination; } else { if (workType == FireManSkills.SprayWater || workType == FireManSkills.Decontamination) { workType = FireManSkills.None; EnabledSkills &= ~FireManSkills.SprayWater; EnabledSkills &= ~FireManSkills.Decontamination; MessageDispatcher.SendMessage(GameObjID, "WaterSwitch", flag); GetComponent().EndDraw(); } else { if ((EnabledSkills & FireManSkills.SprayWater) != 0) { EnabledSkills &= ~FireManSkills.SprayWater; } if ((EnabledSkills & FireManSkills.Decontamination) != 0) { EnabledSkills &= ~FireManSkills.Decontamination; } } } } if (type == 2)//泡沫 { if (flag) EnabledSkills |= FireManSkills.SprayFoam; else { workType = FireManSkills.None; if ((EnabledSkills & FireManSkills.SprayFoam) != 0) { EnabledSkills &= ~FireManSkills.SprayFoam; } MessageDispatcher.SendMessage(GetComponent().gameObjID, "WaterSwitch", flag); GetComponent().EndDraw(); } } if (type == 3)//有水也有泡沫 { if (flag) { EnabledSkills |= FireManSkills.SprayWater; EnabledSkills |= FireManSkills.Decontamination; EnabledSkills |= FireManSkills.SprayFoam; } else { if (workType == FireManSkills.SprayWater || workType == FireManSkills.Decontamination || workType == FireManSkills.SprayFoam) { workType = FireManSkills.None; EnabledSkills &= ~FireManSkills.SprayWater; EnabledSkills &= ~FireManSkills.Decontamination; EnabledSkills &= ~FireManSkills.SprayFoam; MessageDispatcher.SendMessage(GameObjID, "WaterSwitch", flag); GetComponent().EndDraw(); } else { if ((EnabledSkills & FireManSkills.SprayWater) != 0) { EnabledSkills &= ~FireManSkills.SprayWater; } if ((EnabledSkills & FireManSkills.Decontamination) != 0) { EnabledSkills &= ~FireManSkills.Decontamination; } if ((EnabledSkills & FireManSkills.SprayFoam) != 0) { EnabledSkills &= ~FireManSkills.SprayFoam; } } } } SprayChangeMove(flag); if (!RecordEvent.IsReplay()) { if (this != null && FireManSkillsPanel.GetInstance != null && FireManSkillsPanel.GetInstance.gameObject.activeSelf) MessageDispatcher.SendMessage("FiremanSkillsPanelDraw", gameObject); } } } } private void Start() { GameObjID = GetComponent().gameObjID; bag = GetComponent(); drawline = GetComponent(); } /// /// 背包装备更改导致技能是否可用(破拆.照明.排烟) /// /// private void EquipSelectfunc(IMessage obj) { EquipSelect.GetInstance.gameObject.SetActive(true); BagPanel.GetInstance.gameObject.SetActive(true); } private void TagSearchRoom(IMessage obj) { if (SelectedObjs.selectedCharacters.Count > 0 && gameObject == SelectedObjs.selectedCharacters[0]) { var arg = new CloneCmdArgs(); arg.cloneObjType = CloneObjType.MarkSearchRoom; arg.hitPos = transform.position; arg.gameObjID = GameObjID; MessageDispatcher.SendMessage(EntitiesManager.Instance.CreateObjID(), "CLONE_COMMAND", arg); } } private void PackUpLine(IMessage obj) { if (SelectedObjs.selectedCharacters.Count > 0 && gameObject == SelectedObjs.selectedCharacters[0]) { drawline.destoryLine(); GetComponent().enabled = true; GetComponent().enabled = true; if (GetComponent()) { if (GetComponent().waterlinelist.Count > 0) { GetComponent().waterlinelist.Clear(); } } if ((EnabledSkills & FireManSkills.SprayWater) != 0) { EnabledSkills &= ~FireManSkills.SprayWater; } if ((EnabledSkills & FireManSkills.Decontamination) != 0) { EnabledSkills &= ~FireManSkills.Decontamination; } if ((EnabledSkills & FireManSkills.SprayFoam) != 0) { EnabledSkills &= ~FireManSkills.SprayFoam; } MessageDispatcher.SendMessage("FiremanSkillsPanelDraw", gameObject); } } private void Save(IMessage obj) { } private void Lightingfunc(IMessage obj) { var gameObjID = (long)obj.Sender; if (GameObjID == gameObjID) { Lighting((bool)obj.Data); } } private void DischargeSmoke(IMessage obj) { var gameObjID = (long)obj.Sender; if (GameObjID == gameObjID) { DischargeSmoke((bool)obj.Data); } } private void ForcibleEntry(IMessage obj) { var gameObjID = (long)obj.Sender; if (GameObjID == gameObjID) { Debug.Log(obj.Type.ToString()); ForcibleEntry((bool)obj.Data); } } private void LayLifeSavingFlarePath(IMessage obj) { if (GameObjID == (long)obj.Sender) { bool value = (bool)obj.Data; if (value) drawline.setLine(); else { drawline.EndDraw(); } } } private void SprayWater(IMessage obj) { if (GameObjID == (long)obj.Sender) { bool value = (bool)obj.Data; if (value) { drawline.setLine(); if (GetComponent().GetEquipNum("消防高压水带") >= 1) { GetComponent().enabled = true; GetComponent().enabled = true; } } else { drawline.EndDraw(); if (flag) { //if (GetComponent().GetEquipNum("消防高压水带") < 1) { GetComponent().enabled = false; GetComponent().enabled = false; } } } } } private void SprayFoam(IMessage obj) { if (GameObjID == (long)obj.Sender) { bool value = (bool)obj.Data; if (value) { drawline.setLine(); if (GetComponent().GetEquipNum("消防高压水带") >= 1) { GetComponent().enabled = true; GetComponent().enabled = true; } } else { drawline.EndDraw(); if (flag) { //if (GetComponent().GetEquipNum("消防高压水带") < 1) { GetComponent().enabled = false; GetComponent().enabled = false; } } } } } private void LayWaterHose(IMessage obj) { if (GameObjID == (long)obj.Sender) { bool value = (bool)obj.Data; if (value) { drawline.setLine(); if (GetComponent().GetEquipNum("消防高压水带") >= 1) { GetComponent().enabled = true; GetComponent().enabled = true; } } else { drawline.EndDraw(); if (flag) { //if (GetComponent().GetEquipNum("消防高压水带") < 1) { GetComponent().enabled = false; GetComponent().enabled = false; } } } } } // Update is called once per frame void Update() { } private void WaterSourceChanged(IMessage obj) { var waterdata = (WaterConnectionData)obj.Data; var gameObjId = waterdata.receiverID; // var Id = GetComponent().GameObjID; if (gameObjId == GameObjID) { flag = waterdata.connected; int type = (int)waterdata.type; if (type == 0) { flag = false; if (workType == FireManSkills.SprayWater || workType == FireManSkills.Decontamination) { workType = FireManSkills.None; EnabledSkills &= ~FireManSkills.SprayWater; EnabledSkills &= ~FireManSkills.Decontamination; MessageDispatcher.SendMessage(GameObjID, "WaterSwitch", flag); GetComponent().EndDraw(); } else { if ((EnabledSkills & FireManSkills.SprayWater) != 0) { EnabledSkills &= ~FireManSkills.SprayWater; } if ((EnabledSkills & FireManSkills.Decontamination) != 0) { EnabledSkills &= ~FireManSkills.Decontamination; } } } if (type == 1)//普通水 { if (flag) { EnabledSkills |= FireManSkills.SprayWater; EnabledSkills |= FireManSkills.Decontamination; } else { if (workType == FireManSkills.SprayWater||workType==FireManSkills.Decontamination) { workType = FireManSkills.None; EnabledSkills &= ~FireManSkills.SprayWater; EnabledSkills &= ~FireManSkills.Decontamination; MessageDispatcher.SendMessage(GameObjID, "WaterSwitch", flag); GetComponent().EndDraw(); } else { if ((EnabledSkills & FireManSkills.SprayWater) != 0) { EnabledSkills &= ~FireManSkills.SprayWater; } if ((EnabledSkills & FireManSkills.Decontamination) != 0) { EnabledSkills &= ~FireManSkills.Decontamination; } } } } if (type == 2)//泡沫 { if (flag) EnabledSkills |= FireManSkills.SprayFoam; else { workType = FireManSkills.None; if ((EnabledSkills & FireManSkills.SprayFoam) != 0) { EnabledSkills &= ~FireManSkills.SprayFoam; } MessageDispatcher.SendMessage(GetComponent().gameObjID, "WaterSwitch", flag); GetComponent().EndDraw(); } } if (type == 3)//有水也有泡沫 { if (flag) { EnabledSkills |= FireManSkills.SprayWater; EnabledSkills |= FireManSkills.Decontamination; EnabledSkills |= FireManSkills.SprayFoam; } else { if (workType == FireManSkills.SprayWater || workType == FireManSkills.Decontamination|| workType == FireManSkills.SprayFoam) { workType = FireManSkills.None; EnabledSkills &= ~FireManSkills.SprayWater; EnabledSkills &= ~FireManSkills.Decontamination; EnabledSkills &= ~FireManSkills.SprayFoam; MessageDispatcher.SendMessage(GameObjID, "WaterSwitch", flag); GetComponent().EndDraw(); } else { if ((EnabledSkills & FireManSkills.SprayWater) != 0) { EnabledSkills &= ~FireManSkills.SprayWater; } if ((EnabledSkills & FireManSkills.Decontamination) != 0) { EnabledSkills &= ~FireManSkills.Decontamination; } if ((EnabledSkills & FireManSkills.SprayFoam) != 0) { EnabledSkills &= ~FireManSkills.SprayFoam; } } } } SprayChangeMove(flag); if (!RecordEvent.IsReplay()) { if (this!=null&&FireManSkillsPanel.GetInstance!=null&&FireManSkillsPanel.GetInstance.gameObject.activeSelf) MessageDispatcher.SendMessage("FiremanSkillsPanelDraw", gameObject); } } } public void ForcibleEntry(bool active) { if (wuchiju) wuchiju.SetActive(active); } public void DischargeSmoke(bool active) { if (panyanji) panyanji.SetActive(active); } public void Lighting(bool active) { if (zhaomingdeng) zhaomingdeng.SetActive(active); } //设置消防员技能在动作上的表现 public void workTypeChanged() { //铺设水带 } public void SetEnableSkill(bool add) { if (add) {//添加装备 if (bag.GetEquipFromBag("无齿锯") != null) { EnabledSkills |= FireManSkills.ForcibleEntry; } if (bag.GetEquipFromBag("手提式防爆强光照明灯") != null) { EnabledSkills |= FireManSkills.Lighting; } if (bag.GetEquipFromBag("移动式排烟机") != null) { EnabledSkills |= FireManSkills.DischargeSmoke; } } else {//移除装备 if (bag.GetEquipFromBag("无齿锯") == null) { EnabledSkills &= ~FireManSkills.ForcibleEntry; } if (bag.GetEquipFromBag("手提式防爆强光照明灯") == null) { EnabledSkills &= ~FireManSkills.Lighting; } if (bag.GetEquipFromBag("移动式排烟机") == null) { EnabledSkills &= ~FireManSkills.DischargeSmoke; } } } void SprayChangeMove(bool connect) { if (connect) { if (GetComponent().GetEquipNum("消防高压水带") < 1) { GetComponent().enabled = !connect; GetComponent().enabled = !connect; } if (workType != FireManSkills.SprayWater || workType != FireManSkills.SprayFoam || workType != FireManSkills.Decontamination|| workType!= FireManSkills.LayWaterHose) { GetComponent().enabled = !connect; GetComponent().enabled = !connect; } } else { GetComponent().enabled = true; GetComponent().enabled = true; } } public void BagChange(bool add) { if (bag.GetEquipNum("消防高压水带") >= 1) { GetComponent().enabled = true; GetComponent().enabled = true; } } }