Code/PostProcessing/WobbleEffect.cs
using Sandbox;
using Sandbox.Rendering;

namespace RedSnail.WaterTool;

[Title("Wobble Effect")]
[Category("Post Processing")]
[Icon("waves")]
public sealed class WobbleEffect : BasePostProcess<WobbleEffect>
{
	[Property, Range(0.1f, 100.0f)] private float Frequency { get; set; } = 20.0f;
	[Property, Range(0.1f, 10.0f)] private float Amplitude { get; set; } = 1.0f;
	[Property, Range(0.1f, 10.0f)] private float Speed { get; set; } = 1.0f;



	public override void Render()
	{
		float amplitude = GetWeighted(x => x.Amplitude);

		if (amplitude.AlmostEqual(0.0f))
			return;

		Attributes.Set("Frequency", Frequency);
		Attributes.Set("Amplitude", amplitude);
		Attributes.Set("Speed", Speed);

		Material shader = Material.FromShader("pp_wobble");
		BlitMode blit = BlitMode.WithBackbuffer(shader, Stage.BeforePostProcess, 70);
		Blit(blit, "Wobble Effect");
	}
}