diff --git a/src/Static/Calc.bf b/src/Static/Calc.bf index 0b376ae..a70e19e 100644 --- a/src/Static/Calc.bf +++ b/src/Static/Calc.bf @@ -5,12 +5,14 @@ namespace Strawberry { static public class Calc { + //Move toward a target value without crossing it [Inline] static public float Approach(float value, float target, float maxDelta) { return value > target ? Math.Max(value - maxDelta, target) : Math.Min(value + maxDelta, target); } + //Convert from a value between arbitrary min and max to between 0 and 1 [Inline] static public float Map(float value, float oldMin, float oldMax) { @@ -18,28 +20,33 @@ namespace Strawberry } [Inline] + //Convert from a value between arbitrary min and max to between any other min and max static public float Map(float value, float oldMin, float oldMax, float newMin, float newMax) { return newMin + (newMax - newMin) * Map(value, oldMin, oldMax); } [Inline] + //Convert from a value between arbitrary min and max to between 0 and 1, and clamp it between 0 and 1 static public float ClampedMap(float value, float oldMin, float oldMax) { return Math.Clamp((value - oldMin) / (oldMax - oldMin), 0, 1); } [Inline] + //Convert from a value between arbitrary min and max to between any other min and max, and clamp it within that range static public float ClampedMap(float value, float oldMin, float oldMax, float newMin, float newMax) { return newMin + (newMax - newMin) * ClampedMap(value, oldMin, oldMax); } + [Inline] static public void Log() { Debug.WriteLine("***"); } + [Inline] static public void Log(T v) { String string = scope String; diff --git a/src/Struct/Cardinals.bf b/src/Struct/Cardinals.bf new file mode 100644 index 0000000..587a2d2 --- /dev/null +++ b/src/Struct/Cardinals.bf @@ -0,0 +1,70 @@ +namespace Strawberry +{ + public enum Cardinals + { + case Right; + case Down; + case Left; + case Up; + + public Cardinals Opposite() + { + switch (this) + { + case .Right: + return .Left; + case .Left: + return .Right; + case .Up: + return .Down; + case .Down: + return .Up; + } + } + + public Cardinals NextClockwise() + { + switch (this) + { + case .Right: + return .Down; + case .Left: + return .Up; + case .Up: + return .Right; + case .Down: + return .Left; + } + } + + public Cardinals NextCounterClockwise() + { + switch (this) + { + case .Right: + return .Up; + case .Left: + return .Down; + case .Up: + return .Left; + case .Down: + return .Right; + } + } + + static public implicit operator Point(Cardinals c) + { + switch (c) + { + case .Right: + return Point.Right; + case .Left: + return Point.Left; + case .Up: + return Point.Up; + case .Down: + return Point.Down; + } + } + } +}