123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class WayFindingManager : MonoSingleton<WayFindingManager>
- {
- public Transform leftLine;
- public Transform rightLine;
- public Transform player;
- public Transform serverItem;
- private Transform oldServerItem;
- public LineRenderer line;
- public GameObject route;
- public Transform lookPoint;
- private List<GameObject> listRoot;
- private void Start()
- {
- listRoot = new List<GameObject>();
- }
- private void Update()
- {
- player.position = OpenXRCamera.Instance.head.position;
- if (serverItem != null&&Vector3.Distance(new Vector3(serverItem.position.x, 0, serverItem.position.z), new Vector3(OpenXRCamera.Instance.head.position.x, 0, OpenXRCamera.Instance.head.position.z)) < 1f)
- {
- line.positionCount = 0;
- oldServerItem = serverItem;
- serverItem = null;
- MachineRoomManager.Instance.RandomRange();
- }
- }
- public void SetServerItem( Transform serverItem)
- {
- this.serverItem = serverItem;
- if (oldServerItem != null && serverItem.localPosition.z == oldServerItem.localPosition.z)
- {
- line.positionCount = 2;
- line.SetPosition(0, new Vector3(oldServerItem.localPosition.x, 0, oldServerItem.localPosition.z+MachineRoomManager.Instance.data.cabinetW/2.0f+MachineRoomManager.Instance.data.intervalL/2.0f));
- line.SetPosition(1, new Vector3(serverItem.localPosition.x, 0, serverItem.localPosition.z + MachineRoomManager.Instance.data.cabinetW / 2.0f + MachineRoomManager.Instance.data.intervalL / 2.0f));
-
- }
- else
- {
- float leftDis = Vector3.Distance(new Vector3(player.localPosition.x, 0, player.localPosition.z), new Vector3(leftLine.localPosition.x, 0, leftLine.localPosition.z));
- float rightDis = Vector3.Distance(new Vector3(player.localPosition.x, 0, player.localPosition.z), new Vector3(rightLine.localPosition.x, 0, rightLine.localPosition.z));
- if (Mathf.Abs(leftDis) < Mathf.Abs(rightDis))
- {
- line.positionCount = 4;
- line.SetPosition(0, new Vector3(player.localPosition.x, 0, player.localPosition.z));
- line.SetPosition(1, new Vector3(leftLine.localPosition.x, 0, player.localPosition.z));
- line.SetPosition(2, new Vector3(leftLine.localPosition.x, 0, serverItem.localPosition.z + MachineRoomManager.Instance.data.cabinetW / 2.0f + MachineRoomManager.Instance.data.intervalL / 2.0f));
- line.SetPosition(3, new Vector3(serverItem.localPosition.x, 0, serverItem.localPosition.z + MachineRoomManager.Instance.data.cabinetW / 2.0f + MachineRoomManager.Instance.data.intervalL / 2.0f));
- }
- else
- {
- line.positionCount = 4;
- line.SetPosition(0, new Vector3(player.localPosition.x, 0, player.localPosition.z));
- line.SetPosition(1, new Vector3(rightLine.localPosition.x, 0, player.localPosition.z));
- line.SetPosition(2, new Vector3(rightLine.localPosition.x, 0, serverItem.localPosition.z));
- line.SetPosition(3, new Vector3(serverItem.localPosition.x, 0, serverItem.localPosition.z));
- }
- }
-
-
- }
- public void SetLine( Vector3 leftPos, Vector3 rightPos)
- {
- leftLine.localPosition = leftPos;
- rightLine.localPosition = rightPos;
- }
- public void NavigatorServer(MachineObj serverItem)
- {
- for (int i = 0; i < listRoot.Count; i++)
- {
- listRoot[i].SetActive(false);
- }
- listRoot.Clear();
- listRoot = new List<GameObject>();
- this.serverItem = serverItem.transform;
- if (Mathf.Abs(player.localPosition.z- serverItem.transform.localPosition.z) < (MachineRoomManager.Instance.data.intervalL/2.0f+MachineRoomManager.Instance.data.cabinetW/2.0f))
- {
- Vector3 pos1 = new Vector3(player.localPosition.x, 0, player.localPosition.z);
- Vector3 pos2 = new Vector3(serverItem.transform.localPosition.x, 0, serverItem.transform.localPosition.z + ((serverItem.isSingle ? 1 : -1) * 1));
- Vector3 pos3 = new Vector3(serverItem.door.localPosition.x, 0, serverItem.door.localPosition.z);
- List<Vector3> listPos = new List<Vector3>();
- listPos.Add(pos1);
- listPos.Add(pos2);
- listPos.Add(pos3);
- CreateRoute(listPos);
- }
- else
- {
- float leftDis = Vector3.Distance(new Vector3(player.localPosition.x, 0, player.localPosition.z), new Vector3(leftLine.localPosition.x, 0, leftLine.localPosition.z));
- float rightDis = Vector3.Distance(new Vector3(player.localPosition.x, 0, player.localPosition.z), new Vector3(rightLine.localPosition.x, 0, rightLine.localPosition.z));
- if (Mathf.Abs(leftDis) < Mathf.Abs(rightDis))
- {
- Vector3 pos1 = new Vector3(player.localPosition.x, 0, player.localPosition.z);
- Vector3 pos2 = new Vector3(leftLine.localPosition.x, 0, player.localPosition.z);
-
-
- Vector3 pos3 = new Vector3(leftLine.localPosition.x,0,serverItem.transform.localPosition.z + ((serverItem.isSingle ? 1 : -1) * 1));
- Vector3 pos4 = new Vector3(serverItem.transform.localPosition.x, 0, serverItem.transform.localPosition.z + ((serverItem.isSingle ? 1 : -1) * 1));
- List<Vector3> listpos = new List<Vector3>();
- listpos.Add(pos1);
- listpos.Add(pos2);
- listpos.Add(pos3);
- listpos.Add(pos4);
- listpos.Add(serverItem.transform.localPosition);
- CreateRoute(listpos);
- }
- else
- {
-
-
-
-
-
- Vector3 pos1 = new Vector3(player.localPosition.x, 0, player.localPosition.z);
- Vector3 pos2 = new Vector3(rightLine.localPosition.x, 0, player.localPosition.z);
-
-
- Vector3 pos3 = new Vector3(rightLine.localPosition.x, 0, serverItem.transform.localPosition.z + ((serverItem.isSingle ? 1 : -1) * 1));
- Vector3 pos4 = new Vector3(serverItem.transform.localPosition.x, 0, serverItem.transform.localPosition.z + ((serverItem.isSingle ? 1 : -1) * 1));
- List<Vector3> listpos = new List<Vector3>();
- listpos.Add(pos1);
- listpos.Add(pos2);
- listpos.Add(pos3);
- listpos.Add(pos4);
- listpos.Add(serverItem.transform.localPosition);
- CreateRoute(listpos);
- }
- }
- }
- private void CreateRoute(List<Vector3> listPos)
- {
- for (int i = 0; i < listPos.Count-1; i++)
- {
- GameObject route1 = GameObject.Instantiate(route, MachineRoomManager.Instance.transform);
- route1.transform.localPosition = listPos[i];
- lookPoint.localPosition = listPos[i + 1];
- route1.transform.LookAt(lookPoint);
- route1.SetActive(true);
- listRoot.Add(route1);
- }
- }
- public void NavigatorServer(List<MachineObj> listServerItem)
- {
- for (int i = 0; i < listRoot.Count; i++)
- {
- listRoot[i].SetActive(false);
- }
- listRoot.Clear();
- listRoot = new List<GameObject>();
- float leftDis = Vector3.Distance(new Vector3(player.localPosition.x, 0, player.localPosition.z), new Vector3(leftLine.localPosition.x, 0, leftLine.localPosition.z));
- float rightDis = Vector3.Distance(new Vector3(player.localPosition.x, 0, player.localPosition.z), new Vector3(rightLine.localPosition.x, 0, rightLine.localPosition.z));
- Vector3 pos1 = new Vector3(player.localPosition.x, 0, player.localPosition.z);
- Vector3 pos2;
- if(Mathf.Abs( leftDis)<Mathf.Abs( rightDis))
- {
- pos2 = new Vector3(leftLine.localPosition.x, 0, player.localPosition.z);
- }
- else
- {
- pos2 = new Vector3(rightLine.localPosition.x, 0, player.localPosition.z);
- }
- List<Vector3> listpos = new List<Vector3>();
- listpos.Add(pos1);
- listpos.Add(pos2);
- listpos.Add(new Vector3(rightLine.localPosition.x, 0, player.localPosition.z + 10000));
- CreateRoute(listpos);
- List<Vector3> listentrance = new List<Vector3>();
- for (int i = 0; i < listServerItem.Count; i++)
- {
- listpos.Clear();
- listpos.Add(new Vector3(listServerItem[i].transform.localPosition.x, 0, listServerItem[i].transform.localPosition.z + ((listServerItem[i].isSingle ? 1 : -1) * 1)));
- listpos.Add(listServerItem[i].transform.localPosition);
- CreateRoute(listpos);
- Vector3 entrance = new Vector3(Mathf.Abs(leftDis) < Mathf.Abs(rightDis)?leftLine.localPosition.x:rightLine.localPosition.x,0, listServerItem[i].transform.localPosition.z + ((listServerItem[i].isSingle ? 1 : -1) * 1));
- bool finish = true;
- for (int j = 0; j < listentrance.Count; j++)
- {
- if(entrance == listentrance[i])
- {
- finish = false;
- break;
- }
- }
- if(finish)
- {
- List<Vector3> listentrancePos = new List<Vector3>();
- listentrancePos.Add(entrance);
- listentrancePos.Add(new Vector3(listServerItem[i].transform.localPosition.x, 0, listServerItem[i].transform.localPosition.z + ((listServerItem[i].isSingle ? 1 : -1) * 1)));
- CreateRoute(listentrancePos);
- }
- }
- }
- }
- public class RouteTF
- {
- public Vector3 Pos { get; set; }
- public float AnglesY { get; set; }
- public RouteTF() { }
- public RouteTF(Vector3 pos)
- {
- this.Pos = pos;
- }
- }
|