36 lines
1.4 KiB
C#
36 lines
1.4 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using Unheimlich.Features.Dialogue.UI;
|
|
|
|
namespace Unheimlich.Features.Hallucination
|
|
{
|
|
/// <summary>
|
|
/// Static registry that FloatingLabel instances self-register into on OnEnable/OnDisable.
|
|
/// Lets HallucinationManager iterate active labels in a radius without any FindObjectsOfType.
|
|
/// </summary>
|
|
public static class HallucinationLabelRegistry
|
|
{
|
|
private static readonly HashSet<FloatingLabel> _labels = new();
|
|
|
|
public static void Register(FloatingLabel label) => _labels.Add(label);
|
|
public static void Unregister(FloatingLabel label) => _labels.Remove(label);
|
|
|
|
/// <summary>
|
|
/// Returns all registered labels whose transform is within <paramref name="radius"/>
|
|
/// of <paramref name="center"/>. Results are written into <paramref name="results"/>
|
|
/// (which is cleared first) to avoid allocations per call.
|
|
/// </summary>
|
|
public static void GetLabelsInRadius(Vector3 center, float radius, List<FloatingLabel> results)
|
|
{
|
|
results.Clear();
|
|
float sqrRadius = radius * radius;
|
|
foreach (FloatingLabel label in _labels)
|
|
{
|
|
if (label == null) continue;
|
|
if ((label.transform.position - center).sqrMagnitude <= sqrRadius)
|
|
results.Add(label);
|
|
}
|
|
}
|
|
}
|
|
}
|