using Ariadne.UnitTests; using Vellum; namespace Ariadne.Vellum.UnitTests { public class PointConverter : SaveConverter { public override SaveNode Write(Point value, SaveSession session) { SaveNode returnMe = SaveNode.NewTable(); returnMe.Entries["x"] = session.ToNode(value.X, typeof(double)); returnMe.Entries["y"] = session.ToNode(value.Y, typeof(double)); return returnMe; } public override Point Read(SaveNode node, SaveSession session) { return new Point((double)session.FromNode(node.RequireEntry("x"), typeof(double)), (double)session.FromNode(node.RequireEntry("y"), typeof(double))); } } public class WaypointConverter : SaveConverter { public override SaveNode Write(Waypoint value, SaveSession session) { SaveNode returnMe = SaveNode.NewTable(); returnMe.Entries["name"] = session.ToNode(value.Name, typeof(string)); returnMe.Entries["at"] = session.ToNode(value.At, typeof(Point)); return returnMe; } public override Waypoint Read(SaveNode node, SaveSession session) { return new Waypoint { Name = (string)session.FromNode(node.RequireEntry("name"), typeof(string)), At = (Point)session.FromNode(node.RequireEntry("at"), typeof(Point)), }; } } /// /// A reference type holding an arc, and held by it. /// public class Entity { public string Name; public OwnedScript Mission; } public class EntityConverter : SaveConverter { public override SaveNode Write(Entity value, SaveSession session) { SaveNode returnMe = SaveNode.NewTable(); returnMe.Entries["name"] = session.ToNode(value.Name, typeof(string)); returnMe.Entries["mission"] = session.ToNode(value.Mission, typeof(OwnedScript)); return returnMe; } public override Entity Read(SaveNode node, SaveSession session) { var returnMe = new Entity(); session.Publish(node, returnMe); returnMe.Name = (string)session.FromNode(node.RequireEntry("name"), typeof(string)); returnMe.Mission = (OwnedScript)session.FromNode(node.RequireEntry("mission"), typeof(OwnedScript)); return returnMe; } } }