网上演练贵港万达广场(人员密集)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

1140 lines
49 KiB

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<Vector3> pathPoints = new List<Vector3>();
/// <summary>
/// 克隆出的线的父物体预设
/// </summary>
private GameObject parent;
/// <summary>
/// 画线是否超过俩个点
/// </summary>
public bool PointOverTwo;
private GameObject startHitGameobj;
private GameObject endHitGameobj;
/// <summary>
///是否是水带
/// </summary>
// public bool IsWaterHose;
/// <summary>
/// 当前选中的消防员
/// </summary>
public GameObject SelectFireMan;
/// <summary>
/// 线的父物体
/// </summary>
private GameObject parentgameobj;
public Vector3 SizeVec;
/// <summary>
/// 画线起点是否为水源
/// </summary>
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<ParentLinesMessage>())
{
if (parentgameobj.GetComponent<ParentLinesMessage>().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<UIdsystem>()
//是否要每段都记录楼层信息
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<BoxCollider>();
line.GetComponent<CloneGameObjInfo>().gameObjID = parentgameobj.GetComponent<BaseGameObjInfo>().gameObjID;
parentgameobj.GetComponent<ParentLinesMessage>().LineLenght += distance;
parentgameobj.GetComponent<ParentLinesMessage>().StartHitGameObj = startHitGameobj;
parentgameobj.GetComponent<ParentLinesMessage>().EndHitGameObj = endHitGameobj;
parentgameobj.GetComponent<ParentLinesMessage>().StartPoint = beginLinePoint;
parentgameobj.GetComponent<ParentLinesMessage>().EndPoint = endPoint;
parentgameobj.GetComponent<ParentLinesMessage>().CreatFiremanID = SelectFireMan.GetComponent<BaseGameObjInfo>().gameObjID;
parentgameobj.name = CloneObjNameTool.Instance().GetCloneObjectName(cloneObjType);
ExpendHose(distance, parentgameobj.GetComponent<ParentLinesMessage>().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<TruckMessage>()
// )
//{
// var arg = new HoseConnectOrDelectData();
// arg.StartId = startHitGameobj.GetComponent<BaseGameObjInfo>().gameObjID;
// arg.EndId = endHitGameobj.GetComponent<BaseGameObjInfo>().gameObjID;
// arg.HoseId = parentgameobj.GetComponent<BaseGameObjInfo>().gameObjID;
// arg.Isconnect = true;
// MessageDispatcher.SendMessage("HOSE_CONNECT_OR_DELECT", arg);
// //MessageDispatcher.SendMessage("WATERHOSECONNECT", arg);
//}
//如果长度小于0.5,认为只有初始点,为无用管线,删除
if (parentgameobj.GetComponent<ParentLinesMessage>().LineLenght < 0.5)
{
EntitiesManager.Instance.DeleteObj(parentgameobj);
}
//同步
CloneInfoSync(endPoint);
if (endHitGameobj.GetComponent<FireManControl>() ||
endHitGameobj.GetComponent<WaterConnonController>() ||
endHitGameobj.GetComponent<SnowConnonController>() ||
endHitGameobj.GetComponent<FireRobotController>() ||
endHitGameobj.GetComponent<TruckMessage>() ||
startHitGameobj.GetComponent<WaterSource>())
{
if (endHitGameobj.GetComponent<FireManControl>() ||
endHitGameobj.GetComponent<WaterConnonController>() ||
endHitGameobj.GetComponent<SnowConnonController>() ||
endHitGameobj.GetComponent<FireRobotController>() ||
endHitGameobj.GetComponent<TruckMessage>())
{
LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f);
}
var arg = new HoseConnectOrDelectData();
arg.StartId = startHitGameobj.GetComponent<BaseGameObjInfo>().gameObjID;
arg.EndId = endHitGameobj.GetComponent<BaseGameObjInfo>().gameObjID;
arg.HoseId = parentgameobj.GetComponent<BaseGameObjInfo>().gameObjID;
arg.Isconnect = true;
MessageDispatcher.SendMessage("HOSE_CONNECT_OR_DELECT", arg);
}
//如果连接到消防车、消防员或者水源上,重置信息,准备另画一条水带
if (endHitGameobj.GetComponent<WaterSource>() ||
endHitGameobj.GetComponent<FireManControl>() ||
endHitGameobj.GetComponent<TruckMessage>() ||
endHitGameobj.GetComponent<WaterConnonController>() ||
endHitGameobj.GetComponent<SnowConnonController>() ||
endHitGameobj.GetComponent<FireRobotController>())
{
WaterHoseExpend expend = new WaterHoseExpend
{
WaterHoseDraw = parentgameobj,
Distance = parentgameobj.GetComponent<ParentLinesMessage>().LineLenght,
Fireman = SelectFireMan,
ExpendNum = Mathf.CeilToInt(parentgameobj.GetComponent<ParentLinesMessage>().LineLenght / DefultHoseLenght),
};
MessageDispatcher.SendMessage("WATERHOSEEXPEND", expend);
parentgameobj.GetComponent<ParentLinesMessage>().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<ParentLinesMessage>().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>();
CloneGameObjInfo cloneObjInfo = Clone.GetComponent<CloneGameObjInfo>();
cloneObjInfo.gameObjType = cloneObjType;
cloneObjInfo.UserID = CurrentUserInfo.mySelf.Id;
cloneObjInfo.buildNum = hitObjInfo.buildNum;
cloneObjInfo.floorNum = hitObjInfo.floorNum;
cloneObjInfo.interlayerNum = hitObjInfo.interlayerNum;
}
/// <summary>
/// 当前物体时候是否还能再连接管线,连接两辆水原车时
/// </summary>
/// <param name="Hitobj"></param>
/// <returns></returns>
private bool checkCanConnetOrNo(GameObject Hitobj)
{
bool can = true;
if (Hitobj == startHitGameobj)
{//连接起点
if (!Hitobj.GetComponent<WaterSource>())
{
LoadPromptWin.Instance.LoadTextPromptWindow("该物体不能供水,不能作为连接起点,请选择水源作为连接起点", 2f);
can = false;
}
else
{
// 地上消火栓 / 泡沫栓
if (Hitobj.GetComponent<XFSS>())
{
if (Hitobj.GetComponent<WaterSource>().ConnectGameObj != null)
{
LoadPromptWin.Instance.LoadTextPromptWindow("当前消防设施不能连接更多管线", 2f);
can = false;
}
}
else if (Hitobj.GetComponent<TruckMessage>())
{//水源车
TruckBindWaterSource truckbind = Hitobj.GetComponent<TruckBindWaterSource>();
//起点为水源车
if (truckbind.DirectConnectObj1.Key != null && truckbind.DirectConnectObj2.Key != null)
{
LoadPromptWin.Instance.LoadTextPromptWindow("当前水源车没有更多出水口", 1f);
can = false;
}
}
}
}
else
{//终点
if (Hitobj.GetComponent<WaterSource>() && Hitobj.GetComponent<XFSS>())
{//消防设施
LoadPromptWin.Instance.LoadTextPromptWindow("消防设施不能作为连接终点", 1f);
can = false;
}
//消防员
if (Hitobj.GetComponent<FireManControl>())
{
if (Hitobj.GetComponent<FireManWaterHoseManager>().IsConnentWaterLine)
{
LoadPromptWin.Instance.LoadTextPromptWindow("当前消防员已连接管线", 1f);
can = false;
}
}
//水炮
else if (Hitobj.GetComponent<WaterConnonController>())
{
if (Hitobj.GetComponent<WaterConnonController>().IsConnentWaterLine)
{
LoadPromptWin.Instance.LoadTextPromptWindow("当前水泡已连接管线", 1f);
can = false;
}
}
//雪炮
else if (Hitobj.GetComponent<BaseGameObjInfo>().gameObjType == CloneObjType.SnowCannon)
{
if (Hitobj.GetComponent<SnowConnonController>().IsConnentWaterLine)
{
LoadPromptWin.Instance.LoadTextPromptWindow("当前暴风雪炮已连接管线", 1f);
can = false;
}
}
//机器人
else if (Hitobj.GetComponent<BaseGameObjInfo>().gameObjType == CloneObjType.FirefightingRobot)
{
if (Hitobj.GetComponent<FireRobotWaterHoseManage>().IsConnentWaterLine)
{
LoadPromptWin.Instance.LoadTextPromptWindow("当前灭火机器人已连接管线", 1f);
can = false;
}
}
//车辆
if (Hitobj.GetComponent<TruckMessage>())
{
TruckBindWaterSource truckbind = Hitobj.GetComponent<TruckBindWaterSource>();
if (truckbind.WaterSourceLine1.Count > 0 && truckbind.WaterSourceLine2.Count > 0)
{
LoadPromptWin.Instance.LoadTextPromptWindow("当前车辆没有更多进水口", 1f);
can = false;
}
else
{
if (Hitobj.GetComponent<WaterSource>() && startHitGameobj.GetComponent<TruckMessage>())
{ //起点、终点都是水源车,判断是都形成循环闭路
can = !checkCloseLoop(startHitGameobj, Hitobj);
if (!can)
{
LoadPromptWin.Instance.LoadTextPromptWindow("组成闭合回路", 1f);
}
//if (close==false)
//{//判断两端所属的供水网络是否都在出水
//}
}
}
}
}
return can;
}
/// <summary>
/// 连接时检查车是否构成闭环
/// </summary>
/// <returns></returns>
bool checkCloseLoop(GameObject start, GameObject end)
{
bool close = false;
if (start.GetComponent<TruckBindWaterSource>())
{
long endid = end.GetComponent<BaseGameObjInfo>().gameObjID;
List<List<long>> startwatersourcelist = start.GetComponent<TruckBindWaterSource>().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<FireManControl>().workType == FireManSkills.AssociatedLine)
{
FireManSkillPanelController.Instance.FiremanAssociatedLine = parentgameobj;
}
}
parentgameobj.GetComponent<BaseGameObjInfo>().gameObjType = cloneObjType;
parentgameobj.transform.parent = transform;
parentgameobj.name = cloneObjType.ToString();
}
/// <summary>
/// 是多点创建一个父物体,不是多点,每2点创建一个父物体。
/// </summary>
/// <param name="imessageobj"></param>
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;
}
/// <summary>
/// 检查是否有足够水带
/// </summary>
/// <param name="distance"></param>
private bool WaterHoseAndOverLenght(float distance)
{
bool can = false;
if (SelectFireMan.GetComponent<FireManWaterHoseManager>().CheckHoseIsEnough(distance))
{
can = true;
}
return can;
}
/// <summary>
/// 检查是否携带水带
/// </summary>
private bool HasEquipWaterHose()
{
if (SelectedObjs.selectedCharacters.Count > 0)
SelectFireMan = SelectedObjs.selectedCharacters[0];
if (SelectFireMan != null)
{
if (!SelectFireMan.GetComponent<FireManWaterHoseManager>().HasWaterHose)
{
LoadPromptWin.Instance.LoadTextPromptWindow("未携带水带", 1f);
return false;
}
else
{
return true;
}
}
else
{
return false;
}
}
/// <summary>
/// 消耗水带
/// </summary>
/// <param name="distance"></param>
private void ExpendHose(float distance, float alldistance)
{
SelectFireMan.GetComponent<FireManWaterHoseManager>().ExpendHose(distance, alldistance);//.WaterHoseLenghtRemain -= distance;
}
/// <summary>
/// 连接管线判断起点跟终点物体是否可连接(因为改为起点必须为水源,所以没用了)
/// </summary>
private bool JugeConnent()
{
bool can = true;
//如果首尾是同一物体
if (startHitGameobj == endHitGameobj)
{
LoadPromptWin.Instance.LoadTextPromptWindow("不能连在同一物体上", 1f);
can = false;
}
//两端都是非消防车的水源
if (startHitGameobj.GetComponent<WaterSource>() && endHitGameobj.GetComponent<WaterSource>())
{
if ((!startHitGameobj.GetComponent<TruckMessage>()) && (!endHitGameobj.GetComponent<TruckMessage>()))
{
LoadPromptWin.Instance.LoadTextPromptWindow("不能两端都是消防栓", 1f);
can = false;
}
}
//一端为非水源车、人、水炮、雪炮、机器人
if (startHitGameobj.GetComponent<FireManControl>() ||
startHitGameobj.GetComponent<WaterConnonController>() ||
startHitGameobj.GetComponent<SnowConnonController>() ||
startHitGameobj.GetComponent<FireRobotController>() ||
(startHitGameobj.GetComponent<TruckBindWaterSource>() && !startHitGameobj.GetComponent<WaterSource>()))
{
if (endHitGameobj.GetComponent<FireManControl>() ||
endHitGameobj.GetComponent<WaterConnonController>() ||
endHitGameobj.GetComponent<SnowConnonController>() ||
endHitGameobj.GetComponent<FireRobotController>() ||
(endHitGameobj.GetComponent<TruckBindWaterSource>() && !endHitGameobj.GetComponent<WaterSource>()))
{
LoadPromptWin.Instance.LoadTextPromptWindow("连接两端至少有一端为水源", 2f);
can = false;
}
}
return can;
}
/// <summary>
/// 连接消防员判断
/// </summary>
private void connentFireMan()
{
if (startHitGameobj.GetComponent<FireManControl>())
{
if (!startHitGameobj.GetComponent<FireManWaterHoseManager>().IsConnentWaterLine)
{
LoadPromptWin.Instance.LoadTextPromptWindow("连接一名消防员", 1f);
}
startHitGameobj.GetComponent<FireManWaterHoseManager>().IsConnentWaterLine = true;
startHitGameobj.GetComponent<FireManWaterHoseManager>().WaterLineConnent = parentgameobj;
startHitGameobj.GetComponent<AgentController>().pathFindEnable = false;
var another = parentgameobj.GetComponent<ParentLinesMessage>().GetAnotherGameObj(startHitGameobj);
if (another.GetComponent<WaterSource>())
{
startHitGameobj.GetComponent<FireManWaterHoseManager>().hasWaterConnect = another.GetComponent<WaterSource>().water;
startHitGameobj.GetComponent<FireManWaterHoseManager>().hasFoamConnect = another.GetComponent<WaterSource>().foam;
startHitGameobj.GetComponent<LayWaterHose>().SetInitPoint();
// LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f);
}
if (another.GetComponent<TruckBindWaterSource>())
{
startHitGameobj.GetComponent<FireManWaterHoseManager>().hasWaterConnect = another.GetComponent<TruckBindWaterSource>().ConnectWater;
startHitGameobj.GetComponent<FireManWaterHoseManager>().hasFoamConnect = another.GetComponent<TruckBindWaterSource>().ConnectFoam;
startHitGameobj.GetComponent<LayWaterHose>().SetInitPoint();
//LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f);
}
}
if (endHitGameobj.GetComponent<FireManControl>())
{
LoadPromptWin.Instance.LoadTextPromptWindow("连接一名消防员", 1f);
endHitGameobj.GetComponent<FireManWaterHoseManager>().IsConnentWaterLine = true;
endHitGameobj.GetComponent<AgentController>().pathFindEnable = false;
endHitGameobj.GetComponent<FireManWaterHoseManager>().WaterLineConnent = parentgameobj;
var another = parentgameobj.GetComponent<ParentLinesMessage>().GetAnotherGameObj(endHitGameobj);
if (another.GetComponent<WaterSource>())
{
endHitGameobj.GetComponent<FireManWaterHoseManager>().hasWaterConnect = another.GetComponent<WaterSource>().water;
endHitGameobj.GetComponent<FireManWaterHoseManager>().hasFoamConnect = another.GetComponent<WaterSource>().foam;
endHitGameobj.GetComponent<LayWaterHose>().SetInitPoint();
// LoadPromptWin.Instance.LoadTextPromptWindow("连接一名消防员", 1f);
}
if (another.GetComponent<TruckBindWaterSource>())
{
endHitGameobj.GetComponent<FireManWaterHoseManager>().hasWaterConnect = another.GetComponent<TruckBindWaterSource>().ConnectWater;
endHitGameobj.GetComponent<FireManWaterHoseManager>().hasFoamConnect = another.GetComponent<TruckBindWaterSource>().ConnectFoam;
endHitGameobj.GetComponent<LayWaterHose>().SetInitPoint();
//LoadPromptWin.Instance.LoadTextPromptWindow("连接一名消防员", 1f);
}
// ResertLine();
}
}
/// <summary>
/// 连接水炮判断
/// </summary>
private void connentWaterCannon()
{
if (startHitGameobj.GetComponent<WaterConnonController>())
{
if (!startHitGameobj.GetComponent<WaterConnonController>().IsConnentWaterLine)
{
LoadPromptWin.Instance.LoadTextPromptWindow("连接一台水炮", 1f);
}
startHitGameobj.GetComponent<WaterConnonController>().IsConnentWaterLine = true;
startHitGameobj.GetComponent<WaterConnonController>().WaterLineConnent = parentgameobj;
// startHitGameobj.GetComponent<AgentController>().pathFindEnable = false;
startHitGameobj.GetComponent<ObjDrag>().enabled = false;
var another = parentgameobj.GetComponent<ParentLinesMessage>().GetAnotherGameObj(startHitGameobj);
if (another.GetComponent<WaterSource>())
{
startHitGameobj.GetComponent<WaterConnonController>().hasWaterConnect = another.GetComponent<WaterSource>().water;
startHitGameobj.GetComponent<WaterConnonController>().hasFoamConnect = another.GetComponent<WaterSource>().foam;
// LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f);
//startHitGameobj.GetComponent<LayWaterHose>().SetInitPoint();
}
if (another.GetComponent<TruckBindWaterSource>())
{
startHitGameobj.GetComponent<WaterConnonController>().hasWaterConnect = another.GetComponent<TruckBindWaterSource>().ConnectWater;
startHitGameobj.GetComponent<WaterConnonController>().hasFoamConnect = another.GetComponent<TruckBindWaterSource>().ConnectFoam;
// LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f);
//startHitGameobj.GetComponent<LayWaterHose>().SetInitPoint();
}
}
if (endHitGameobj.GetComponent<WaterConnonController>())
{
LoadPromptWin.Instance.LoadTextPromptWindow("连接一台水炮", 1f);
endHitGameobj.GetComponent<WaterConnonController>().IsConnentWaterLine = true;
endHitGameobj.GetComponent<ObjDrag>().enabled = false;
//endHitGameobj.GetComponent<AgentController>().pathFindEnable = false;
endHitGameobj.GetComponent<WaterConnonController>().WaterLineConnent = parentgameobj;
var another = parentgameobj.GetComponent<ParentLinesMessage>().GetAnotherGameObj(endHitGameobj);
if (another.GetComponent<WaterSource>())
{
endHitGameobj.GetComponent<WaterConnonController>().hasWaterConnect = another.GetComponent<WaterSource>().water;
endHitGameobj.GetComponent<WaterConnonController>().hasFoamConnect = another.GetComponent<WaterSource>().foam;
//LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f);
// endHitGameobj.GetComponent<LayWaterHose>().SetInitPoint();
}
if (another.GetComponent<TruckBindWaterSource>())
{
endHitGameobj.GetComponent<WaterConnonController>().hasWaterConnect = another.GetComponent<TruckBindWaterSource>().ConnectWater;
endHitGameobj.GetComponent<WaterConnonController>().hasFoamConnect = another.GetComponent<TruckBindWaterSource>().ConnectFoam;
//LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f);
//endHitGameobj.GetComponent<LayWaterHose>().SetInitPoint();
}
// ResertLine();
}
}
private void connectSnowCannon()
{
if (startHitGameobj.GetComponent<SnowConnonController>())
{
if (!startHitGameobj.GetComponent<SnowConnonController>().IsConnentWaterLine)
{
LoadPromptWin.Instance.LoadTextPromptWindow("连接一台暴风雪炮", 1f);
}
startHitGameobj.GetComponent<SnowConnonController>().IsConnentWaterLine = true;
startHitGameobj.GetComponent<SnowConnonController>().WaterLineConnent = parentgameobj;
startHitGameobj.GetComponent<ObjDrag>().enabled = false;
startHitGameobj.GetComponent<ObjRotate>().enabled = false;
var another = parentgameobj.GetComponent<ParentLinesMessage>().GetAnotherGameObj(startHitGameobj);
if (another.GetComponent<WaterSource>())
{
startHitGameobj.GetComponent<SnowConnonController>().hasWaterConnect = another.GetComponent<WaterSource>().water;
startHitGameobj.GetComponent<SnowConnonController>().hasFoamConnect = another.GetComponent<WaterSource>().foam;
}
if (another.GetComponent<TruckBindWaterSource>())
{
startHitGameobj.GetComponent<SnowConnonController>().hasWaterConnect = another.GetComponent<TruckBindWaterSource>().ConnectWater;
startHitGameobj.GetComponent<SnowConnonController>().hasFoamConnect = another.GetComponent<TruckBindWaterSource>().ConnectFoam;
}
}
if (endHitGameobj.GetComponent<SnowConnonController>())
{
LoadPromptWin.Instance.LoadTextPromptWindow("连接一台暴风雪炮", 1f);
endHitGameobj.GetComponent<SnowConnonController>().IsConnentWaterLine = true;
endHitGameobj.GetComponent<ObjDrag>().enabled = false;
endHitGameobj.GetComponent<ObjRotate>().enabled = false;
endHitGameobj.GetComponent<SnowConnonController>().WaterLineConnent = parentgameobj;
var another = parentgameobj.GetComponent<ParentLinesMessage>().GetAnotherGameObj(endHitGameobj);
if (another.GetComponent<WaterSource>())
{
endHitGameobj.GetComponent<SnowConnonController>().hasWaterConnect = another.GetComponent<WaterSource>().water;
endHitGameobj.GetComponent<SnowConnonController>().hasFoamConnect = another.GetComponent<WaterSource>().foam;
}
if (another.GetComponent<TruckBindWaterSource>())
{
endHitGameobj.GetComponent<SnowConnonController>().hasWaterConnect = another.GetComponent<TruckBindWaterSource>().ConnectWater;
endHitGameobj.GetComponent<SnowConnonController>().hasFoamConnect = another.GetComponent<TruckBindWaterSource>().ConnectFoam;
}
}
}
/// <summary>
/// 连接水源判断,若两端都是水源,这里水源信息赋值的是后点击水源
/// </summary>
private void connentWaterSource()
{
if (startHitGameobj.GetComponent<WaterSource>())
{
if (!StartObjIsWaterSource)
{
//LoadPromptWin.Instance.LoadTextPromptWindow("连接到水源", 1f);
parentgameobj.GetComponent<ParentLinesMessage>().HasWaterConnent = true;
parentgameobj.GetComponent<ParentLinesMessage>().WaterSource = startHitGameobj;
StartObjIsWaterSource = true;
}
}
if (endHitGameobj.GetComponent<WaterSource>())
{
//LoadPromptWin.Instance.LoadTextPromptWindow("连接到水源", 1f);
parentgameobj.GetComponent<ParentLinesMessage>().HasWaterConnent = true;
parentgameobj.GetComponent<ParentLinesMessage>().WaterSource = endHitGameobj;
//ResertLine();
}
if (startHitGameobj.GetComponent<WaterSource>() && endHitGameobj.GetComponent<WaterSource>())
{
LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f);
}
}
private void connentFireCar()
{
if (startHitGameobj.GetComponent<TruckBindWaterSource>() && !startHitGameobj.GetComponent<WaterSource>())
{
if (endHitGameobj.GetComponent<WaterSource>())
{
LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f);
}
}
if (endHitGameobj.GetComponent<TruckBindWaterSource>() && !endHitGameobj.GetComponent<WaterSource>())
{
if (startHitGameobj.GetComponent<WaterSource>())
{
LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f);
}
}
}
private void OneFiremanAnotherWaterSource()
{
if (startHitGameobj.GetComponent<WaterSource>() && endHitGameobj.GetComponent<FireManControl>())
{
endHitGameobj.GetComponent<FireManWaterHoseManager>().IsConnentWaterSource = true;
endHitGameobj.GetComponent<FireManWaterHoseManager>().ConnentSource = startHitGameobj;
if (SelectFireMan.GetComponent<BaseGameObjInfo>().gameObjID ==
FireManSkillPanelController.Instance.SelectFireMan.GetComponent<BaseGameObjInfo>().gameObjID)
{
FireManSkillPanelController.Instance.SprayWater.GetComponent<Toggle>().interactable = true;
}
LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f);
}
if (startHitGameobj.GetComponent<FireManControl>() && endHitGameobj.GetComponent<WaterSource>())
{
startHitGameobj.GetComponent<FireManWaterHoseManager>().IsConnentWaterSource = true;
startHitGameobj.GetComponent<FireManWaterHoseManager>().ConnentSource = endHitGameobj;
if (SelectFireMan.GetComponent<BaseGameObjInfo>().gameObjID ==
FireManSkillPanelController.Instance.SelectFireMan.GetComponent<BaseGameObjInfo>().gameObjID)
{
FireManSkillPanelController.Instance.SprayWater.GetComponent<Toggle>().interactable = true;
}
LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f);
}
}
private void OneWaterCannonAnotherWaterSource()
{
if (startHitGameobj.GetComponent<WaterSource>() && endHitGameobj.GetComponent<WaterConnonController>())
{
endHitGameobj.GetComponent<WaterConnonController>().IsConnentWaterSource = true;
endHitGameobj.GetComponent<WaterConnonController>().ConnentSource = startHitGameobj;
//if (SelectFireMan.GetComponent<BaseGameObjInfo>().gameObjID ==
// FireManSkillPanelController.Instance.SelectFireMan.GetComponent<BaseGameObjInfo>().gameObjID)
//{
//MoveWaterConnonSkillPanelController.Instance.SprayWater.GetComponent<Toggle>().interactable = true;
//}
LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f);
}
if (startHitGameobj.GetComponent<WaterConnonController>() && endHitGameobj.GetComponent<WaterSource>())
{
startHitGameobj.GetComponent<WaterConnonController>().IsConnentWaterSource = true;
startHitGameobj.GetComponent<WaterConnonController>().ConnentSource = endHitGameobj;
//if (SelectFireMan.GetComponent<BaseGameObjInfo>().gameObjID ==
// FireManSkillPanelController.Instance.SelectFireMan.GetComponent<BaseGameObjInfo>().gameObjID)
//{
// MoveWaterConnonSkillPanelController.Instance.SprayWater.GetComponent<Toggle>().interactable = true;
//}
LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f);
}
}
private void OneSnowCannonAnotherWaterSource()
{
if (startHitGameobj.GetComponent<WaterSource>() && endHitGameobj.GetComponent<SnowConnonController>())
{
endHitGameobj.GetComponent<SnowConnonController>().IsConnentWaterSource = true;
endHitGameobj.GetComponent<SnowConnonController>().ConnentSource = startHitGameobj;
//if (SelectFireMan.GetComponent<BaseGameObjInfo>().gameObjID ==
// FireManSkillPanelController.Instance.SelectFireMan.GetComponent<BaseGameObjInfo>().gameObjID)
//{
//MoveWaterConnonSkillPanelController.Instance.SprayWater.GetComponent<Toggle>().interactable = true;
//}
LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f);
}
if (startHitGameobj.GetComponent<SnowConnonController>() && endHitGameobj.GetComponent<WaterSource>())
{
startHitGameobj.GetComponent<SnowConnonController>().IsConnentWaterSource = true;
startHitGameobj.GetComponent<SnowConnonController>().ConnentSource = endHitGameobj;
//if (SelectFireMan.GetComponent<BaseGameObjInfo>().gameObjID ==
// FireManSkillPanelController.Instance.SelectFireMan.GetComponent<BaseGameObjInfo>().gameObjID)
//{
// MoveWaterConnonSkillPanelController.Instance.SprayWater.GetComponent<Toggle>().interactable = true;
//}
LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f);
}
}
private void OneFireRobotAnotherWaterSource()
{
if (startHitGameobj.GetComponent<WaterSource>() && endHitGameobj.GetComponent<FireRobotController>())
{
endHitGameobj.GetComponent<FireRobotWaterHoseManage>().IsConnentWaterSource = true;
endHitGameobj.GetComponent<FireRobotWaterHoseManage>().ConnentSource = startHitGameobj;
endHitGameobj.GetComponent<FireRobotWaterHoseManage>().IsConnentWaterLine = true;
endHitGameobj.GetComponent<FireRobotWaterHoseManage>().WaterLineConnent = parentgameobj;
endHitGameobj.GetComponent<AgentController>().pathFindEnable = false;
//var another = parentgameobj.GetComponent<ParentLinesMessage>().GetAnotherGameObj(startHitGameobj);
//if (startHitGameobj.GetComponent<WaterSource>())
{
endHitGameobj.GetComponent<FireRobotWaterHoseManage>().hasWaterConnect = startHitGameobj.GetComponent<WaterSource>().water;
endHitGameobj.GetComponent<FireRobotWaterHoseManage>().hasFoamConnect = startHitGameobj.GetComponent<WaterSource>().foam;
//endHitGameobj.GetComponent<LayWaterHose>().SetInitPoint();
}
//if (SelectFireMan.GetComponent<BaseGameObjInfo>().gameObjID ==
// FireManSkillPanelController.Instance.SelectFireMan.GetComponent<BaseGameObjInfo>().gameObjID)
//{
// FireManSkillPanelController.Instance.SprayWater.GetComponent<Toggle>().interactable = true;
//}
LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f);
}
if (endHitGameobj.GetComponent<WaterSource>() && startHitGameobj.GetComponent<FireRobotController>())
{
startHitGameobj.GetComponent<FireRobotWaterHoseManage>().IsConnentWaterSource = true;
startHitGameobj.GetComponent<FireRobotWaterHoseManage>().ConnentSource = endHitGameobj;
startHitGameobj.GetComponent<FireRobotWaterHoseManage>().IsConnentWaterLine = true;
startHitGameobj.GetComponent<FireRobotWaterHoseManage>().WaterLineConnent = parentgameobj;
startHitGameobj.GetComponent<AgentController>().pathFindEnable = false;
//var another = parentgameobj.GetComponent<ParentLinesMessage>().GetAnotherGameObj(startHitGameobj);
//if (startHitGameobj.GetComponent<WaterSource>())
{
startHitGameobj.GetComponent<FireRobotWaterHoseManage>().hasWaterConnect = endHitGameobj.GetComponent<WaterSource>().water;
startHitGameobj.GetComponent<FireRobotWaterHoseManage>().hasFoamConnect = endHitGameobj.GetComponent<WaterSource>().foam;
//endHitGameobj.GetComponent<LayWaterHose>().SetInitPoint();
}
//if (SelectFireMan.GetComponent<BaseGameObjInfo>().gameObjID ==
// FireManSkillPanelController.Instance.SelectFireMan.GetComponent<BaseGameObjInfo>().gameObjID)
//{
// FireManSkillPanelController.Instance.SprayWater.GetComponent<Toggle>().interactable = true;
//}
LoadPromptWin.Instance.LoadTextPromptWindow("连接成功", 1f);
}
}
/// <summary>
/// 连线时,若为车、人,水炮,雪炮,机器人调整起点或终点位置
/// </summary>
/// <param name="hitobj"></param>
/// <returns></returns>
private Vector3 correctPoint(GameObject hitobj)
{
Vector3 corr = Vector3.zero;
if (hitobj.GetComponent<TruckMessage>())
{
//corr = hitobj.transform.position + Vector3.up * 0.7f;
if (hitobj.GetComponent<TruckBindWaterSource>())
{
TruckBindWaterSource tbws = hitobj.GetComponent<TruckBindWaterSource>();
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<FireManControl>())
{
corr = hitobj.transform.position - Vector3.up * 0.2f;
}
else if (hitobj.GetComponent<WaterSource>() && !hitobj.GetComponent<FireManControl>())
{
corr = hitobj.transform.position;
}
else if (hitobj.GetComponent<WaterConnonController>())
{
corr = hitobj.transform.position + Vector3.up * 0.5f;
}
else if (hitobj.GetComponent<SnowConnonController>())
{
corr = hitobj.transform.Find("ConnectPos").position;
}
else if (hitobj.GetComponent<FireRobotController>())
{
corr = hitobj.transform.position;
}
return corr;
}
/// <summary>
/// 如果起点连在一条水带上,改变水带的起点,这方法没用
/// </summary>
/// <param name="gameobj"></param>
private Vector3 changeStartPointWhileHitHose(GameObject gameobj, Vector3 hitpoint)
{
Vector3 startpointpart = Vector3.zero;
if (gameobj.GetComponent<BaseGameObjInfo>().gameObjType == CloneObjType.OrdinaryHose)
{
//水带一端连接了水源
//bool? connent = gameobj.GetComponent<ParentLinesMessage>().IsConnentWaterSource();
//if (connent != null)
//{
// if ((bool)connent)
// {
// var keyvalue = gameobj.GetComponent<ParentLinesMessage>().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<ParentLinesMessage>().IsConnentWaterHose()) //sif()
//{
//var keyvalue = gameobj.GetComponent<ParentLinesMessage>().GetConnentWaterHoseAndAntherPoint();
//startpointpart = keyvalue.Value - Vector3.up / 2;
float start = Vector3.Distance(hitpoint, gameobj.GetComponent<ParentLinesMessage>().StartPoint);
float end = Vector3.Distance(hitpoint, gameobj.GetComponent<ParentLinesMessage>().EndPoint);
if (start > end)
{
startpointpart = gameobj.GetComponent<ParentLinesMessage>().EndPoint;
}
else
{
startpointpart = gameobj.GetComponent<ParentLinesMessage>().StartPoint;
}
//}
}
return startpointpart;
}
/// <summary>
/// 信息同步
/// </summary>
private void CloneInfoSync(Vector3 hitPoint)
{
///////////////////同步信息//////////////////////
var argsync = new AssociatedLineSyncDate();
// argsync.parentUID = GetComponent<UIdSystem>().Id;
argsync.SendUserID = CurrentUserInfo.mySelf.Id;
argsync.Height = Height;
argsync.SizeVec = SizeVec;
//argsync.PrefabsPath = PrefabPath;
argsync.lenght = parentgameobj.GetComponent<ParentLinesMessage>().LineLenght;
argsync.LineBeginPoint = beginLinePoint;
argsync.hitpoint = hitPoint;
argsync.startHitGameObjId = startHitGameobj.GetComponent<BaseGameObjInfo>().gameObjID;
argsync.endHitGameObjId = endHitGameobj.GetComponent<BaseGameObjInfo>().gameObjID;
argsync.CreatFiremanId = SelectFireMan.GetComponent<BaseGameObjInfo>().gameObjID;
//argsync.LineEndPoint = endPoint;
argsync.name = parentgameobj.name;
argsync.gameObjID = parentgameobj.GetComponent<BaseGameObjInfo>().gameObjID;
argsync.gameObjType = parentgameobj.GetComponent<BaseGameObjInfo>().gameObjType;
argsync.UserID = parentgameobj.GetComponent<BaseGameObjInfo>().UserID;
argsync.buildNum = parentgameobj.GetComponent<CloneGameObjInfo>().buildNum;
argsync.floorNum = parentgameobj.GetComponent<CloneGameObjInfo>().floorNum;
argsync.interlayerNum = parentgameobj.GetComponent<CloneGameObjInfo>().interlayerNum;
NetworkManager.Default.SendAsync(/*CurrentUserInfo.mySelf.Id,*/ "ASSOCIATED_LINE_SYNC", argsync);
///////////////////同步信息//////////////////////
}
}