This repository has been archived on 2023-09-13. You can view files and clone it, but cannot push or open issues or pull requests.
station_obscurum_unity/Assets/Scripts/UI/WaypointMarker.cs

61 lines
1.6 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class WaypointMarker : MonoBehaviour
{
public Image pointer;
public Transform target;
public TMP_Text distanceMarker;
private Vector2 offset;
// Start is called before the first frame update
void Start()
{
offset = distanceMarker.transform.position - pointer.transform.position;
}
// Update is called once per frame
void Update()
{
float minX = pointer.GetPixelAdjustedRect().width / 2;
float maxX = Screen.width - minX;
float minY = pointer.GetPixelAdjustedRect().height / 2;
float maxY = Screen.height - minY;
Vector2 pos = Camera.main.WorldToScreenPoint(target.position);
if (Vector3.Dot(target.position - Camera.main.transform.position, Camera.main.transform.forward) < 0)
{
//target is behind player
if(pos.x < Screen.width / 2)
{
pos.x = maxX;
}
else
{
pos.x = minX;
}
}
pos.x = Mathf.Clamp(pos.x, minX, maxX);
pos.y = Mathf.Clamp(pos.y, minY, maxY);
pointer.transform.position = pos;
distanceMarker.text = Mathf.RoundToInt(Vector3.Distance(Camera.main.transform.position, target.transform.position)).ToString() + " meters";
if (pos.x < Screen.width / 2)
{
distanceMarker.transform.position = pos + offset;
}
else
{
distanceMarker.transform.position = pos - offset;
}
}
}