mirror of
https://github.com/Ellpeck/MLEM.git
synced 2024-11-26 14:38:34 +01:00
allow for RotateBy, RotateCw and RotateCcw to accept invalid directions again
This commit is contained in:
parent
bb189261d7
commit
ee2b0b82fe
1 changed files with 14 additions and 4 deletions
|
@ -194,7 +194,9 @@ namespace MLEM.Misc {
|
||||||
/// <param name="fortyFiveDegrees">Whether to rotate by 45 degrees. If this is false, the rotation is 90 degrees instead.</param>
|
/// <param name="fortyFiveDegrees">Whether to rotate by 45 degrees. If this is false, the rotation is 90 degrees instead.</param>
|
||||||
/// <returns>The rotated direction</returns>
|
/// <returns>The rotated direction</returns>
|
||||||
public static Direction2 RotateCw(this Direction2 dir, bool fortyFiveDegrees = false) {
|
public static Direction2 RotateCw(this Direction2 dir, bool fortyFiveDegrees = false) {
|
||||||
return Clockwise[(ClockwiseLookup[dir] + (fortyFiveDegrees ? 1 : 2)) % Clockwise.Length];
|
if (!ClockwiseLookup.TryGetValue(dir, out var dirIndex))
|
||||||
|
return None;
|
||||||
|
return Clockwise[(dirIndex + (fortyFiveDegrees ? 1 : 2)) % Clockwise.Length];
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -204,7 +206,9 @@ namespace MLEM.Misc {
|
||||||
/// <param name="fortyFiveDegrees">Whether to rotate by 45 degrees. If this is false, the rotation is 90 degrees instead.</param>
|
/// <param name="fortyFiveDegrees">Whether to rotate by 45 degrees. If this is false, the rotation is 90 degrees instead.</param>
|
||||||
/// <returns>The rotated direction</returns>
|
/// <returns>The rotated direction</returns>
|
||||||
public static Direction2 RotateCcw(this Direction2 dir, bool fortyFiveDegrees = false) {
|
public static Direction2 RotateCcw(this Direction2 dir, bool fortyFiveDegrees = false) {
|
||||||
var index = ClockwiseLookup[dir] - (fortyFiveDegrees ? 1 : 2);
|
if (!ClockwiseLookup.TryGetValue(dir, out var dirIndex))
|
||||||
|
return None;
|
||||||
|
var index = dirIndex - (fortyFiveDegrees ? 1 : 2);
|
||||||
return Clockwise[index < 0 ? index + Clockwise.Length : index];
|
return Clockwise[index < 0 ? index + Clockwise.Length : index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -244,10 +248,16 @@ namespace MLEM.Misc {
|
||||||
/// <param name="start">The direction to use as the default direction</param>
|
/// <param name="start">The direction to use as the default direction</param>
|
||||||
/// <returns>The direction, rotated by the reference direction</returns>
|
/// <returns>The direction, rotated by the reference direction</returns>
|
||||||
public static Direction2 RotateBy(this Direction2 dir, Direction2 reference, Direction2 start = Up) {
|
public static Direction2 RotateBy(this Direction2 dir, Direction2 reference, Direction2 start = Up) {
|
||||||
var diff = ClockwiseLookup[reference] - ClockwiseLookup[start];
|
if (!ClockwiseLookup.TryGetValue(reference, out var refIndex))
|
||||||
|
return None;
|
||||||
|
if (!ClockwiseLookup.TryGetValue(start, out var startIndex))
|
||||||
|
return None;
|
||||||
|
if (!ClockwiseLookup.TryGetValue(dir, out var dirIndex))
|
||||||
|
return None;
|
||||||
|
var diff = refIndex - startIndex;
|
||||||
if (diff < 0)
|
if (diff < 0)
|
||||||
diff += Clockwise.Length;
|
diff += Clockwise.Length;
|
||||||
return Clockwise[(ClockwiseLookup[dir] + diff) % Clockwise.Length];
|
return Clockwise[(dirIndex + diff) % Clockwise.Length];
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue