Files
Enigmos/Manual/ModuleRealValueParameterSetter.cs
2024-07-10 07:02:11 +01:00

95 lines
2.1 KiB
C#

using Godot;
using Nocturnis;
using Nocturnis.DataStructures.ConfigurableParameters;
namespace Enigmos.Manual;
public partial class ModuleRealValueParameterSetter : ModuleParameterSetter, ISceneConcept
{
public void Init(IDoubleParameter parameter)
{
UnderlyingParameter = parameter;
InitFlag = true;
}
/// <summary>
/// Underlying Parameter must be set before ready
/// </summary>
public new IDoubleParameter UnderlyingParameter
{
get => (base.UnderlyingParameter as IDoubleParameter)!;
set => base.UnderlyingParameter = value;
}
private HSlider SliderSetter { get; set; }
private SpinBox SpinSetter { get; set; }
private double MinValue
{
get => SliderSetter.MinValue;
set
{
SliderSetter.MinValue = value;
SpinSetter.MinValue = value;
}
}
private double MaxValue
{
get => SliderSetter.MaxValue;
set
{
SliderSetter.MaxValue = value;
SpinSetter.MaxValue = value;
}
}
private double Step
{
get => SliderSetter.Step;
set
{
SliderSetter.Step = value;
SpinSetter.Step = value;
}
}
private Label MaxLabel { get; set; }
private Label MinLabel { get; set; }
private double Value
{
get => SliderSetter.Value;
set
{
SliderSetter.Value = value;
SpinSetter.Value = value;
}
}
public override void _Ready()
{
if (!InitFlag)
throw new Exception("TODO - NEED INIT");
SliderSetter = GetNode<HSlider>("SliderSetter");
SpinSetter = GetNode<SpinBox>("SpinSetter");
MaxLabel = GetNode<Label>("MaxLabel");
MinLabel = GetNode<Label>("MinLabel");
MinValue = UnderlyingParameter.MinValue;
MaxValue = UnderlyingParameter.MaxValue;
Step = UnderlyingParameter.Step;
Value = UnderlyingParameter.ParameterValue;
MaxLabel.Text = $"{MaxValue:F3}";
MinLabel.Text = $"{MinValue:F3}";
base._Ready();
}
private void SpinValueUpdateHandler(double val)
{
if (!SliderSetter.Value.Equals(val))
SliderSetter.Value = val;
UnderlyingParameter.ParameterValue = val;
}
private void SliderValueUpdateHandler(double val)
{
if (!SpinSetter.Value.Equals(val))
SpinSetter.Value = val;
UnderlyingParameter.ParameterValue = val;
}
}