WorldBuilder/Weather/Rain.cs
using System;
using Sandbox.Audio;

namespace Clover.WorldBuilder.Weather;

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

	[Property] public SoundPointComponent Sound { get; set; }

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

		if ( Sound.Enabled )
		{
			Sound.TargetMixer = NodeManager.WeatherManager.IsInside
				? Mixer.FindMixerByName( "WeatherInside" )
				: Mixer.FindMixerByName( "WeatherOutside" );
		}
	}

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

		switch ( level )
		{
			case 0:
				Emitter.Enabled = false;
				break;
			case 1:
				Emitter.Enabled = true;
				Emitter.Rate = 100;
				break;
			case 2:
				Emitter.Enabled = true;
				Emitter.Rate = 200;
				break;
			case 3:
				Emitter.Enabled = true;
				Emitter.Rate = 300;
				break;
			case 4:
				Emitter.Enabled = true;
				Emitter.Rate = 400;
				break;
			case 5:
				Emitter.Enabled = true;
				Emitter.Rate = 500;
				break;
		}
	}

	public void SetWind( float direction, float windSpeed )
	{
		Emitter.GetComponent<ParticleEffect>().ForceDirection = new Vector3(
			MathF.Cos( direction ) * (windSpeed * 50f),
			MathF.Sin( direction ) * (windSpeed * 50f),
			-400f );
	}
}