using System; using System.Collections; using System.Collections.Generic; using AX.MessageSystem; using UnityEngine; using AX.InputSystem; using UnityEngine.UI; using AX.NetworkSystem; public class WaterHoseExpend { public GameObject WaterHoseDraw;//当前操作的水带 public float Distance;//本次长度 public GameObject Fireman;//创建(消耗)的消防员 public int ExpendNum;//消耗盘数 } //public class WaterHoseConnect //{ // public long StartObjId; // public long EndObjId; // public GameObject SelectHoseWater; //} public class CloneWaterHoseLines : CloneBase { [SerializeField] [Tooltip("距离地面距离")] protected float Height = 0; private Vector3 startPoint; private Vector3 endPoint; // private IMessage imessageobj; private float DefultHoseLenght = 20; private Vector3 beginLinePoint; //public string PrefabPath; //private Vector3 endLinePoint; private List pathPoints = new List(); /// /// 克隆出的线的父物体预设 /// private GameObject parent; /// /// 画线是否超过俩个点 /// public bool PointOverTwo; private GameObject startHitGameobj; private GameObject endHitGameobj; /// ///是否是水带 /// // public bool IsWaterHose; /// /// 当前选中的消防员 /// public GameObject SelectFireMan; /// /// 线的父物体 /// private GameObject parentgameobj; public Vector3 SizeVec; /// /// 画线起点是否为水源 /// private bool StartObjIsWaterSource = false; private long gameObjID = 0; void Start() { if (parent == null) { parent = Resources.Load("LineParent/ParentWaterHoseLine") as GameObject; } //if (SelectedObjs.selectedCharacters.Count>0) //{ // SelectFireMan=SelectedObjs.selectedCharacters[0]; //} } public override void OnEnable() { base.OnEnable(); MessageDispatcher.AddListener("CANCEL_CLONEBTN_SELECTED_COMMAND", CancelSelected); MessageDispatcher.AddListener("RESERTLINT", Resert); } private void CancelSelected(IMessage obj) { if (InputManager.cloneObjType == cloneObjType) { if (parentgameobj != null) { if (parentgameobj.GetComponent()) { if (parentgameobj.GetComponent().LineLenght <= 0.1f) { EntitiesManager.Instance.DeleteObj(parentgameobj); } } } ResertLine(); } } public override void OnDisable() { base.OnDisable(); MessageDispatcher.RemoveListener("CANCEL_CLONEBTN_SELECTED_COMMAND", CancelSelected); MessageDispatcher.RemoveListener("RESERTLINT", Resert); } public override void OnDestroy() { base.OnDestroy(); MessageDispatcher.RemoveListener("CANCEL_CLONEBTN_SELECTED_COMMAND", CancelSelected); MessageDispatcher.RemoveListener("RESERTLINT", Resert); } private void Resert(IMessage obj) { ResertLine(); } public override void Execute(IMessage obj) { var data = ((CloneCmdArgs)obj.Data); gameObjID = (long)obj.Sender; //if(data.cloneObjType != cloneObjType) //{ // return; //} //Debug.Log(gameObjID); if (data.cloneObjType == cloneObjType) { if (FireManSkillPanelController.Instance) { SelectFireMan = FireManSkillPanelController.Instance.SelectFireMan; } if (SelectFireMan == null) { return; } if (!HasEquipWaterHose()) { return; } TwoOrMore(obj); var hitPoint = data.hitPos; if (startPoint == Vector3.zero) { if (EntitiesManager.Instance.GetEntityByID(data.gameObjID)) { startHitGameobj = EntitiesManager.Instance.GetEntityByID(data.gameObjID); bool canconnect = checkCanConnetOrNo(startHitGameobj); if (!canconnect) { return; } Vector3 corstart = correctPoint(startHitGameobj); if (corstart != Vector3.zero) { hitPoint = corstart; } } startPoint = hitPoint; //if (changeStartPointWhileHitHose(startHitGameobj, hitPoint) != Vector3.zero) //{ // startPoint = changeStartPointWhileHitHose(startHitGameobj, hitPoint); //} beginLinePoint = startPoint; return; } endPoint = hitPoint; if (EntitiesManager.Instance.GetEntityByID(data.gameObjID)) { endHitGameobj = EntitiesManager.Instance.GetEntityByID(data.gameObjID); bool canconnect = checkCanConnetOrNo(endHitGameobj); if (!canconnect) { return; } //if (!JugeConnent()) //{ // return; //} Vector3 corend = correctPoint(endHitGameobj); //Debug.Log(endHitGameobj.name); if (corend != Vector3.zero) { endPoint = corend; } } pathPoints.Add(endPoint); float distance = Vector3.Distance(startPoint, endPoint);//计算两点的距离 if (distance < 2) { pathPoints.Remove(endPoint); LoadPromptWin.Instance.LoadTextPromptWindow("两点重合", 1f); return; } if (!WaterHoseAndOverLenght(distance)) { // Destroy(parentgameobj); return; } Vector3 clonedObjPos = (startPoint + endPoint) / 2; // Debug.Log(gameObjID); //EntitiesManager.Instance.AddEntity(gameObjID, parentgameobj); clonedObjPos = new Vector3(clonedObjPos.x, clonedObjPos.y + Height, clonedObjPos.z); GameObject line = Instantiate(clonePrefab, parentgameobj.transform); //帧数据记录使用 line.AddComponent() //是否要每段都记录楼层信息 line.name = "line"; line.transform.position = clonedObjPos; line.transform.forward = (-(endPoint - startPoint)).normalized;//改变线条的朝向 line.transform.localScale = new Vector3(SizeVec.x, SizeVec.y, distance * SizeVec.z);//延长线条,连接两点。 line.AddComponent(); line.GetComponent().gameObjID = parentgameobj.GetComponent().gameObjID; parentgameobj.GetComponent().LineLenght += distance; parentgameobj.GetComponent().StartHitGameObj = startHitGameobj; parentgameobj.GetComponent().EndHitGameObj = endHitGameobj; parentgameobj.GetComponent().StartPoint = beginLinePoint; parentgameobj.GetComponent().EndPoint = endPoint; parentgameobj.GetComponent().CreatFiremanID = SelectFireMan.GetComponent().gameObjID; parentgameobj.name = CloneObjNameTool.Instance().GetCloneObjectName(cloneObjType); ExpendHose(distance, parentgameobj.GetComponent().LineLenght); SelectedObjs.gameObjs.Add(line); // SelectedObjs.gameObjs.Add(parentgameobj); startPoint = endPoint; //设置楼层属性 Setattribute(data.gameObjID, parentgameobj); //connentFireMan(); //connentWaterCannon(); //connectSnowCannon(); //connentWaterSource(); //connentFireCar(); //OneFiremanAnotherWaterSource(); //OneWaterCannonAnotherWaterSource(); //OneSnowCannonAnotherWaterSource(); //OneFireRobotAnotherWaterSource(); //如果连接到车上,给车刷新绑定水源信息 //if (startHitGameobj.GetComponent() // ) //{ // var arg = new HoseConnectOrDelectData(); // arg.StartId = startHitGameobj.GetComponent().gameObjID; // arg.EndId = endHitGameobj.GetComponent().gameObjID; // arg.HoseId = parentgameobj.GetComponent().gameObjID; // arg.Isconnect = true; // MessageDispatcher.SendMessage("HOSE_CONNECT_OR_DELECT", arg); // //MessageDispatcher.SendMessage("WATERHOSECONNECT", arg); //} //如果长度小于0.5,认为只有初始点,为无用管线,删除 if (parentgameobj.GetComponent().LineLenght < 0.5) { EntitiesManager.Instance.DeleteObj(parentgameobj); } //同步 CloneInfoSync(endPoint); if (endHitGameobj.GetComponent() || endHitGameobj.GetComponent() || endHitGameobj.GetComponent() || endHitGameobj.GetComponent() || endHitGameobj.GetComponent() || startHitGameobj.GetComponent()) { if (endHitGameobj.GetComponent() || endHitGameobj.GetComponent() || endHitGameobj.GetComponent() || endHitGameobj.GetComponent() || endHitGameobj.GetComponent()) { LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f); } var arg = new HoseConnectOrDelectData(); arg.StartId = startHitGameobj.GetComponent().gameObjID; arg.EndId = endHitGameobj.GetComponent().gameObjID; arg.HoseId = parentgameobj.GetComponent().gameObjID; arg.Isconnect = true; MessageDispatcher.SendMessage("HOSE_CONNECT_OR_DELECT", arg); } //如果连接到消防车、消防员或者水源上,重置信息,准备另画一条水带 if (endHitGameobj.GetComponent() || endHitGameobj.GetComponent() || endHitGameobj.GetComponent() || endHitGameobj.GetComponent() || endHitGameobj.GetComponent() || endHitGameobj.GetComponent()) { WaterHoseExpend expend = new WaterHoseExpend { WaterHoseDraw = parentgameobj, Distance = parentgameobj.GetComponent().LineLenght, Fireman = SelectFireMan, ExpendNum = Mathf.CeilToInt(parentgameobj.GetComponent().LineLenght / DefultHoseLenght), }; MessageDispatcher.SendMessage("WATERHOSEEXPEND", expend); parentgameobj.GetComponent().hascalculate = true; ////重画(相当于)关闭克隆按钮再重新打开 //var argresertsync = new AssociatedLineSyncDate(); //argresertsync.IsResert = true; //NetworkManager.Default.SendAsync(CurrentUserInfo.mySelf.Id, "ASSOCIATED_LINE_SYNC", argresertsync); ResertLine(); } SelectFireMan = null; // NetworkManager.Default.SendAsync("POLICE_CALL_SYNC", policedata); } } public GameObject CreatLine(Vector3 startPoint, Vector3 endPoint) { float distance = Vector3.Distance(startPoint, endPoint);//计算两点的距离 if (distance < 2) { pathPoints.Remove(endPoint); LoadPromptWin.Instance.LoadTextPromptWindow("两点重合", 1f); return null; } //parentgameobj.GetComponent().LineLenght += distance; Vector3 clonedObjPos = (startPoint + endPoint) / 2; clonedObjPos = new Vector3(clonedObjPos.x, clonedObjPos.y + Height, clonedObjPos.z); return Instantiate(clonePrefab); } //设置克隆物体所在楼层等基本属性,属性从点击的对象上获取 public void Setattribute(long HitID, GameObject Clone) { var hitObj = EntitiesManager.Instance.GetEntityByID(HitID); CloneGameObjInfo hitObjInfo = hitObj.GetComponent(); CloneGameObjInfo cloneObjInfo = Clone.GetComponent(); cloneObjInfo.gameObjType = cloneObjType; cloneObjInfo.UserID = CurrentUserInfo.mySelf.Id; cloneObjInfo.buildNum = hitObjInfo.buildNum; cloneObjInfo.floorNum = hitObjInfo.floorNum; cloneObjInfo.interlayerNum = hitObjInfo.interlayerNum; } /// /// 当前物体时候是否还能再连接管线,连接两辆水原车时 /// /// /// private bool checkCanConnetOrNo(GameObject Hitobj) { bool can = true; if (Hitobj == startHitGameobj) {//连接起点 if (!Hitobj.GetComponent()) { LoadPromptWin.Instance.LoadTextPromptWindow("该物体不能供水,不能作为连接起点,请选择水源作为连接起点", 2f); can = false; } else { // 地上消火栓 / 泡沫栓 if (Hitobj.GetComponent()) { if (Hitobj.GetComponent().ConnectGameObj != null) { LoadPromptWin.Instance.LoadTextPromptWindow("当前消防设施不能连接更多管线", 2f); can = false; } } else if (Hitobj.GetComponent()) {//水源车 TruckBindWaterSource truckbind = Hitobj.GetComponent(); //起点为水源车 if (truckbind.DirectConnectObj1.Key != null && truckbind.DirectConnectObj2.Key != null) { LoadPromptWin.Instance.LoadTextPromptWindow("当前水源车没有更多出水口", 1f); can = false; } } } } else {//终点 if (Hitobj.GetComponent() && Hitobj.GetComponent()) {//消防设施 LoadPromptWin.Instance.LoadTextPromptWindow("消防设施不能作为连接终点", 1f); can = false; } //消防员 if (Hitobj.GetComponent()) { if (Hitobj.GetComponent().IsConnentWaterLine) { LoadPromptWin.Instance.LoadTextPromptWindow("当前消防员已连接管线", 1f); can = false; } } //水炮 else if (Hitobj.GetComponent()) { if (Hitobj.GetComponent().IsConnentWaterLine) { LoadPromptWin.Instance.LoadTextPromptWindow("当前水泡已连接管线", 1f); can = false; } } //雪炮 else if (Hitobj.GetComponent().gameObjType == CloneObjType.SnowCannon) { if (Hitobj.GetComponent().IsConnentWaterLine) { LoadPromptWin.Instance.LoadTextPromptWindow("当前暴风雪炮已连接管线", 1f); can = false; } } //机器人 else if (Hitobj.GetComponent().gameObjType == CloneObjType.FirefightingRobot) { if (Hitobj.GetComponent().IsConnentWaterLine) { LoadPromptWin.Instance.LoadTextPromptWindow("当前灭火机器人已连接管线", 1f); can = false; } } //车辆 if (Hitobj.GetComponent()) { TruckBindWaterSource truckbind = Hitobj.GetComponent(); if (truckbind.WaterSourceLine1.Count > 0 && truckbind.WaterSourceLine2.Count > 0) { LoadPromptWin.Instance.LoadTextPromptWindow("当前车辆没有更多进水口", 1f); can = false; } else { if (Hitobj.GetComponent() && startHitGameobj.GetComponent()) { //起点、终点都是水源车,判断是都形成循环闭路 can = !checkCloseLoop(startHitGameobj, Hitobj); if (!can) { LoadPromptWin.Instance.LoadTextPromptWindow("组成闭合回路", 1f); } //if (close==false) //{//判断两端所属的供水网络是否都在出水 //} } } } } return can; } /// /// 连接时检查车是否构成闭环 /// /// bool checkCloseLoop(GameObject start, GameObject end) { bool close = false; if (start.GetComponent()) { long endid = end.GetComponent().gameObjID; List> startwatersourcelist = start.GetComponent().GetAllWaterSource(); for (int i = 0; i < startwatersourcelist.Count; i++) { for (int j = 0; j < startwatersourcelist[i].Count; j++) { if (startwatersourcelist[i][j] == endid) { close = true; break; } } } } return close; } public void CreatParents() { parentgameobj = EntitiesManager.Instance.CreateObj(parent, transform.position, transform, gameObjID);// GameObject.Instantiate(parent, transform); if (FireManSkillPanelController.Instance) { if (SelectFireMan.GetComponent().workType == FireManSkills.AssociatedLine) { FireManSkillPanelController.Instance.FiremanAssociatedLine = parentgameobj; } } parentgameobj.GetComponent().gameObjType = cloneObjType; parentgameobj.transform.parent = transform; parentgameobj.name = cloneObjType.ToString(); } /// /// 是多点创建一个父物体,不是多点,每2点创建一个父物体。 /// /// public void TwoOrMore(IMessage imessageobj) { if (PointOverTwo) { if (parentgameobj != null) { return; } CreatParents(); } else { if (endPoint == Vector3.zero && startPoint != Vector3.zero) { CreatParents(); } if (pathPoints.Count > 0) { pathPoints.Clear(); startPoint = Vector3.zero; endPoint = Vector3.zero; return; } } } public void ResertLine() { beginLinePoint = Vector3.zero; startPoint = Vector3.zero; endPoint = Vector3.zero; parentgameobj = null; //startHitGameobj = null; //endHitGameobj = null; StartObjIsWaterSource = false; gameObjID = 0; //cloneObjType = CloneObjType.None; } /// /// 检查是否有足够水带 /// /// private bool WaterHoseAndOverLenght(float distance) { bool can = false; if (SelectFireMan.GetComponent().CheckHoseIsEnough(distance)) { can = true; } return can; } /// /// 检查是否携带水带 /// private bool HasEquipWaterHose() { if (SelectedObjs.selectedCharacters.Count > 0) SelectFireMan = SelectedObjs.selectedCharacters[0]; if (SelectFireMan != null) { if (!SelectFireMan.GetComponent().HasWaterHose) { LoadPromptWin.Instance.LoadTextPromptWindow("未携带水带", 1f); return false; } else { return true; } } else { return false; } } /// /// 消耗水带 /// /// private void ExpendHose(float distance, float alldistance) { SelectFireMan.GetComponent().ExpendHose(distance, alldistance);//.WaterHoseLenghtRemain -= distance; } /// /// 连接管线判断起点跟终点物体是否可连接(因为改为起点必须为水源,所以没用了) /// private bool JugeConnent() { bool can = true; //如果首尾是同一物体 if (startHitGameobj == endHitGameobj) { LoadPromptWin.Instance.LoadTextPromptWindow("不能连在同一物体上", 1f); can = false; } //两端都是非消防车的水源 if (startHitGameobj.GetComponent() && endHitGameobj.GetComponent()) { if ((!startHitGameobj.GetComponent()) && (!endHitGameobj.GetComponent())) { LoadPromptWin.Instance.LoadTextPromptWindow("不能两端都是消防栓", 1f); can = false; } } //一端为非水源车、人、水炮、雪炮、机器人 if (startHitGameobj.GetComponent() || startHitGameobj.GetComponent() || startHitGameobj.GetComponent() || startHitGameobj.GetComponent() || (startHitGameobj.GetComponent() && !startHitGameobj.GetComponent())) { if (endHitGameobj.GetComponent() || endHitGameobj.GetComponent() || endHitGameobj.GetComponent() || endHitGameobj.GetComponent() || (endHitGameobj.GetComponent() && !endHitGameobj.GetComponent())) { LoadPromptWin.Instance.LoadTextPromptWindow("连接两端至少有一端为水源", 2f); can = false; } } return can; } /// /// 连接消防员判断 /// private void connentFireMan() { if (startHitGameobj.GetComponent()) { if (!startHitGameobj.GetComponent().IsConnentWaterLine) { LoadPromptWin.Instance.LoadTextPromptWindow("连接一名消防员", 1f); } startHitGameobj.GetComponent().IsConnentWaterLine = true; startHitGameobj.GetComponent().WaterLineConnent = parentgameobj; startHitGameobj.GetComponent().pathFindEnable = false; var another = parentgameobj.GetComponent().GetAnotherGameObj(startHitGameobj); if (another.GetComponent()) { startHitGameobj.GetComponent().hasWaterConnect = another.GetComponent().water; startHitGameobj.GetComponent().hasFoamConnect = another.GetComponent().foam; startHitGameobj.GetComponent().SetInitPoint(); // LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f); } if (another.GetComponent()) { startHitGameobj.GetComponent().hasWaterConnect = another.GetComponent().ConnectWater; startHitGameobj.GetComponent().hasFoamConnect = another.GetComponent().ConnectFoam; startHitGameobj.GetComponent().SetInitPoint(); //LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f); } } if (endHitGameobj.GetComponent()) { LoadPromptWin.Instance.LoadTextPromptWindow("连接一名消防员", 1f); endHitGameobj.GetComponent().IsConnentWaterLine = true; endHitGameobj.GetComponent().pathFindEnable = false; endHitGameobj.GetComponent().WaterLineConnent = parentgameobj; var another = parentgameobj.GetComponent().GetAnotherGameObj(endHitGameobj); if (another.GetComponent()) { endHitGameobj.GetComponent().hasWaterConnect = another.GetComponent().water; endHitGameobj.GetComponent().hasFoamConnect = another.GetComponent().foam; endHitGameobj.GetComponent().SetInitPoint(); // LoadPromptWin.Instance.LoadTextPromptWindow("连接一名消防员", 1f); } if (another.GetComponent()) { endHitGameobj.GetComponent().hasWaterConnect = another.GetComponent().ConnectWater; endHitGameobj.GetComponent().hasFoamConnect = another.GetComponent().ConnectFoam; endHitGameobj.GetComponent().SetInitPoint(); //LoadPromptWin.Instance.LoadTextPromptWindow("连接一名消防员", 1f); } // ResertLine(); } } /// /// 连接水炮判断 /// private void connentWaterCannon() { if (startHitGameobj.GetComponent()) { if (!startHitGameobj.GetComponent().IsConnentWaterLine) { LoadPromptWin.Instance.LoadTextPromptWindow("连接一台水炮", 1f); } startHitGameobj.GetComponent().IsConnentWaterLine = true; startHitGameobj.GetComponent().WaterLineConnent = parentgameobj; // startHitGameobj.GetComponent().pathFindEnable = false; startHitGameobj.GetComponent().enabled = false; var another = parentgameobj.GetComponent().GetAnotherGameObj(startHitGameobj); if (another.GetComponent()) { startHitGameobj.GetComponent().hasWaterConnect = another.GetComponent().water; startHitGameobj.GetComponent().hasFoamConnect = another.GetComponent().foam; // LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f); //startHitGameobj.GetComponent().SetInitPoint(); } if (another.GetComponent()) { startHitGameobj.GetComponent().hasWaterConnect = another.GetComponent().ConnectWater; startHitGameobj.GetComponent().hasFoamConnect = another.GetComponent().ConnectFoam; // LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f); //startHitGameobj.GetComponent().SetInitPoint(); } } if (endHitGameobj.GetComponent()) { LoadPromptWin.Instance.LoadTextPromptWindow("连接一台水炮", 1f); endHitGameobj.GetComponent().IsConnentWaterLine = true; endHitGameobj.GetComponent().enabled = false; //endHitGameobj.GetComponent().pathFindEnable = false; endHitGameobj.GetComponent().WaterLineConnent = parentgameobj; var another = parentgameobj.GetComponent().GetAnotherGameObj(endHitGameobj); if (another.GetComponent()) { endHitGameobj.GetComponent().hasWaterConnect = another.GetComponent().water; endHitGameobj.GetComponent().hasFoamConnect = another.GetComponent().foam; //LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f); // endHitGameobj.GetComponent().SetInitPoint(); } if (another.GetComponent()) { endHitGameobj.GetComponent().hasWaterConnect = another.GetComponent().ConnectWater; endHitGameobj.GetComponent().hasFoamConnect = another.GetComponent().ConnectFoam; //LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f); //endHitGameobj.GetComponent().SetInitPoint(); } // ResertLine(); } } private void connectSnowCannon() { if (startHitGameobj.GetComponent()) { if (!startHitGameobj.GetComponent().IsConnentWaterLine) { LoadPromptWin.Instance.LoadTextPromptWindow("连接一台暴风雪炮", 1f); } startHitGameobj.GetComponent().IsConnentWaterLine = true; startHitGameobj.GetComponent().WaterLineConnent = parentgameobj; startHitGameobj.GetComponent().enabled = false; startHitGameobj.GetComponent().enabled = false; var another = parentgameobj.GetComponent().GetAnotherGameObj(startHitGameobj); if (another.GetComponent()) { startHitGameobj.GetComponent().hasWaterConnect = another.GetComponent().water; startHitGameobj.GetComponent().hasFoamConnect = another.GetComponent().foam; } if (another.GetComponent()) { startHitGameobj.GetComponent().hasWaterConnect = another.GetComponent().ConnectWater; startHitGameobj.GetComponent().hasFoamConnect = another.GetComponent().ConnectFoam; } } if (endHitGameobj.GetComponent()) { LoadPromptWin.Instance.LoadTextPromptWindow("连接一台暴风雪炮", 1f); endHitGameobj.GetComponent().IsConnentWaterLine = true; endHitGameobj.GetComponent().enabled = false; endHitGameobj.GetComponent().enabled = false; endHitGameobj.GetComponent().WaterLineConnent = parentgameobj; var another = parentgameobj.GetComponent().GetAnotherGameObj(endHitGameobj); if (another.GetComponent()) { endHitGameobj.GetComponent().hasWaterConnect = another.GetComponent().water; endHitGameobj.GetComponent().hasFoamConnect = another.GetComponent().foam; } if (another.GetComponent()) { endHitGameobj.GetComponent().hasWaterConnect = another.GetComponent().ConnectWater; endHitGameobj.GetComponent().hasFoamConnect = another.GetComponent().ConnectFoam; } } } /// /// 连接水源判断,若两端都是水源,这里水源信息赋值的是后点击水源 /// private void connentWaterSource() { if (startHitGameobj.GetComponent()) { if (!StartObjIsWaterSource) { //LoadPromptWin.Instance.LoadTextPromptWindow("连接到水源", 1f); parentgameobj.GetComponent().HasWaterConnent = true; parentgameobj.GetComponent().WaterSource = startHitGameobj; StartObjIsWaterSource = true; } } if (endHitGameobj.GetComponent()) { //LoadPromptWin.Instance.LoadTextPromptWindow("连接到水源", 1f); parentgameobj.GetComponent().HasWaterConnent = true; parentgameobj.GetComponent().WaterSource = endHitGameobj; //ResertLine(); } if (startHitGameobj.GetComponent() && endHitGameobj.GetComponent()) { LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f); } } private void connentFireCar() { if (startHitGameobj.GetComponent() && !startHitGameobj.GetComponent()) { if (endHitGameobj.GetComponent()) { LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f); } } if (endHitGameobj.GetComponent() && !endHitGameobj.GetComponent()) { if (startHitGameobj.GetComponent()) { LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f); } } } private void OneFiremanAnotherWaterSource() { if (startHitGameobj.GetComponent() && endHitGameobj.GetComponent()) { endHitGameobj.GetComponent().IsConnentWaterSource = true; endHitGameobj.GetComponent().ConnentSource = startHitGameobj; if (SelectFireMan.GetComponent().gameObjID == FireManSkillPanelController.Instance.SelectFireMan.GetComponent().gameObjID) { FireManSkillPanelController.Instance.SprayWater.GetComponent().interactable = true; } LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f); } if (startHitGameobj.GetComponent() && endHitGameobj.GetComponent()) { startHitGameobj.GetComponent().IsConnentWaterSource = true; startHitGameobj.GetComponent().ConnentSource = endHitGameobj; if (SelectFireMan.GetComponent().gameObjID == FireManSkillPanelController.Instance.SelectFireMan.GetComponent().gameObjID) { FireManSkillPanelController.Instance.SprayWater.GetComponent().interactable = true; } LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f); } } private void OneWaterCannonAnotherWaterSource() { if (startHitGameobj.GetComponent() && endHitGameobj.GetComponent()) { endHitGameobj.GetComponent().IsConnentWaterSource = true; endHitGameobj.GetComponent().ConnentSource = startHitGameobj; //if (SelectFireMan.GetComponent().gameObjID == // FireManSkillPanelController.Instance.SelectFireMan.GetComponent().gameObjID) //{ //MoveWaterConnonSkillPanelController.Instance.SprayWater.GetComponent().interactable = true; //} LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f); } if (startHitGameobj.GetComponent() && endHitGameobj.GetComponent()) { startHitGameobj.GetComponent().IsConnentWaterSource = true; startHitGameobj.GetComponent().ConnentSource = endHitGameobj; //if (SelectFireMan.GetComponent().gameObjID == // FireManSkillPanelController.Instance.SelectFireMan.GetComponent().gameObjID) //{ // MoveWaterConnonSkillPanelController.Instance.SprayWater.GetComponent().interactable = true; //} LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f); } } private void OneSnowCannonAnotherWaterSource() { if (startHitGameobj.GetComponent() && endHitGameobj.GetComponent()) { endHitGameobj.GetComponent().IsConnentWaterSource = true; endHitGameobj.GetComponent().ConnentSource = startHitGameobj; //if (SelectFireMan.GetComponent().gameObjID == // FireManSkillPanelController.Instance.SelectFireMan.GetComponent().gameObjID) //{ //MoveWaterConnonSkillPanelController.Instance.SprayWater.GetComponent().interactable = true; //} LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f); } if (startHitGameobj.GetComponent() && endHitGameobj.GetComponent()) { startHitGameobj.GetComponent().IsConnentWaterSource = true; startHitGameobj.GetComponent().ConnentSource = endHitGameobj; //if (SelectFireMan.GetComponent().gameObjID == // FireManSkillPanelController.Instance.SelectFireMan.GetComponent().gameObjID) //{ // MoveWaterConnonSkillPanelController.Instance.SprayWater.GetComponent().interactable = true; //} LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f); } } private void OneFireRobotAnotherWaterSource() { if (startHitGameobj.GetComponent() && endHitGameobj.GetComponent()) { endHitGameobj.GetComponent().IsConnentWaterSource = true; endHitGameobj.GetComponent().ConnentSource = startHitGameobj; endHitGameobj.GetComponent().IsConnentWaterLine = true; endHitGameobj.GetComponent().WaterLineConnent = parentgameobj; endHitGameobj.GetComponent().pathFindEnable = false; //var another = parentgameobj.GetComponent().GetAnotherGameObj(startHitGameobj); //if (startHitGameobj.GetComponent()) { endHitGameobj.GetComponent().hasWaterConnect = startHitGameobj.GetComponent().water; endHitGameobj.GetComponent().hasFoamConnect = startHitGameobj.GetComponent().foam; //endHitGameobj.GetComponent().SetInitPoint(); } //if (SelectFireMan.GetComponent().gameObjID == // FireManSkillPanelController.Instance.SelectFireMan.GetComponent().gameObjID) //{ // FireManSkillPanelController.Instance.SprayWater.GetComponent().interactable = true; //} LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f); } if (endHitGameobj.GetComponent() && startHitGameobj.GetComponent()) { startHitGameobj.GetComponent().IsConnentWaterSource = true; startHitGameobj.GetComponent().ConnentSource = endHitGameobj; startHitGameobj.GetComponent().IsConnentWaterLine = true; startHitGameobj.GetComponent().WaterLineConnent = parentgameobj; startHitGameobj.GetComponent().pathFindEnable = false; //var another = parentgameobj.GetComponent().GetAnotherGameObj(startHitGameobj); //if (startHitGameobj.GetComponent()) { startHitGameobj.GetComponent().hasWaterConnect = endHitGameobj.GetComponent().water; startHitGameobj.GetComponent().hasFoamConnect = endHitGameobj.GetComponent().foam; //endHitGameobj.GetComponent().SetInitPoint(); } //if (SelectFireMan.GetComponent().gameObjID == // FireManSkillPanelController.Instance.SelectFireMan.GetComponent().gameObjID) //{ // FireManSkillPanelController.Instance.SprayWater.GetComponent().interactable = true; //} LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f); } } /// /// 连线时,若为车、人,水炮,雪炮,机器人调整起点或终点位置 /// /// /// private Vector3 correctPoint(GameObject hitobj) { Vector3 corr = Vector3.zero; if (hitobj.GetComponent()) { //corr = hitobj.transform.position + Vector3.up * 0.7f; if (hitobj.GetComponent()) { TruckBindWaterSource tbws = hitobj.GetComponent(); if (hitobj == startHitGameobj) { if (tbws.DirectConnectObj1.Key == null) { corr = hitobj.transform.position + new Vector3(0.5f, 0.7f, 0.75f); } else { if (tbws.DirectConnectObj2.Key == null) { corr = hitobj.transform.position + new Vector3(-0.5f, 0.7f, -0.75f); } } } else { if (tbws.WaterSourceLine1.Count <= 0) { corr = hitobj.transform.position + new Vector3(0.5f, 0.7f, 0.75f); } else { corr = hitobj.transform.position + new Vector3(-0.5f, 0.7f, -0.75f); } } } } else if (hitobj.GetComponent()) { corr = hitobj.transform.position - Vector3.up * 0.2f; } else if (hitobj.GetComponent() && !hitobj.GetComponent()) { corr = hitobj.transform.position; } else if (hitobj.GetComponent()) { corr = hitobj.transform.position + Vector3.up * 0.5f; } else if (hitobj.GetComponent()) { corr = hitobj.transform.Find("ConnectPos").position; } else if (hitobj.GetComponent()) { corr = hitobj.transform.position; } return corr; } /// /// 如果起点连在一条水带上,改变水带的起点,这方法没用 /// /// private Vector3 changeStartPointWhileHitHose(GameObject gameobj, Vector3 hitpoint) { Vector3 startpointpart = Vector3.zero; if (gameobj.GetComponent().gameObjType == CloneObjType.OrdinaryHose) { //水带一端连接了水源 //bool? connent = gameobj.GetComponent().IsConnentWaterSource(); //if (connent != null) //{ // if ((bool)connent) // { // var keyvalue = gameobj.GetComponent().GetConnentWaterSourceObjAndAntherPoint(); // startpointpart = keyvalue.Value - Vector3.up / 2; // Debug.Log(startpointpart); // } // else // { // startpointpart = Vector3.zero; // } //} //else //{ // startpointpart = Vector3.zero; // LoadPromptWin.Instance.LoadTextPromptWindow("不能在此连接", 1f); //} //水带一端连接了水带 // if (gameobj.GetComponent().IsConnentWaterHose()) //sif() //{ //var keyvalue = gameobj.GetComponent().GetConnentWaterHoseAndAntherPoint(); //startpointpart = keyvalue.Value - Vector3.up / 2; float start = Vector3.Distance(hitpoint, gameobj.GetComponent().StartPoint); float end = Vector3.Distance(hitpoint, gameobj.GetComponent().EndPoint); if (start > end) { startpointpart = gameobj.GetComponent().EndPoint; } else { startpointpart = gameobj.GetComponent().StartPoint; } //} } return startpointpart; } /// /// 信息同步 /// private void CloneInfoSync(Vector3 hitPoint) { ///////////////////同步信息////////////////////// var argsync = new AssociatedLineSyncDate(); // argsync.parentUID = GetComponent().Id; argsync.SendUserID = CurrentUserInfo.mySelf.Id; argsync.Height = Height; argsync.SizeVec = SizeVec; //argsync.PrefabsPath = PrefabPath; argsync.lenght = parentgameobj.GetComponent().LineLenght; argsync.LineBeginPoint = beginLinePoint; argsync.hitpoint = hitPoint; argsync.startHitGameObjId = startHitGameobj.GetComponent().gameObjID; argsync.endHitGameObjId = endHitGameobj.GetComponent().gameObjID; argsync.CreatFiremanId = SelectFireMan.GetComponent().gameObjID; //argsync.LineEndPoint = endPoint; argsync.name = parentgameobj.name; argsync.gameObjID = parentgameobj.GetComponent().gameObjID; argsync.gameObjType = parentgameobj.GetComponent().gameObjType; argsync.UserID = parentgameobj.GetComponent().UserID; argsync.buildNum = parentgameobj.GetComponent().buildNum; argsync.floorNum = parentgameobj.GetComponent().floorNum; argsync.interlayerNum = parentgameobj.GetComponent().interlayerNum; NetworkManager.Default.SendAsync(/*CurrentUserInfo.mySelf.Id,*/ "ASSOCIATED_LINE_SYNC", argsync); ///////////////////同步信息////////////////////// } }