2021-06-09 16:43:27 +00:00
|
|
|
|
using System;
|
|
|
|
|
using static Matrix_App.GifGeneratorUtils;
|
|
|
|
|
|
2021-06-09 19:19:30 +00:00
|
|
|
|
namespace Matrix_App.PregeneratedMods
|
2021-06-09 16:43:27 +00:00
|
|
|
|
{
|
|
|
|
|
public class SimpleRainbow : MatrixGifGenerator
|
|
|
|
|
{
|
2021-06-09 19:19:30 +00:00
|
|
|
|
[UiDescription(title: "Radial", description: "Uses the angle to alter hues")]
|
2021-06-09 16:43:27 +00:00
|
|
|
|
public bool radial = false;
|
|
|
|
|
|
2021-06-09 19:19:30 +00:00
|
|
|
|
[UiDescription(title: "Saturation", description: "Overall saturation")]
|
2021-06-09 16:43:27 +00:00
|
|
|
|
public float saturation = 1.0f;
|
2021-06-09 19:19:30 +00:00
|
|
|
|
[UiDescription(title: "Brightness", description: "Overall brightness")]
|
2021-06-09 16:43:27 +00:00
|
|
|
|
public float value = 1.0f;
|
2021-06-09 19:19:30 +00:00
|
|
|
|
[UiDescription(title: "Hue rotation", description: "Offset for hue calculation")]
|
2021-06-09 16:43:27 +00:00
|
|
|
|
public float rotation = 0.0f;
|
|
|
|
|
|
|
|
|
|
protected override void ColorFragment(in int x, in int y,
|
|
|
|
|
in float u, in float v,
|
|
|
|
|
in int frame,
|
|
|
|
|
out float r, out float g, out float b)
|
|
|
|
|
{
|
|
|
|
|
if (radial)
|
|
|
|
|
{
|
|
|
|
|
CartesianToPolar(u - 0.5f, v - 0.5f, out float angle, out float _);
|
|
|
|
|
|
|
|
|
|
RgbFromHsv(AddHueOffset((angle + MathF.PI) / MathF.PI * 180.0f + frame / (float)totalFrames * 360.0f), saturation, value, out r, out g, out b);
|
|
|
|
|
} else
|
|
|
|
|
{
|
|
|
|
|
RgbFromHsv(AddHueOffset(u * 360.0f + frame / (float) (totalFrames + 0.001) * 360.0f), saturation, value, out r, out g, out b);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private float AddHueOffset(float hue)
|
|
|
|
|
{
|
|
|
|
|
return MathF.Abs(hue + rotation * 360) % 360.0f;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|