using System; using TMPro; using CultMath; using CultMath.UnityBridge; using UnityEngine; using static CultMath.math; public class ItemPickup : MonoBehaviour { public float LabelFadeDuration = .5f; public float LabelPersistDuration = 3; public float LabelDisplayAngle = 15; public float LabelDisplayMaxDistance = 500; public Transform ScanLabelContainer; public TextMeshPro ScanLabel; public ItemInstance Item { get; set; } public ZoneRenderer ZoneRenderer { get; set; } public float3 ViewOrigin { get; set; } public float3 ViewDirection { get; set; } private float _displayTime; private void Update() { var diff = transform.position.ToCultMath() - ViewOrigin; var toThis = normalize(diff); var viewAngle = acos(dot(toThis, ViewDirection)) * Mathf.Rad2Deg; if (length(diff) < LabelDisplayMaxDistance && viewAngle < LabelDisplayAngle) _displayTime = Time.time; var targetAlpha = Time.time - _displayTime < LabelPersistDuration ? 1 : 0; var c = ScanLabel.color; c.a = c.a + sign(targetAlpha - c.a) * (Time.deltaTime / LabelFadeDuration); ScanLabel.color = c; ScanLabelContainer.rotation = Quaternion.LookRotation((-toThis).ToUnity()); } private void OnDestroy() { ZoneRenderer?.DestroyLoot(this); } }