WorldBuilder/Weather/Fog.cs
namespace Clover.WorldBuilder.Weather;

[Category( "Clover/Weather" )]
public class Fog : WeatherBase
{
	[Property] public ParticleEmitter Emitter { get; set; }

	[Property] public GradientFog Effect { get; set; }

	[Property] public VolumetricFogVolume Volume { get; set; }

	public override void SetEnabled( bool state, bool smooth = false )
	{
		base.SetEnabled( state, smooth );

		Emitter.Enabled = state;
		Effect.Enabled = state;
		Volume.Enabled = state;
	}

	public override void SetLevel( int level, bool smooth = false )
	{
		base.SetLevel( level, smooth );

		switch ( level )
		{
			case 0:
				Emitter.Enabled = false;
				Effect.Enabled = false;
				break;
			case 1:
				Emitter.Enabled = true;
				Effect.Enabled = true;
				Emitter.Rate = 1;
				Volume.Strength = 0.2f;
				break;
			case 2:
				Emitter.Enabled = true;
				Effect.Enabled = true;
				Emitter.Rate = 3;
				Volume.Strength = 0.3f;
				break;
			case 3:
				Emitter.Enabled = true;
				Effect.Enabled = true;
				Emitter.Rate = 5;
				Volume.Strength = 0.4f;
				break;
			case 4:
				Emitter.Enabled = true;
				Effect.Enabled = true;
				Emitter.Rate = 8;
				Volume.Strength = 0.6f;
				break;
			case 5:
				Emitter.Enabled = true;
				Effect.Enabled = true;
				Emitter.Rate = 12;
				Volume.Strength = 0.8f;
				break;
		}
	}

	protected override void OnFixedUpdate()
	{
		var col = NodeManager.TimeManager.CalculateFogColor();

		Effect.Color = col;
	}
}