Created field bubble shields / propulsion, currently just a prototype with its own test scene
41 lines
No EOL
1.3 KiB
C#
41 lines
No EOL
1.3 KiB
C#
using System;
|
|
using TMPro;
|
|
using Unity.Mathematics;
|
|
using UnityEngine;
|
|
using static Unity.Mathematics.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 = (float3) transform.position - ViewOrigin;
|
|
var toThis = normalize(diff);
|
|
var viewAngle = acos(Vector3.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);
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
ZoneRenderer?.DestroyLoot(this);
|
|
}
|
|
} |