mirror of
https://github.com/Facepunch/sbox-public.git
synced 2026-08-01 08:18:20 -04:00
* Re-categorize SoundscapeTrigger, IndirectLightVolume, and AmbientLight components. * Rename "Clutter Component" -> "Clutter Renderer" and add to "Rendering" category * Move CameraComponent into "Rendering" category * Move particle components into the "Effects" category
80 lines
1.5 KiB
C#
80 lines
1.5 KiB
C#
namespace Sandbox.Clutter;
|
|
|
|
/// <summary>
|
|
/// Clutter scattering component supporting both infinite and volumes.
|
|
/// </summary>
|
|
[Title( "Clutter Renderer" )]
|
|
[Category( "Rendering" )]
|
|
[Icon( "forest" )]
|
|
[EditorHandle( Icon = "forest" )]
|
|
public sealed partial class ClutterComponent : Component, Component.ExecuteInEditor
|
|
{
|
|
/// <summary>
|
|
/// Clutter generation mode.
|
|
/// </summary>
|
|
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
|
|
}
|
|
|
|
/// <summary>
|
|
/// The clutter containing objects to scatter and scatter settings.
|
|
/// </summary>
|
|
[Property]
|
|
public ClutterDefinition Clutter { get; set; }
|
|
|
|
/// <summary>
|
|
/// Seed for deterministic generation. Change to get different variations.
|
|
/// </summary>
|
|
[Property]
|
|
public int Seed { get; set; }
|
|
|
|
/// <summary>
|
|
/// Clutter generation mode - Volume or Infinite streaming.
|
|
/// </summary>
|
|
[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();
|
|
}
|
|
}
|
|
}
|