using System.Globalization; using AcDream.Core.Physics; namespace AcDream.Core.Ui; /// Retail text formatting for world positions and outdoor cells. public static class RetailPositionFormatter { /// /// Verbatim field order and precision from /// Position::ToString @ 0x005A9330. /// public static string Format(Position position) { var p = position.Frame.Origin; var q = position.Frame.Orientation; return string.Create(CultureInfo.InvariantCulture, $"0x{position.ObjCellId:X8} [{p.X:F6} {p.Y:F6} {p.Z:F6}] " + $"{q.W:F6} {q.X:F6} {q.Y:F6} {q.Z:F6}"); } /// /// Port of LandDefs::CellidToCoordinateString @ 0x005A9CB0. /// Returns null for indoor/invalid cells, matching the underlying /// gid_to_lcoord failure. /// public static string? FormatOutdoorCell(uint cellId) => RadarCoordinates.TryFromCell(cellId, out var coordinates) ? coordinates.CombinedText : null; }