riversong code showcase

This commit is contained in:
Daniele Marotta
2026-05-21 15:52:18 +02:00
commit 4c9eea1c02
462 changed files with 23406 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
namespace DanieleMarotta.RiversongCodeShowcase
{
public class GrassLodGameSystem : GameSystem, IUpdatable
{
[InjectService]
private GameConfig _config;
[InjectService]
private IScene _scene;
[InjectService]
private WorldRenderingState _renderingState;
public GrassLodGameSystem(IServiceLocator serviceLocator) : base(serviceLocator)
{
}
public void Update()
{
var grassConfig = _config.Terrain.GrassLODs;
var cropsConfig = _config.Terrain.CropsLODs;
foreach (var chunk in _renderingState.TerrainChunks)
{
SelectLOD(chunk.GrassLODs, grassConfig);
SelectLOD(chunk.CropsLODs, cropsConfig);
}
}
private void SelectLOD(TerrainChunk.RenderData[] lods, GameConfig.TerrainConfig.GrassLOD[] config)
{
// We can assume all LODs have almost the same center, so we just use the center of the first one
var position = lods[0].Renderer.bounds.center;
var viewSpacePosition = _scene.CinemachineCamera.transform.InverseTransformPoint(position);
var selectedLod = int.MaxValue;
for (var lod = 0; lod < config.Length; lod++)
if (viewSpacePosition.z < config[lod].Threshold)
{
selectedLod = lod;
break;
}
for (var lod = 0; lod < lods.Length; lod++) lods[lod].Renderer.enabled = lod == selectedLod;
}
}
}