namespace Sandbox.Clutter;
///
/// Clutter scattering component supporting both infinite and volumes.
///
[Icon( "forest" )]
[EditorHandle( Icon = "forest" )]
public sealed partial class ClutterComponent : Component, Component.ExecuteInEditor
{
///
/// Clutter generation mode.
///
public enum ClutterMode
{
[Icon( "inventory_2" ), Description( "Scatter clutter within a defined volume" )]
Volume,
[Icon( "all_inclusive" ), Description( "Stream clutter infinitely around the camera" )]
Infinite
}
///
/// The clutter containing objects to scatter and scatter settings.
///
[Property]
public ClutterDefinition Clutter { get; set; }
///
/// Seed for deterministic generation. Change to get different variations.
///
[Property]
public int Seed { get; set; }
///
/// Clutter generation mode - Volume or Infinite streaming.
///
[Property]
public ClutterMode Mode
{
get => field;
set
{
if ( field == value ) return;
Clear();
field = value;
}
}
protected override void OnEnabled()
{
if ( Mode == ClutterMode.Volume )
{
RebuildVolumeLayer();
}
}
protected override void OnDisabled()
{
Clear();
}
protected override void OnUpdate()
{
if ( Mode == ClutterMode.Volume )
{
UpdateVolumeProgress();
}
}
protected override void DrawGizmos()
{
if ( Mode == ClutterMode.Volume )
{
DrawVolumeGizmos();
}
}
}