CultMath has no implicit conversions to or from Vector*, Quaternion or Color, so Assembly-CSharp converts explicitly with ToCultMath/ToUnity at each engine boundary: FieldDriver, GuidedProjectile(Manager), EntityInstance, ActionGameManager, HullCollider, GridObject, ShipInstance, ShieldManager, ItemPickup, FieldTester, PlaceUIElementWorldspace, MapMenuInput, MapRenderer, SectorRenderer and ZoneRenderer. CultMath math calls that were handed Unity vectors now take converted values; Vector3.Scale in FieldDriver becomes a float3 product, and ItemPickup's Vector3.Dot on float3s becomes dot. packages-lock.json records the cultmath git package at f0605367 and demotes com.unity.mathematics to a transitive dependency. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
42 lines
No EOL
1.3 KiB
C#
42 lines
No EOL
1.3 KiB
C#
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);
|
|
}
|
|
} |