37 lines
1.1 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|