2
0

Degrees.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using System;
  2. namespace FF8
  3. {
  4. public struct Degrees
  5. {
  6. public readonly Int32 Angle360;
  7. public static Degrees FromAngle360(Int32 angle360) => new Degrees(angle360);
  8. public static Degrees FromAngle256(Int32 angle256)
  9. {
  10. if (angle256 < 0 || angle256 > 256)
  11. throw new ArgumentOutOfRangeException($"Angle {angle256} is out of range." +
  12. "Final Fantasy 8 uses 256 degree circles." +
  13. "Degrees 0 and 256 are defined as down, 64 right, 128 up, 192 left.", nameof(angle256));
  14. return new Degrees(angle256 * 360 / 256);
  15. }
  16. private Degrees(Int32 angle360)
  17. {
  18. Angle360 = angle360;
  19. }
  20. public override String ToString() => $"Angle: {Angle360}°";
  21. public override Int32 GetHashCode() => Angle360.GetHashCode();
  22. public override Boolean Equals(Object obj)
  23. {
  24. if (obj is Degrees degrees)
  25. return Angle360 == degrees.Angle360;
  26. return false;
  27. }
  28. public static Degrees operator -(Degrees angle)
  29. {
  30. return Degrees.FromAngle360(-angle.Angle360);
  31. }
  32. }
  33. }