/// <summary> /// Given a starting and destination hex direction, returns a multiplier you can /// apply to a radian velocity to rotate in the shortest direction to your target. /// </summary> /// <param name="from">The direction you are starting from</param> /// <param name="to">The direction you are heading to</param> /// <returns>-1.0f if clockwise is the shortest rotation to reach to, 1.0f otherwise. /// One of these is chosen randomly if from and to are opposites (e.g., north and /// south)</returns> public static float ShortestRotationDirection(HexDirection from, HexDirection to) { const float clockwise = -1.0f; const float anticlockwise = 1.0f; var clockwiseDist = (from.Ordinal() - to.Ordinal()).Mod(6); if (clockwiseDist < 3) { return(clockwise); } else if (clockwiseDist == 3) { return((_rng.Next(2) == 0) ? clockwise : anticlockwise); } else { return(anticlockwise); } }