Aetheria/Assets/Scripts/Gameplay/HullCollider.cs

65 lines
1.6 KiB
C#
Raw Normal View History

2021-01-05 02:56:17 +00:00
using UnityEngine;
public class HullCollider : MonoBehaviour
{
2026-06-21 09:37:54 +01:00
private Renderer[] _renderers;
2021-01-05 02:56:17 +00:00
public Entity Entity { get; set; }
2026-06-21 09:37:54 +01:00
public Bounds YmirBounds => CalculateBounds(transform.position);
public float YmirPlanarRadius => Mathf.Max(YmirBounds.extents.x, YmirBounds.extents.z, 0.001f);
public void RefreshYmirBoundsSource()
2021-01-05 02:56:17 +00:00
{
2026-06-21 09:37:54 +01:00
_renderers = GetComponentsInChildren<Renderer>();
2021-01-05 02:56:17 +00:00
}
2026-06-21 09:37:54 +01:00
private void Awake()
{
2026-06-21 09:37:54 +01:00
RefreshYmirBoundsSource();
}
2026-06-21 09:37:54 +01:00
private void OnEnable()
{
2026-06-21 09:37:54 +01:00
if (_renderers == null || _renderers.Length == 0)
RefreshYmirBoundsSource();
}
2026-06-21 09:37:54 +01:00
private Bounds CalculateBounds(Vector3 fallbackCenter)
2021-01-05 02:56:17 +00:00
{
2026-06-21 09:37:54 +01:00
if (_renderers == null)
RefreshYmirBoundsSource();
if (_renderers == null || _renderers.Length == 0)
return new Bounds(fallbackCenter, Vector3.one);
var firstRenderer = FirstLiveRenderer();
if (firstRenderer == null)
return new Bounds(fallbackCenter, Vector3.one);
var bounds = firstRenderer.bounds;
for (var i = 0; i < _renderers.Length; i++)
{
var renderer = _renderers[i];
if (renderer == null || renderer == firstRenderer)
continue;
bounds.Encapsulate(renderer.bounds);
}
return bounds;
2021-01-05 02:56:17 +00:00
}
2026-06-21 09:37:54 +01:00
private Renderer FirstLiveRenderer()
{
2026-06-21 09:37:54 +01:00
for (var i = 0; i < _renderers.Length; i++)
{
if (_renderers[i] != null)
return _renderers[i];
}
return null;
}
2026-06-21 09:37:54 +01:00
}