ThomagicRenderer/TreeStreamer.cs

37 lines
1.1 KiB
C#

using UnityEngine;
namespace Assets.ThoMagic.Renderer
{
public class TreeStreamer : InstanceStreamer
{
private readonly Terrain _terrain;
private Bounds worldBounds;
private float maxTreeDistance;
public TreeStreamer(Terrain terrain)
: base()
=> _terrain = terrain;
public void Build(float maxDistance)
{
maxTreeDistance = maxDistance;
Vector3 position = _terrain.GetPosition();
worldBounds = new Bounds(_terrain.terrainData.bounds.center + position, _terrain.terrainData.bounds.size);
}
public override bool IsInRange(Camera referenceCamera, Plane[] planes)
{
if (!_terrain.editorRenderFlags.HasFlag(TerrainRenderFlags.Trees))
return false;
var eyePos = referenceCamera.transform.position;
if ((eyePos - worldBounds.ClosestPoint(eyePos)).magnitude <= Mathf.Min(referenceCamera.farClipPlane, maxTreeDistance))
return true;
return false;
}
}
}