static bool DeliverGateRoute(HttpListenerResponse response, string startSystem, string endSystem) { var start = LookupSystem(startSystem); var end = LookupSystem(endSystem); if (end == null) return false; var routeParams = new GateRouteParameters(); routeParams.RoutingOption = GateRouteOption.UseBridges; routeParams.ShipMass = 1f; var router = new GateRouter(routeParams); List<Vertex> path; router.GetShortestPath(start, end, out path); if (path.Count == 0) return false; response.ContentType = "text/plain"; var b = new StringBuilder(); b.Append("{\"route\": [\n"); foreach (var jump in path) { b.Append("{"); b.Append("\"name\":\"").Append(jump.SolarSystem.Name).Append("\","); b.Append("\"id\":\"").Append(jump.SolarSystem.ID).Append("\","); b.Append("\"type\":\"").Append(jump.JumpType).Append("\""); if (jump.JumpType == JumpType.Bridge) { b.Append(",\"pos\":\"").Append(jump.Bridge.Pos.Planet).Append("-").Append(jump.Bridge.Pos.Moon).Append("\""); } b.Append("}"); if (jump != path[path.Count - 1]) b.Append(",\n"); } b.Append("] }"); response.ContentType = "application/json"; RespondWith(response, b.ToString()); return true; }
static string GenerateRoute(string nameStart, string nameEnd) { var start = LookupSystem(nameStart); var end = LookupSystem(nameEnd); if (end == null) return null; var routeParams = new GateRouteParameters(); routeParams.RoutingOption = GateRouteOption.UseBridges; routeParams.ShipMass = 1f; var router = new GateRouter(routeParams); List<Vertex> path; router.GetShortestPath(start, end, out path); var b = new StringBuilder(); foreach (var v in path) { var s = v.SolarSystem; b.Append(string.Format("{0}:{1}", s.ID, s.Name)); if (v.JumpType == JumpType.Bridge) { var p = v.Bridge.Pos; b.Append(string.Format(" @ {0}-{1}", p.Planet, p.Moon)); } b.Append('\n'); } return b.ToString(); }