private static void export() { var sb = new StringBuilder(); var cells = new Cell.Map<string>(MapOverlay.GridLevel); foreach (var cell in Cell.AtLevel(MapOverlay.GridLevel)) { var pos = cell.Position; var lat = (float)(Math.Atan2(pos.y, Math.Sqrt(pos.x * pos.x + pos.z * pos.z)) * 180 / Math.PI); var lon = (float)(Math.Atan2(pos.z, pos.x) * 180 / Math.PI); cells[cell] = String.Format(CultureInfo.InvariantCulture, "{0},{1},{2},{3},{4},{5},", cell.Index, lat, lon, pos.x, pos.y, pos.z); } sb.AppendLine("body,resource,cellId,lat,lon,x,y,z,scanned,quantity"); foreach (var body in FlightGlobals.Bodies) { foreach (var resource in KethaneController.ResourceDefinitions) { foreach (var cell in Cell.AtLevel(MapOverlay.GridLevel)) { var scanned = KethaneData.Current.Scans[resource.Resource][body.name][cell]; var deposit = KethaneData.Current.GetCellDeposit(resource.Resource, body, cell); sb.Append(String.Format("{0},{1},", body.name, resource.Resource)); sb.Append(cells[cell]); sb.Append(scanned ? "true" : "false"); if ((revealAll || scanned) && deposit != null) { sb.Append(String.Format(CultureInfo.InvariantCulture, ",{0}", deposit.Quantity)); } else { sb.Append(","); } sb.AppendLine(); } } } KSP.IO.File.WriteAllText<KethaneController>(sb.ToString(), "kethane_export.csv"); }
private TerrainData(CelestialBody body) { if (body.pqsController == null) { throw new ArgumentException("Body doesn't have a PQS controller"); } heightRatios = new Cell.Map<float>(MapOverlay.GridLevel, c => (float)(body.pqsController.GetSurfaceHeight(c.Position) / body.pqsController.radius)); }