110 lines
1.8 KiB
C#
110 lines
1.8 KiB
C#
namespace _2DGAMELIB
|
|
{
|
|
public class MotV
|
|
{
|
|
public double Value;
|
|
|
|
protected double min = -1.0;
|
|
|
|
protected double max = 1.0;
|
|
|
|
private double Frame;
|
|
|
|
private double FrameHalf;
|
|
|
|
private double MinFrameHalf;
|
|
|
|
public double BaseSpeed = 1.0;
|
|
|
|
public double GotoSpeed = 1.0;
|
|
|
|
public double RetuSpeed = 1.0;
|
|
|
|
public double Interval;
|
|
|
|
private long st;
|
|
|
|
public double LowestIncrease = 1.0;
|
|
|
|
private int s = 1;
|
|
|
|
private double d;
|
|
|
|
private double m;
|
|
|
|
public double Min
|
|
{
|
|
get
|
|
{
|
|
return min;
|
|
}
|
|
set
|
|
{
|
|
min = value;
|
|
SetFrame();
|
|
}
|
|
}
|
|
|
|
public double Max
|
|
{
|
|
get
|
|
{
|
|
return max;
|
|
}
|
|
set
|
|
{
|
|
max = value;
|
|
SetFrame();
|
|
}
|
|
}
|
|
|
|
public MotV(double Min, double Max)
|
|
{
|
|
min = Min;
|
|
max = Max;
|
|
SetFrame();
|
|
ResetValue();
|
|
}
|
|
|
|
private void SetFrame()
|
|
{
|
|
Frame = max - min;
|
|
FrameHalf = Frame * 0.5;
|
|
MinFrameHalf = Min + FrameHalf;
|
|
}
|
|
|
|
public void ResetValue()
|
|
{
|
|
Value = min;
|
|
}
|
|
|
|
private void Count(FPS FPS)
|
|
{
|
|
m = Frame / FPS.Value;
|
|
Value += (m * d + m * LowestIncrease) * BaseSpeed * ((s > 0) ? GotoSpeed : RetuSpeed) * (double)s;
|
|
}
|
|
|
|
public void GetValue(FPS FPS)
|
|
{
|
|
if (!((double)(FPS.sw.ElapsedMilliseconds - st) < Interval) && FPS.Value > 0.0)
|
|
{
|
|
d = (MinFrameHalf - Value) / FrameHalf;
|
|
d *= d.Sign();
|
|
d = d.Inverse();
|
|
Count(FPS);
|
|
if (Value >= max)
|
|
{
|
|
Value = max;
|
|
s = -s;
|
|
}
|
|
else if (Value <= min)
|
|
{
|
|
Value = min;
|
|
s = -s;
|
|
st = FPS.sw.ElapsedMilliseconds;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|