using AX.MessageSystem; using AX.NetworkSystem; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class FireRobotWaterHoseManage : MonoBehaviour { public List> WaterSourceLine = new List>();//进水口线路 public string WaterHoseID = "82"; [Header("一盘水带默认长度")] public float OneDefaultHoseLenght = 20f; [Header("是否装备水带")] public bool HasWaterHose; /// /// 剩余水带长度 /// [Header("水带剩余长度")] public float WaterHoseLenghtRemain; //[Header("水带初始携带数")] // public int BeginCarryWaterHose = 5; /// /// 当前剩下盘数 /// [Header("当前还剩的盘数")] public int NowRemainWaterHose = 0; /// /// 当前机器人是否连接水带 /// public bool IsConnentWaterLine; /// /// 连接的水带 /// public GameObject WaterLineConnent; /// /// 是否连接水源 /// public bool IsConnentWaterSource; /// /// 连接的水源 /// public GameObject ConnentSource; public bool hasWaterConnect; public bool hasFoamConnect; private BaseGameObjInfo baseinfo; List all; private long gameobjid; private FireManControl firemancontrol; private Bags bagdata; // public int AllEquipNum; // Use this for initialization void Start() { baseinfo = GetComponent(); GetComponent().OnAddEquip += AddEquip; WaterHoseLenghtRemain = OneDefaultHoseLenght * NowRemainWaterHose; all = GetComponent().EquipData; gameobjid = GetComponent().gameObjID; firemancontrol = GetComponent(); bagdata = GetComponent(); MessageDispatcher.AddListener("HOSE_CONNECT_OR_DELECT", ConnectOrDelectControl); } public void OnDisable() { MessageDispatcher.RemoveListener("HOSE_CONNECT_OR_DELECT", ConnectOrDelectControl); } public void OnDestroy() { MessageDispatcher.RemoveListener("HOSE_CONNECT_OR_DELECT", ConnectOrDelectControl); } private void ConnectOrDelectControl(IMessage obj) { HoseConnectOrDelectData data = (HoseConnectOrDelectData)obj.Data; if (data.StartId == baseinfo.gameObjID || data.EndId == baseinfo.gameObjID) { //移动处理 if (data.Isconnect) { GetComponent().pathFindEnable = false; } else { GetComponent().pathFindEnable = true; } //水源信息处理 GameObject connectHose = EntitiesManager.Instance.GetEntityByID(data.HoseId); GameObject anther = connectHose.GetComponent().GetAnotherGameObj(baseinfo.gameObjID); if (data.Isconnect) { if (anther.GetComponent()) {//另一端是水源 IsConnentWaterLine = true; WaterLineConnent = connectHose; IsConnentWaterSource = true; ConnentSource = anther; hasWaterConnect = anther.GetComponent().water; hasFoamConnect = anther.GetComponent().foam; GetComponent().ChangeWaterSourceLineInfo(data.StartId,0); ////如果连接了一个没有水的水源 //if (anther.GetComponent().hasover) //{ // GetComponent().waterrunoutof = true; //} } //if (anther.GetComponent() && !anther.GetComponent()) //{//另一端是非水源出水车辆 // ConnentSource = anther.GetComponent().ConnentWaterSource; // if (ConnentSource != null) // { // IsConnentWaterSource = true; // hasWaterConnect = anther.GetComponent().ConnectWater; // hasFoamConnect = anther.GetComponent().ConnectFoam; // if (ConnentSource.GetComponent()) // { // if (ConnentSource.GetComponent().hasover) // { // GetComponent().waterrunoutof = true; // } // } // } //} if (FireRobotSkillPanelController.Instance) { if (FireRobotSkillPanelController.Instance.SelectRobot == gameObject) { FireRobotSkillPanelController.Instance.SprayWater.GetComponent().interactable = hasWaterConnect; FireRobotSkillPanelController.Instance.SprayFroth.GetComponent().interactable = hasFoamConnect; } } } else { Resert(); } } } // Update is called once per frame void Update() { } public void AddEquip() { all = bagdata.EquipData; if (bagdata.HasEquip("消防高压水带")) { for (int i = 0; i < all.Count; i++) { if (all[i].ID == WaterHoseID) { NowRemainWaterHose = all[i].Number; // AllEquipNum = all[i].Number; WaterHoseLenghtRemain = NowRemainWaterHose * OneDefaultHoseLenght; GetComponent().remainlenght= NowRemainWaterHose * OneDefaultHoseLenght; } } } else { NowRemainWaterHose = 0; GetComponent().remainlenght = NowRemainWaterHose * OneDefaultHoseLenght; // AllEquipNum = 0; WaterHoseLenghtRemain = NowRemainWaterHose * OneDefaultHoseLenght; } } public void FireRobotPickUpLayHose(int use) { //Equip hose = EquipManager.Instance.GetEquipByID("82"); // hose.Number += +use; GetComponent().AddEquip("82",use); NowRemainWaterHose = bagdata.GetEquip("消防高压水带").Number; // NowRemainWaterHose = AllEquipNum; WaterHoseLenghtRemain = NowRemainWaterHose * OneDefaultHoseLenght; } //继续上次水带铺设前计算可用管线,这里不做管线同步,因为铺设管线的同步是调用的StartLay(),所以各个客户端可能回来发 public void CalculateBeforelay(float remain, int usenum) { Equip hose = EquipManager.Instance.GetEquipByID(WaterHoseID); hose.Number = usenum; bagdata.AddEquip(hose); NowRemainWaterHose = bagdata.GetEquip("消防高压水带").Number; WaterHoseLenghtRemain = NowRemainWaterHose * OneDefaultHoseLenght + remain; } /// /// 结束水带铺设时更新剩余水带信息,铺设管线消耗,这里不做管线同步,因为铺设管线的同步是调用的EndtLay(),所以各个客户端可能回来发 /// /// 本次铺设的水带的长度 //public void UpdateRemain(int expendnum) //{ // if (bagdata.HasEquip("消防高压水带")) // { // NowRemainWaterHose = bagdata.GetEquip("消防高压水带").Number; // } // if (NowRemainWaterHose>0) // { // GetComponent().UseEquip("消防高压水带", NowRemainWaterHose); // } // //NowRemainWaterHose -= Mathf.CeilToInt(expendlenght / 20); // Equip hose = EquipManager.Instance.GetEquipByID(WaterHoseID); // hose.Number = AllEquipNum - expendnum; // bagdata.AddEquip(hose); // if (bagdata.HasEquip("消防高压水带")) // { // NowRemainWaterHose = bagdata.GetEquip("消防高压水带").Number; // } // else // { // NowRemainWaterHose = 0; // } // // WaterHoseLenghtRemain =AllEquipNum * OneDefaultHoseLenght-expendlenght; //+ OverLenght; //} public void ResetWaterSourceConnectInfo(bool connectsource, bool water, bool foam, GameObject watersource, GameObject connecthose) { IsConnentWaterSource = connectsource; hasWaterConnect = water; hasFoamConnect = foam; ConnentSource = watersource; WaterLineConnent = connecthose; IsConnentWaterLine = false; if (connecthose != null) { IsConnentWaterLine = true; } if (watersource==null) {//如果水源信息为空,如果正在出水,停止出水 if(GetComponentInChildren()) { GetComponent().DestoryPartical(); } } if (FireRobotSkillPanelController.Instance) { if (FireRobotSkillPanelController.Instance.SprayWater.GetComponent().interactable) { FireRobotSkillPanelController.Instance.SprayWater.GetComponent().interactable = false; } if (FireRobotSkillPanelController.Instance.SprayFroth.GetComponent().interactable) { FireRobotSkillPanelController.Instance.SprayFroth.GetComponent().interactable = false; } } } public void Resert() { IsConnentWaterLine = false; WaterLineConnent = null; IsConnentWaterSource = false; ConnentSource = null; hasFoamConnect = false; hasWaterConnect = false; WaterSourceLine = new List>(); if (!GetComponent().pathFindEnable) { GetComponent().pathFindEnable = true; } if (FireRobotSkillPanelController.Instance) { FireRobotSkillPanelController.Instance.SprayWater.GetComponent().isOn = false; FireRobotSkillPanelController.Instance.SprayWater.GetComponent().interactable = false; } if (GetComponent()) { if (GetComponent().WorkType == FireRobotSkill.出水 || GetComponent().WorkType == FireRobotSkill.出泡沫) { //停止出水 GetComponent().DestoryPartical(); } } } }