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;
}