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.
717 lines
28 KiB
717 lines
28 KiB
using System.Collections; |
|
using System.Collections.Generic; |
|
using UnityEngine; |
|
using UnityEngine.AI; |
|
using UnityEngine.UI; |
|
|
|
public class FireRobotLayWaterHose : MonoBehaviour |
|
{ |
|
|
|
private string parentName; |
|
public GameObject WaterHoses; |
|
private string bandtype = "OrdinaryHose"; |
|
// public GameObject waterhose; |
|
private int num = 1; |
|
private Dictionary<int, GameObject> hoseDic = new Dictionary<int, GameObject>(); |
|
private Dictionary<int, float> lengthDic = new Dictionary<int, float>(); |
|
private NavMeshAgent agent; |
|
private bool flag = false; |
|
private List<Vector3> allInits = new List<Vector3>(); |
|
private Vector3[] path = null; |
|
private Dictionary<int, Vector3[]> pathCorners = new Dictionary<int, Vector3[]>(); |
|
private float time = 0; |
|
//private FireManMessage fireManMessage; |
|
private NavMeshPath NavMeshPath; |
|
private Vector3 InitPoint; |
|
private Vector3 endPoint; //记录水带用完的点 |
|
private Vector3 checkPoint; |
|
private int pathIndex = 0; |
|
private Dictionary<int, List<int>> pathMap = new Dictionary<int, List<int>>(); //第几次路线包含哪几段 |
|
private Transform shuiqiang; |
|
private bool spraying = false; |
|
|
|
private FireRobotWaterHoseManage waterHoseManage; |
|
//private List<MyEquipObject> equips; //保存消防员所有的装备 |
|
// private MyEquipObject equipedHoses; //保存消防员装备的水带 |
|
|
|
|
|
private bool canreinit = true; |
|
|
|
|
|
// public float LayLenght;//本次铺设长度 |
|
public float remainlenght;//该消防员剩余水带 |
|
public GameObject ParentLayHosePrefabs; |
|
/// <summary> |
|
///铺设水带的父物体 |
|
/// </summary> |
|
public GameObject ParentLayHose; |
|
/// <summary> |
|
/// 是否是捡起来继续铺 |
|
/// </summary> |
|
public bool IsTackUp; |
|
/// <summary> |
|
/// 捡起的水带 |
|
/// </summary> |
|
public GameObject TackHose; |
|
/// <summary> |
|
/// 如果是本客户端 |
|
/// </summary> |
|
public bool IsselfCurrent = true; |
|
private int creatnum = 1; |
|
|
|
private int hasUseNum; |
|
|
|
public int HasUseNum |
|
{ |
|
get |
|
{ |
|
return hasUseNum; |
|
} |
|
|
|
set |
|
{ |
|
int prve = hasUseNum; |
|
hasUseNum = value; |
|
if (prve != value) |
|
{ |
|
if (value > prve) |
|
{//往前铺 |
|
if (GetComponent<Bags>().HasEquip("消防高压水带")) |
|
{ |
|
GetComponent<Bags>().UseEquip("消防高压水带", (value - prve)); |
|
if (GetComponent<Bags>().HasEquip("消防高压水带")) |
|
{ |
|
waterHoseManage.NowRemainWaterHose = GetComponent<Bags>().GetEquip("消防高压水带").Number; |
|
} |
|
else |
|
{ |
|
waterHoseManage.NowRemainWaterHose = 0; |
|
} |
|
|
|
} |
|
// float more= GetSelfConsumedLength() - waterHoseManage.NowRemainWaterHose * waterHoseManage.OneDefaultHoseLenght; |
|
// waterHoseManage.WaterHoseLenghtRemain = waterHoseManage.NowRemainWaterHose * waterHoseManage.OneDefaultHoseLenght; |
|
} |
|
else |
|
{ |
|
// Equip hose = EquipManager.Instance.GetEquipByID("82"); |
|
// hose.Number += (prve - value); |
|
if (GetComponent<Bags>().HasEquip("消防高压水带")) |
|
Debug.Log(GetComponent<Bags>().GetEquip("消防高压水带").Number + "收起前"); |
|
GetComponent<Bags>().AddEquip("82", (prve - value)); |
|
|
|
if (GetComponent<Bags>().HasEquip("消防高压水带")) |
|
Debug.Log(GetComponent<Bags>().GetEquip("消防高压水带").Number + "收起后"); |
|
// waterHoseManage.WaterHoseLenghtRemain = waterHoseManage.NowRemainWaterHose * waterHoseManage.OneDefaultHoseLenght; |
|
} |
|
} |
|
|
|
} |
|
} |
|
// public int hosenum; |
|
//public float hoseremain; |
|
// Use this for initialization |
|
void Start() |
|
{ |
|
NavMeshPath = new NavMeshPath(); |
|
agent = GetComponent<NavMeshAgent>(); |
|
//fireManMessage = GetComponent<FireManMessage>(); |
|
shuiqiang = TransformHelper.FindChild(transform, "WaterEnterPos"); |
|
//生成所有水带的父物体 |
|
parentName = name;//GetComponent<BaseGameObjInfo>().gameObjID.ToString(); |
|
GameObject AllParent = GameObject.Find("P_AllParent/P_Tools/P_FireRobotFollowHose"); |
|
if (!AllParent.transform.Find(parentName)) |
|
{ |
|
WaterHoses = Instantiate(Resources.Load<GameObject>("Lines/WaterHoses")); |
|
WaterHoses.transform.parent = AllParent.transform; |
|
WaterHoses.name = parentName; |
|
} |
|
else |
|
{ |
|
WaterHoses = AllParent.transform.Find(parentName).gameObject; |
|
} |
|
if (ParentLayHosePrefabs == null) |
|
{ |
|
ParentLayHosePrefabs = Resources.Load<GameObject>("LineParent/ParentLayWaterHose"); |
|
} |
|
waterHoseManage = GetComponent<FireRobotWaterHoseManage>(); |
|
} |
|
|
|
// Update is called once per frame |
|
void Update() |
|
{ |
|
|
|
if (flag && agent.velocity.magnitude > 0) //开启“铺设水带”,并且开始寻路时才会执行 |
|
{ |
|
if (remainlenght <= 0.5f) |
|
{ |
|
agent.SetDestination(transform.position); |
|
return; |
|
} |
|
HasUseNum = Mathf.CeilToInt(GetSelfConsumedLength() / 20); |
|
ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().LineLenght = GetSelfConsumedLength(); |
|
ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().UseNum = Mathf.CeilToInt(GetSelfConsumedLength() / 20); |
|
ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().RemainLenght = Mathf.CeilToInt(GetSelfConsumedLength() / 20) * 20 - GetSelfConsumedLength(); |
|
// hosenum = ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().UseNum; |
|
// hoseremain = ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().RemainLenght; |
|
remainlenght = waterHoseManage.NowRemainWaterHose * waterHoseManage.OneDefaultHoseLenght + ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().RemainLenght; |
|
waterHoseManage.WaterHoseLenghtRemain = remainlenght; |
|
endPoint = transform.position; |
|
//LayLenght= GetSelfConsumedLength(); |
|
if (remainlenght > 0 && remainlenght <= 2f) //临界带 |
|
{ |
|
agent.SetDestination(transform.position); |
|
endPoint = transform.position; |
|
if (IsselfCurrent) |
|
{ |
|
LoadPromptWin.Instance.LoadTextPromptWindow("水带用完", 1f); |
|
} |
|
} |
|
if (ParentLayHose) |
|
{ |
|
DrawByTimespan();//按更新的铺设路线画一次水带 |
|
} |
|
} |
|
if (flag) |
|
{ |
|
//if (spraying) //&& agent.velocity.magnitude==0) |
|
//{ |
|
// DrawTail(); |
|
//} |
|
//else |
|
//{ |
|
// DestroyTail(); |
|
//} |
|
} |
|
} |
|
|
|
public float GetSelfConsumedLength() |
|
{ |
|
float length = 0; |
|
if (lengthDic.Count > 0) |
|
{ |
|
foreach (float l in lengthDic.Values) |
|
{ |
|
length += l; |
|
} |
|
} |
|
return length; |
|
} |
|
private void DrawHoseLine(Vector3 position1, Vector3 position2, int number) |
|
{ |
|
Vector3 midPosition = (position1 + position2) / 2; |
|
midPosition = new Vector3(midPosition.x, midPosition.y + 0.1f, midPosition.z); |
|
string linename = "waterhose-" + number; |
|
GameObject hose; |
|
if (!ParentLayHose.transform.Find(linename)) |
|
{ |
|
hose = Instantiate(Resources.Load<GameObject>("Lines/" + bandtype), midPosition, Quaternion.identity) as GameObject; |
|
hose.name = linename; |
|
} |
|
else |
|
{ |
|
hose = ParentLayHose.transform.Find(linename).gameObject; |
|
hose.transform.position = midPosition; |
|
} |
|
hose.transform.parent = ParentLayHose.transform; |
|
hose.transform.forward = (position2 - position1).normalized;//改变朝向 |
|
if (!hose.GetComponent<BoxCollider>()) |
|
{ |
|
hose.AddComponent<BoxCollider>(); |
|
} |
|
float distance = Vector3.Distance(position2, position1); |
|
hose.transform.localScale = new Vector3(25, 25, distance * 107);//延长线条,连接两点 |
|
// hose.transform.position = hose.transform.position + Vector3.up * 0.5f; |
|
SetHoseFloorInfo(hose.transform.parent.gameObject, position2); |
|
UpdateHoseDic(number, hose); |
|
UpdateLength(position1, position2, number); |
|
List<int> intlist = pathMap[pathIndex]; |
|
if (!intlist.Contains(number)) |
|
{ |
|
pathMap[pathIndex].Add(number); //第pathIndex条路线包括水带段number |
|
} |
|
} |
|
private void UpdateLength(Vector3 position1, Vector3 position2, int number) |
|
{ |
|
if (lengthDic.ContainsKey(number)) //如果字典里已包含此序号段水带的长度 |
|
{ |
|
lengthDic[number] = Vector3.Distance(position1, position2);//就更新长度 |
|
} |
|
else //如果不包含此序号段水带的长度 |
|
{ |
|
lengthDic.Add(number, Vector3.Distance(position1, position2));//就添加长度 |
|
} |
|
} |
|
private void UpdateHoseDic(int number, GameObject hose) |
|
{ |
|
if (hoseDic.ContainsKey(number)) |
|
{ |
|
hoseDic[number] = hose; |
|
} |
|
else |
|
{ |
|
hoseDic.Add(number, hose); |
|
} |
|
} |
|
private void HasHose() |
|
{ |
|
float remain = remainlenght;//waterHoseManage.WaterHoseLenghtRemain; |
|
if (remain > 0.5f) |
|
{ |
|
endPoint = transform.position; //记录末点位置 |
|
canreinit = true; //可以更新InitPoint |
|
return; |
|
} |
|
else if (remain > 0 && remain <= 0.5f) //临界带 |
|
{ |
|
canreinit = false; |
|
|
|
if (IsselfCurrent) |
|
{ |
|
LoadPromptWin.Instance.LoadTextPromptWindow("水带用完", 1f); |
|
} |
|
return; |
|
} |
|
} |
|
public void StartLay() |
|
{ |
|
agent.SetDestination(transform.position); |
|
if (!GetComponent<AgentController>().pathFindEnable) |
|
{ |
|
GetComponent<AgentController>().pathFindEnable = true; |
|
} |
|
// 如果当前起始位置与上一次铺设的末点距离较近,则认为此次铺设是上一次铺设的继续 |
|
if (endPoint != Vector3.zero && Vector3.Distance(transform.position, endPoint) < 5) |
|
{ |
|
|
|
//如果放下期间没有被别人捡起,继续铺设 |
|
//更新消防员可用水带 |
|
if (ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().RemainLenght > 0) |
|
{ |
|
//GetComponent<FireRobotWaterHoseManage>().CalculateBeforelay(ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().RemainLenght, ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().UseNum); |
|
} |
|
//更新消防员水源信息 |
|
if (ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().WaterSource != null) |
|
{ |
|
gameObject.GetComponent<FireRobotWaterHoseManage>().ResetWaterSourceConnectInfo |
|
(true, ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().ConnectWater, |
|
ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().ConnectFoam, ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().WaterSource, |
|
ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().ConnectWaterHose); |
|
if (FireRobotSkillPanelController.Instance) |
|
{ |
|
if (ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().WaterSource.GetComponent<WaterSource>().water) |
|
{ |
|
FireRobotSkillPanelController.Instance.SprayWater.GetComponent<Toggle>().interactable = true; |
|
} |
|
if (ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().WaterSource.GetComponent<WaterSource>().foam) |
|
{ |
|
FireRobotSkillPanelController.Instance.SprayFroth.GetComponent<Toggle>().interactable = true; |
|
} |
|
} |
|
} |
|
else |
|
{ |
|
waterHoseManage.ResetWaterSourceConnectInfo(false, false, false, null, null); |
|
} |
|
flag = true; |
|
ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().ConnectFireman = gameObject; |
|
} |
|
//如果当前起始位置与上一次铺设的末点距离较远,则认为开始一段新的铺设,不会收回上一次铺设的管线 |
|
else |
|
{ |
|
lengthDic.Clear(); |
|
if (remainlenght <= 0) |
|
{ |
|
if (IsselfCurrent) |
|
{ |
|
LoadPromptWin.Instance.LoadTextPromptWindow("未装备水带或水带已用完", 1f); |
|
} |
|
return; |
|
} |
|
ParentLayHose = Instantiate(ParentLayHosePrefabs, WaterHoses.transform); |
|
ParentLayHose.name = "LayWaterHose" + creatnum; |
|
creatnum++; |
|
ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().ConnectFireman = gameObject; |
|
//GetComponent<FireManWaterHoseManager>().TackUpLenght = 0; |
|
//如果铺设时消防员被管线连接,给该水带赋值水源信息 |
|
if (waterHoseManage.IsConnentWaterLine) |
|
{ |
|
//FireRobotWaterHoseManage thisFireman = GetComponent<FireRobotWaterHoseManage>(); |
|
ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().BindWaterSource |
|
(waterHoseManage.hasWaterConnect, waterHoseManage.hasFoamConnect, waterHoseManage.ConnentSource, waterHoseManage.WaterLineConnent); |
|
} |
|
|
|
allInits.Clear(); |
|
AddInit(); |
|
endPoint = transform.position; |
|
flag = true; |
|
|
|
} |
|
} |
|
public void SetInitPoint() |
|
{ |
|
allInits.Clear(); //与之前铺设的水带切断联系 |
|
AddInit(); //将当前位置作为起点 |
|
endPoint = Vector3.zero;//transform.position; |
|
//setInitpoint = true; |
|
} |
|
public void StartSprayingLay() |
|
{ |
|
if (!GetComponent<AgentController>().pathFindEnable) |
|
{ |
|
GetComponent<AgentController>().pathFindEnable = true; |
|
} |
|
if (agent.enabled) |
|
{ |
|
agent.SetDestination(transform.position); |
|
} |
|
if (remainlenght <= 0) |
|
{ |
|
if (IsselfCurrent) |
|
{ |
|
LoadPromptWin.Instance.LoadTextPromptWindow("还未装备水带", 1); |
|
} |
|
} |
|
if (endPoint != Vector3.zero && Vector3.Distance(transform.position, endPoint) < 5) |
|
{ |
|
if (ParentLayHose != null && ParentLayHose.GetComponent<ParentLayWaterHoseMsg>()) |
|
{ |
|
//waterHoseManage.CalculateBeforelay(ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().RemainLenght, ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().UseNum); |
|
flag = true; |
|
} |
|
else |
|
{ |
|
ParentLayHose = Instantiate(ParentLayHosePrefabs, WaterHoses.transform); |
|
ParentLayHose.name = "LayWaterHose" + creatnum; |
|
creatnum++; |
|
ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().ConnectFireman = gameObject; |
|
allInits.Clear(); //与之前铺设的水带切断联系 |
|
AddInit(); //将当前位置作为起点 |
|
endPoint = transform.position; |
|
lengthDic.Clear(); |
|
} |
|
} |
|
else |
|
{ |
|
ParentLayHose = Instantiate(ParentLayHosePrefabs, WaterHoses.transform); |
|
ParentLayHose.name = "LayWaterHose" + creatnum; |
|
creatnum++; |
|
ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().ConnectFireman = gameObject; |
|
allInits.Clear(); //与之前铺设的水带切断联系 |
|
AddInit(); //将当前位置作为起点 |
|
endPoint = transform.position; |
|
lengthDic.Clear(); |
|
|
|
} |
|
canreinit = false; |
|
flag = true; |
|
spraying = true; |
|
} |
|
//public void EndLay() |
|
//{ |
|
// //endlay(); |
|
// if (flag) |
|
// { |
|
|
|
// flag = false; |
|
// agent.SetDestination(transform.position); //停止移动 |
|
// SetLayHoseInfo(); |
|
// //lengthDic.Clear();//清空本次绘制存储的线 |
|
// //IsTackUp = false; |
|
// //TackHose = null; |
|
// } |
|
// if (spraying) |
|
// { |
|
// spraying = false; |
|
// DestroyTail(); |
|
// } |
|
// // Debug.Log(endPoint+"//"+transform.position); |
|
//} |
|
//void SetLayHoseInfo() |
|
//{ |
|
// // LastLenght = GetSelfConsumedLength() - ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().LineLenght; |
|
|
|
|
|
// ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().LineLenght = GetSelfConsumedLength(); |
|
// ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().UseNum = Mathf.CeilToInt(GetSelfConsumedLength() / 20); |
|
// ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().CreatFireman = gameObject; |
|
// ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().RemainLenght = Mathf.CeilToInt(GetSelfConsumedLength() / 20) * 20 - GetSelfConsumedLength(); |
|
// GetComponent<FireRobotWaterHoseManage>().UpdateRemain(GetSelfConsumedLength()); |
|
// ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().ConnectWaterHose = GetComponent<FireManWaterHoseManager>().WaterLineConnent; |
|
// ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().EndPoint = transform.position; |
|
|
|
// ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().ConnectFireman = null; |
|
|
|
// //如果结束铺设时消防员被管线连接,更新水带水源信息,防止在铺设过程中消防员连接的管线被删除,造成的信息更改 |
|
// if (GetComponent<FireRobotWaterHoseManage>().IsConnentWaterSource) |
|
// { |
|
// FireRobotWaterHoseManage thisFireman = GetComponent<FireRobotWaterHoseManage>(); |
|
// ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().BindWaterSource(thisFireman.hasWaterConnect, thisFireman.hasFoamConnect, thisFireman.ConnentSource, thisFireman.WaterLineConnent); |
|
// } |
|
// else |
|
// { |
|
// ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().BindWaterSource(false, false, null, null); |
|
// } |
|
// if (GetComponent<FireRobotWaterHoseManage>().IsConnentWaterLine) |
|
// { |
|
// GetComponent<AgentController>().pathFindEnable = false; |
|
// } |
|
// else |
|
// { |
|
// GetComponent<FireRobotWaterHoseManage>().Resert(); |
|
// } |
|
//} |
|
private void GetPath() |
|
{ |
|
NavMesh.CalculatePath(InitPoint, transform.position, -1, NavMeshPath); |
|
path = NavMeshPath.corners; |
|
//path = CheckPath(path); |
|
if (pathCorners.ContainsKey(pathIndex)) |
|
{ |
|
pathCorners[pathIndex] = path; |
|
} |
|
else |
|
{ |
|
pathCorners.Add(pathIndex, path); |
|
} |
|
List<int> intList = pathMap[pathIndex]; |
|
num = intList[0]; |
|
int endnum = intList[intList.Count - 1]; |
|
if (lengthDic.Count > 0 && hoseDic.Count > 0) //删除第pathIndex段水带上一次生成的所有子段 |
|
{ |
|
for (int i = num; i <= endnum; i++) |
|
{ |
|
lengthDic.Remove(i); |
|
} |
|
} |
|
float thispartlength = 0; //记录此次路线生成水带的长度,如果超出20,就更新InitPoint |
|
if (path.Length > 1) |
|
{ |
|
for (int i = 1; i < path.Length; i++) |
|
{ |
|
DrawHoseLine(path[i - 1], path[i], num); |
|
thispartlength += lengthDic[num]; |
|
num += 1; |
|
} |
|
} |
|
if (num - 1 < hoseDic.Count) //删除多余的水带段 |
|
{ |
|
for (int i = hoseDic.Count; i > num - 1; i--) |
|
{ |
|
if (hoseDic.ContainsKey(i)) |
|
{ |
|
Destroy(hoseDic[i]); |
|
hoseDic.Remove(i); |
|
} |
|
} |
|
} |
|
//此次路线生成水带的长度如果超出20,或者就更新InitPoint |
|
//if (GetComponent<FireManWaterHoseManager>().OverLenght == 0) |
|
{ |
|
if (canreinit && path.Length > 1 && Vector3.Distance(transform.position, path[path.Length - 2]) > 0.5f && (thispartlength > 20)) |
|
{ |
|
AddInit(); |
|
} |
|
} |
|
//if (GetComponent<FireManWaterHoseManager>().OverLenght > 0) |
|
//{ |
|
// if (canreinit && path.Length > 1 && Vector3.Distance(transform.position, path[path.Length - 2]) > 0.5f && (thispartlength > GetComponent<FireManWaterHoseManager>().OverLenght)) |
|
// { |
|
// AddInit(); |
|
// } |
|
//} |
|
|
|
} |
|
private void DrawByTimespan() |
|
{ |
|
// waterHoseManage.WaterHoseLenghtRemain = waterHoseManage.NowRemainWaterHose * 20 - GetSelfConsumedLength();// + GetComponent<FireManWaterHoseManager>().OverLenght; |
|
if (remainlenght > 0) //如果装备了水带,并且有水带可用 |
|
{ |
|
HasHose(); |
|
GetBackCheck(); |
|
GetPath(); |
|
} |
|
|
|
else //没装备就原地不动 |
|
{ |
|
transform.position = endPoint; |
|
if (agent.destination != transform.position) |
|
{ |
|
//ResourceLoadWindow.Instance.LoadTextHintWindow("已无可用水带", 1); |
|
agent.SetDestination(endPoint); |
|
} |
|
canreinit = false; //即时超过20也不更新InitPoint |
|
GetBackCheck(); |
|
GetPath(); |
|
} |
|
// GetComponent<FireManWaterHoseManager>().WaterHoseLenghtRemain-=GetConsumedNum(); |
|
} |
|
private void DrawTail() |
|
{ |
|
Vector3 midPosition = (transform.Find("ConnectPos").position + shuiqiang.position) / 2; |
|
midPosition = new Vector3(midPosition.x, midPosition.y + 0.1f, midPosition.z); |
|
string linename = "waterhose-tail"; |
|
GameObject hose; |
|
if (!WaterHoses.transform.Find(linename)) |
|
{ |
|
hose = Instantiate(Resources.Load<GameObject>("Lines/" + bandtype), midPosition, Quaternion.identity) as GameObject; |
|
hose.name = linename; |
|
} |
|
else |
|
{ |
|
hose = WaterHoses.transform.Find(linename).gameObject; |
|
hose.transform.position = midPosition; |
|
} |
|
hose.transform.parent = WaterHoses.transform; |
|
hose.transform.forward = (shuiqiang.position - transform.position).normalized;//改变朝向 |
|
float distance = Vector3.Distance(transform.position, shuiqiang.position); |
|
hose.transform.localScale = new Vector3(25, 25, distance * 78);//延长线条,连接两点 |
|
} |
|
private void DestroyTail() |
|
{ |
|
if (WaterHoses.transform.Find("waterhose-tail")) |
|
{ |
|
Destroy(WaterHoses.transform.Find("waterhose-tail").gameObject); |
|
} |
|
} |
|
private void GetBackCheck() |
|
{ |
|
if (allInits.Count > 1) |
|
{ |
|
int i = allInits.Count - 1; |
|
if (pathCorners.ContainsKey(pathIndex - 1)) |
|
{ |
|
Vector3[] lastPath = pathCorners[pathIndex - 1]; |
|
if (lastPath.Length > 1) |
|
{ |
|
checkPoint = lastPath[lastPath.Length - 2]; //上一段路线的倒数第二点 |
|
float dc1 = Vector3.Distance(checkPoint, allInits[i]); |
|
float dcp = Vector3.Distance(checkPoint, transform.position); |
|
Vector3 _ic = checkPoint - allInits[i]; |
|
Vector3 _ip = transform.position - allInits[i]; |
|
float angle = Vector3.Angle(_ic, _ip); |
|
if (angle < 15 || dcp < dc1) |
|
{ |
|
//删除最后一个InitPoint为起点画的线,即第pathIndex段水带 |
|
List<int> intlist = pathMap[pathIndex]; |
|
foreach (int k in intlist) |
|
{ |
|
if (hoseDic.ContainsKey(k)) |
|
{ |
|
Destroy(hoseDic[k]); |
|
hoseDic.Remove(k); |
|
} |
|
lengthDic.Remove(k); |
|
} |
|
pathMap.Remove(pathIndex); |
|
pathCorners.Remove(pathIndex); |
|
pathIndex -= 1; |
|
InitPoint = allInits[i - 1]; //InitPoint退回上一个点 |
|
allInits.RemoveAt(i); //删除最后一个InitPoint |
|
canreinit = false; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
private void AddInit() |
|
{ |
|
InitPoint = transform.position; |
|
allInits.Add(InitPoint); |
|
pathIndex += 1; |
|
pathMap.Add(pathIndex, new List<int> { num }); |
|
} |
|
public void SetHoseFloorInfo(GameObject hose, Vector3 pos2) |
|
{ |
|
Vector3 adPos2 = new Vector3(pos2.x, pos2.y + 0.2f, pos2.z); |
|
Ray ray = new Ray(adPos2, -Vector3.up); |
|
RaycastHit hit = new RaycastHit(); |
|
if (Physics.Raycast(ray, out hit, LayerMask.NameToLayer("PathFinding"))) |
|
{ |
|
if (hit.transform.gameObject.GetComponent<CloneGameObjInfo>() && hit.transform.gameObject.GetComponent<CloneGameObjInfo>().gameObjType == CloneObjType.staticGameObject) |
|
{ |
|
CloneGameObjInfo hoseinfo = hose.GetComponent<CloneGameObjInfo>(); |
|
CloneGameObjInfo hitinfo = hit.transform.gameObject.GetComponent<CloneGameObjInfo>(); |
|
|
|
hoseinfo.buildNum = hitinfo.buildNum; |
|
hoseinfo.floorNum = hitinfo.floorNum; |
|
hoseinfo.interlayerNum = hitinfo.interlayerNum; |
|
//hoseinfo.UpdateFloorEnabled(GlobalVariable.CurrentFloor); |
|
return; |
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 收起管线 |
|
/// </summary> |
|
public void PickUpLayHose() |
|
{ |
|
//endPoint = Vector3.zero; |
|
//allInits.Clear(); |
|
//waterHoseManage.CalculateBeforelay(ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().RemainLenght, ParentLayHose.GetComponent<ParentLayWaterHoseMsg>().UseNum); |
|
//for (int i = 0; i < WaterHoses.transform.childCount; i++) |
|
//{ |
|
// Destroy(WaterHoses.transform.GetChild(i).gameObject); |
|
//} |
|
//waterHoseManage.FireRobotPickUpLayHose(HasUseNum); |
|
|
|
|
|
HasUseNum = 0; |
|
//remainlenght = waterHoseManage.WaterHoseLenghtRemain * waterHoseManage.OneDefaultHoseLenght; |
|
ParentLayHose = null; |
|
foreach (GameObject hose in hoseDic.Values) |
|
{ |
|
Destroy(hose);//删除所有已生成的水带段 |
|
} |
|
hoseDic.Clear(); //水带段字典清空 |
|
lengthDic.Clear(); //已用水带长度清空 |
|
pathMap.Clear(); |
|
num = 1; |
|
path = null; |
|
pathIndex = 0; |
|
flag = false; |
|
spraying = false; |
|
InitPoint = default(Vector3); |
|
endPoint = default(Vector3); |
|
checkPoint = default(Vector3); |
|
canreinit = true; |
|
allInits.Clear(); |
|
pathCorners.Clear(); |
|
DestroyTail(); |
|
//重置水源信息 |
|
waterHoseManage.ResetWaterSourceConnectInfo(false, false, false, null, null); |
|
} |
|
|
|
public void JugeLenght() |
|
{ |
|
if (ParentLayHose != null) |
|
{ |
|
if (ParentLayHose.GetComponent<ParentLayWaterHoseMsg>()) |
|
{ |
|
if (GetSelfConsumedLength() < 0.2f) |
|
{ |
|
foreach (GameObject hose in hoseDic.Values) |
|
{ |
|
Destroy(hose);//删除所有已生成的水带段 |
|
} |
|
hoseDic.Clear(); //水带段字典清空 |
|
lengthDic.Clear(); //已用水带长度清空 |
|
pathMap.Clear(); |
|
num = 1; |
|
path = null; |
|
pathIndex = 0; |
|
flag = false; |
|
spraying = false; |
|
InitPoint = default(Vector3); |
|
endPoint = default(Vector3); |
|
checkPoint = default(Vector3); |
|
canreinit = true; |
|
allInits.Clear(); |
|
pathCorners.Clear(); |
|
Destroy(ParentLayHose); |
|
} |
|
} |
|
} |
|
} |
|
}
|
|
|