using Vellum; namespace Annulus.Vellum { /// /// Saves a HexIndex as its two axial coordinates. /// public sealed class HexIndexConverter : SaveConverter { public const string QKey = "q"; public const string RKey = "r"; public override SaveNode Write(HexIndex value, SaveSession session) { SaveNode returnMe = SaveNode.NewTable(); returnMe.Entries[QKey] = session.ToNode(value.Q); returnMe.Entries[RKey] = session.ToNode(value.R); return returnMe; } public override HexIndex Read(SaveNode node, SaveSession session) { var reader = new SaveReader(node, session); int q = reader.Require(QKey); int r = reader.Require(RKey); return new HexIndex(q, r); } public override bool TryListChildren(SaveNode node, ChildList children) { // Everything it reads is built-in, and so left out. SaveNode ignored; return node.TryGetEntry(QKey, out ignored) && node.TryGetEntry(RKey, out ignored); } } }