118 lines
2.4 KiB
C#
118 lines
2.4 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Godot;
|
|
|
|
namespace Rokojori
|
|
{
|
|
[System.Serializable]
|
|
public class RangeDouble
|
|
{
|
|
public double min;
|
|
public double max;
|
|
|
|
public RangeDouble( double min, double max )
|
|
{
|
|
this.min = min;
|
|
this.max = max;
|
|
}
|
|
|
|
public void EnsureCorrectness()
|
|
{
|
|
if ( max < min )
|
|
{
|
|
var b = max; max = min; min = b;
|
|
}
|
|
}
|
|
|
|
public bool Contains( double value )
|
|
{
|
|
return min <= value && value <= max;
|
|
}
|
|
|
|
public bool Overlaps( RangeDouble other )
|
|
{
|
|
if ( other.max < min ) { return false; }
|
|
if ( other.min > max ) { return false; }
|
|
|
|
if ( other.Contains( min ) || other.Contains( max ) )
|
|
{
|
|
return true;
|
|
}
|
|
|
|
if ( Contains( min ) || Contains( max ) )
|
|
{
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public double center { get { return 0.5f * ( max + min ); } }
|
|
public double range { get { return max - min; } }
|
|
public double length { get { return max - min; } }
|
|
|
|
public double DistanceTo( RangeDouble other )
|
|
{
|
|
var center = this.center;
|
|
var otherCenter = other.center;
|
|
|
|
var RangeDouble = this.range;
|
|
var otherRangeDouble = other.range;
|
|
|
|
var distance = Mathf.Abs( center - otherCenter );
|
|
|
|
return Mathf.Max( 0, distance - 0.5f * ( RangeDouble + otherRangeDouble ) );
|
|
|
|
}
|
|
|
|
public RangeDouble Copy()
|
|
{
|
|
return new RangeDouble( min, max );
|
|
}
|
|
|
|
public double SampleAt( double normalized )
|
|
{
|
|
return min + ( max - min ) * normalized;
|
|
}
|
|
|
|
public static RangeDouble Of_01
|
|
{
|
|
get { return new RangeDouble( 0, 1 ); }
|
|
}
|
|
|
|
public static RangeDouble Of_Zero
|
|
{
|
|
get { return new RangeDouble( 0, 0 ); }
|
|
}
|
|
|
|
public static RangeDouble Of_One
|
|
{
|
|
get { return new RangeDouble( 1, 1 ); }
|
|
}
|
|
|
|
|
|
public static bool Contains( double min, double max, double value )
|
|
{
|
|
return min <= value && value <= max;
|
|
}
|
|
|
|
public static bool ContainsExclusive( double min, double max, double value )
|
|
{
|
|
return min < value && value < max;
|
|
}
|
|
|
|
public static bool ContainsExclusiveMax( double min, double max, double value )
|
|
{
|
|
return min <= value && value < max;
|
|
}
|
|
|
|
public static bool ContainsExclusiveMin( double min, double max, double value )
|
|
{
|
|
return min < value && value <= max;
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|