79 lines
2.5 KiB
C#
79 lines
2.5 KiB
C#
using UnityEngine;
|
|
|
|
namespace ARLocation
|
|
{
|
|
public class NewPathLineRenderer : MonoBehaviour
|
|
{
|
|
public LocationPath Path;
|
|
public int MaxNumberOfUpdates = 4;
|
|
private ARLocationProvider locationProvider;
|
|
private LineRenderer lineRenderer;
|
|
private Transform arLocationRoot;
|
|
bool initialized;
|
|
int updateCount;
|
|
|
|
void Start()
|
|
{
|
|
#if UNITY_EDITOR
|
|
MaxNumberOfUpdates = 1;
|
|
#endif
|
|
}
|
|
|
|
public void Init(LocationPath path, LineRenderer renderer)
|
|
{
|
|
Path = path;
|
|
lineRenderer = renderer;
|
|
|
|
arLocationRoot = ARLocationManager.Instance.gameObject.transform;
|
|
|
|
initialized = true;
|
|
|
|
locationProvider = ARLocationProvider.Instance;
|
|
locationProvider.OnLocationUpdatedDelegate += locationUpdatedHandler;
|
|
if (locationProvider.IsEnabled) {
|
|
locationUpdatedHandler(locationProvider.CurrentLocation, locationProvider.CurrentLocation);
|
|
}
|
|
}
|
|
|
|
private void locationUpdatedHandler(LocationReading locationReading, LocationReading _)
|
|
{
|
|
if (!initialized || updateCount >= MaxNumberOfUpdates)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var points = new Vector3[Path.Locations.Length];
|
|
var cameraTransform = ARLocationManager.Instance.MainCamera.transform;
|
|
var location = locationReading.ToLocation();
|
|
|
|
for (int i = 0; i < points.Length; i++)
|
|
{
|
|
var loc = Path.Locations[i];
|
|
points[i] = Location.GetGameObjectPositionForLocation(arLocationRoot, ARLocationManager.Instance.MainCamera.transform, location, loc, true);
|
|
//points[i] = lineRenderer.gameObject.transform.worldToLocalMatrix.MultiplyPoint(points[i]);
|
|
points[i].y = points[i].z;
|
|
points[i].z = 0;
|
|
}
|
|
|
|
lineRenderer.useWorldSpace = false;
|
|
lineRenderer.positionCount = Path.Locations.Length;
|
|
lineRenderer.SetPositions(points);
|
|
lineRenderer.alignment = LineAlignment.TransformZ;
|
|
lineRenderer.gameObject.transform.localRotation = Quaternion.Euler(90, 0, 0);
|
|
|
|
updateCount++;
|
|
}
|
|
|
|
void Update()
|
|
{
|
|
if (!initialized)
|
|
{
|
|
return;
|
|
}
|
|
|
|
lineRenderer.gameObject.transform.localPosition = MathUtils.SetY(lineRenderer.gameObject.transform.localPosition, Camera.main.transform.position.y - 1.5f);
|
|
}
|
|
|
|
}
|
|
}
|