85 lines
1.8 KiB
C#
85 lines
1.8 KiB
C#
|
|
using Godot;
|
|
using System;
|
|
|
|
namespace Rokojori
|
|
{
|
|
public class CachedUINumber
|
|
{
|
|
public UIStyleNumberProperty property;
|
|
public string shaderPropertyName;
|
|
|
|
public bool isInt = false;
|
|
public float value = 0;
|
|
public int valueInt = 0;
|
|
public bool changed = false;
|
|
public int minInt = -1000000;
|
|
public int maxInt = 1000000;
|
|
|
|
public CachedUINumber SetMin( int min )
|
|
{
|
|
minInt = min;
|
|
return this;
|
|
}
|
|
|
|
|
|
|
|
public float alternative;
|
|
public float relative;
|
|
|
|
public static CachedUINumber AsFloat( UIStyleNumberProperty numberProperty, string shaderPropertyName = "" )
|
|
{
|
|
var n = new CachedUINumber();
|
|
n.property = numberProperty;
|
|
n.shaderPropertyName = shaderPropertyName;
|
|
n.alternative = 0;
|
|
return n;
|
|
}
|
|
|
|
public static CachedUINumber AsInt( UIStyleNumberProperty numberProperty, string shaderPropertyName = "" )
|
|
{
|
|
var n = new CachedUINumber();
|
|
n.property = numberProperty;
|
|
n.shaderPropertyName = shaderPropertyName;
|
|
n.alternative = 0;
|
|
n.isInt = true;
|
|
|
|
return n;
|
|
}
|
|
|
|
public static CachedUINumber AsInt( string shaderPropertyName )
|
|
{
|
|
return AsInt( UIStyleNumberProperty.FloatShaderProperty, shaderPropertyName );
|
|
}
|
|
|
|
public void Compute( Control control )
|
|
{
|
|
var nextValue = UINumber.Compute( control, property, shaderPropertyName, alternative, relative );
|
|
|
|
if ( isInt )
|
|
{
|
|
var nextInt = Mathf.Max( minInt, Mathf.RoundToInt( nextValue ) );
|
|
changed = nextInt != valueInt;
|
|
|
|
if ( changed )
|
|
{
|
|
valueInt = nextInt;
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
changed = value != nextValue;
|
|
|
|
if ( changed )
|
|
{
|
|
value = nextValue;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
} |