public void Convert(DATFile datFile, TSCFile tscFile, TOCFile tocFile)
        {
            this.datFile = datFile;

            tscFile.ICAO             = datFile.AirportHeader.ICAOCode;
            tscFile.AirportLongName  = datFile.AirportHeader.Name;
            tscFile.AirportShortName = datFile.AirportHeader.Name;

            if (datFile.LandRunways != null)
            {
                foreach (var landRunway in datFile.LandRunways)
                {
                    TSCRunway runway = new TSCRunway();
                    runway.Width = landRunway.Width;

                    runway.End1 = new TSCRunwayEnd();
                    runway.End2 = new TSCRunwayEnd();

                    ConvertRunwayEnd(runway.End1, landRunway.End1);
                    ConvertRunwayEnd(runway.End2, landRunway.End2);

                    tscFile.Runways.Add(runway);
                }
            }

            tscFile.Location = this.CalculateAirportCenterPoint();


            var airportNameClean = tscFile.AirportShortName.Replace(" ", "_").ToLower();

            // Add the runway object
            TSCSceneryObject runwayObject = new TSCSceneryObject();

            runwayObject.GeometryFile = String.Format("{0}_{1}_rwy", tscFile.ICAO.ToLower(), airportNameClean);
            runwayObject.Position     = new GeoCoordinate3d(tscFile.Location);
            runwayObject.Type         = "ground";

            // Add the decals object
            TSCSceneryObject decalObject = new TSCSceneryObject();

            decalObject.GeometryFile = String.Format("{0}_{1}_decal", tscFile.ICAO.ToLower(), airportNameClean);
            decalObject.Position     = new GeoCoordinate3d(tscFile.Location);
            decalObject.Type         = "decal";

            tscFile.Objects.Add(runwayObject);
            tscFile.Objects.Add(decalObject);
        }
Ejemplo n.º 2
0
 public void Convert(DSFFile dsfFile, TSCFile tscFile, TOCFile tocFile)
 {
     this.dsfFile = dsfFile;
 }
 public override void GenerateScripts(string icao, DATFile datFile, DSFFile dsfFile, TSCFile tscFile, string outputFolder, string texturesFolder)
 {
     throw new NotImplementedException();
 }
        public void GenerateAirportCsvList(AirportList airportList)
        {
            var csvFile = XP2AFSConverterManager.Settings.XP2AFSConverterFolder + @"airports.csv";
            var writer  = new StreamWriter(csvFile);
            var csv     = new CsvWriter(writer);

            csv.WriteHeader <AirportCsvListItem>();
            csv.NextRecord();

            int i = 0;

            foreach (var airport in airportList.Airports)
            {
                // Exclude sea runways, closed runways and helipads
                if (!airport.AirportName.StartsWith("[S]") &&
                    !airport.AirportName.StartsWith("[X]") &&
                    !airport.AirportName.StartsWith("[H]"))
                {
                    var airportXPFullDirectory = DirectoryHelper.GetAirportXPFullDirectory(airport.AirportCode, XP2AFSConverterManager.Settings);
                    var airportZipFilename     = airportXPFullDirectory + @"\" + airport.AirportCode + ".zip";
                    var airportFilename        = airportXPFullDirectory + @"\airport.xml";
                    var airportSceneryFilename = airportXPFullDirectory + @"\scenery.xml";

                    if (File.Exists(airportZipFilename))
                    {
                        //if (airport.AirportCode == "")

                        log.InfoFormat("Adding airport {0} of {1}", i + 1, airportList.Airports.Count);
                        // Parse the DST and DAT files
                        var datFileLoader = new DATFileLoader();
                        var datFile       = datFileLoader.GetDATFileFromXPZip(airport.AirportCode, airportZipFilename);
                        //var dsfFile = this.GetDSFFileFromXPZip(airport.AirportCode, airportZipFilename);
                        var sceneryFile = DeserializeSceneryFile(airportSceneryFilename);

                        // Create empty AFS files
                        var tscFile = new TSCFile();
                        var tocFile = new TOCFile();

                        var datConverter = new DATConverter();
                        // Convert the X-Plane files
                        datConverter.Convert(datFile, tscFile, tocFile);

                        if (datFile.AirportHeader.AirportType == AirportType.Airport && datFile.LandRunways != null)
                        {
                            TextInfo textInfo = new CultureInfo("en-US", false).TextInfo;

                            AirportCsvListItem airportListItem = new AirportCsvListItem();
                            airportListItem.Code      = airport.AirportCode;
                            airportListItem.Name      = textInfo.ToTitleCase(airport.AirportName.ToLower());
                            airportListItem.IsHelipad = false;

                            if (datFile.MetadataLookup.ContainsKey("datum_lat"))
                            {
                                double lat;
                                if (Double.TryParse(datFile.MetadataLookup["datum_lat"], out lat))
                                {
                                    airportListItem.Latitude = lat;
                                }
                            }

                            if (datFile.MetadataLookup.ContainsKey("datum_lon"))
                            {
                                double lon;
                                if (Double.TryParse(datFile.MetadataLookup["datum_lon"], out lon))
                                {
                                    airportListItem.Longitude = lon;
                                }
                            }

                            if (datFile.MetadataLookup.ContainsKey("country"))
                            {
                                airportListItem.Country = datFile.MetadataLookup["country"];
                            }

                            if (datFile.MetadataLookup.ContainsKey("state"))
                            {
                                airportListItem.Region = datFile.MetadataLookup["state"];
                            }

                            if (datFile.MetadataLookup.ContainsKey("city"))
                            {
                                airportListItem.City = datFile.MetadataLookup["city"];
                            }

                            if (datFile.MetadataLookup.ContainsKey("region_code"))
                            {
                                airportListItem.RegionCode = datFile.MetadataLookup["region_code"];
                            }

                            if (datFile.MetadataLookup.ContainsKey("icao_code"))
                            {
                                airportListItem.ICAO = datFile.MetadataLookup["icao_code"];
                            }

                            if (datFile.MetadataLookup.ContainsKey("iata_code"))
                            {
                                airportListItem.IATA = datFile.MetadataLookup["iata_code"];
                            }

                            if (datFile.MetadataLookup.ContainsKey("faa_code"))
                            {
                                airportListItem.FAACode = datFile.MetadataLookup["faa_code"];
                            }

                            if (datFile.Pavements == null || datFile.Pavements.Count == 0)
                            {
                                airportListItem.HasPavements = false;
                            }
                            else
                            {
                                airportListItem.HasPavements = true;
                            }

                            if (sceneryFile.Type == "3D")
                            {
                                airportListItem.Is3D = true;
                            }
                            else
                            {
                                airportListItem.Is3D = false;
                            }

                            foreach (var runway in datFile.LandRunways)
                            {
                                airportListItem.RunwaySurfaceType = (int)runway.SurfaceType;
                            }

                            airportListItem.RunwayCount = datFile.LandRunways.Count;

                            // If we couldn't get a value from the metadata we need to get it elsewhere
                            if (!airportListItem.Latitude.HasValue || !airportListItem.Longitude.HasValue)
                            {
                                airportListItem.Latitude  = tscFile.Location.Latitude;
                                airportListItem.Longitude = tscFile.Location.Longitude;
                            }

                            csv.WriteRecord(airportListItem);
                            csv.NextRecord();
                        }
                    }
                    else
                    {
                        log.ErrorFormat("Could not find the data for airport {0} make sure it is downloaded", airport.AirportCode);
                    }
                }

                i++;
            }

            writer.Flush();
            writer.Close();
            writer = null;
        }
        public override void GenerateScripts(string icao, DATFile datFile, DSFFile dsfFile, TSCFile tscFile, string outputFolder, string texturesFolder)
        {
            this.icao    = icao;
            this.datFile = datFile;
            this.dsfFile = dsfFile;
            this.tscFile = tscFile;

            var maxScriptFilePath = AppDomain.CurrentDomain.BaseDirectory + "\\ScriptGenerators\\ScriptTemplates\\MaxScript.liquid";
            var maxScript         = File.ReadAllText(maxScriptFilePath);

            var scriptModel = new ScriptModel();

            this.CalculateRunways(scriptModel);
            this.CalculateDATFilePavements(scriptModel);
            this.CalculateDSFFileBuildings(scriptModel);
            this.CalculateAirportBoundary(scriptModel);

            scriptModel.AirportName  = datFile.AirportHeader.Name;
            scriptModel.AirportICAO  = datFile.AirportHeader.ICAOCode;
            scriptModel.GeneratedOn  = DateTime.UtcNow;
            scriptModel.SaveFilePath = (outputFolder + @"\Input\" + icao + ".max").Replace(@"\", @"\\");;
            scriptModel.TexturesPath = (texturesFolder + @"\").Replace(@"\", @"\\");

            Template template = Template.Parse(maxScript);

            Template.NamingConvention = new CSharpNamingConvention();
            var maxScriptFinal = template.Render(Hash.FromAnonymousObject(scriptModel));

            var outputFilePath = outputFolder + @"\Input\" + icao + ".py";

            File.WriteAllText(outputFilePath, maxScriptFinal);
        }
 public abstract void GenerateScripts(string icao, DATFile datFile, DSFFile dsfFile, TSCFile tscFile, string outputFolder, string texturesFolder);
        private void ConvertAirport(string icaoCode)
        {
            log.InfoFormat("Converting {0}", icaoCode);

            var airportXPFullDirectory = DirectoryHelper.GetAirportXPFullDirectory(icaoCode, XP2AFSConverterManager.Settings);
            var airportZipFilename     = airportXPFullDirectory + @"\" + icaoCode + ".zip";
            var airportFilename        = airportXPFullDirectory + @"\airport.xml";
            var airportSceneryFilename = airportXPFullDirectory + @"\scenery.xml";

            var airportAFSFullDirectory = DirectoryHelper.GetAirportAFSFullDirectory(icaoCode, XP2AFSConverterManager.Settings);

            // Make sure the 'input' folder exists
            if (!Directory.Exists(airportAFSFullDirectory + @"\Input"))
            {
                Directory.CreateDirectory(airportAFSFullDirectory + @"\Input");
            }

            var tscFilename = airportAFSFullDirectory + @"\Input\" + icaoCode + ".tsc";
            var tocFilename = airportAFSFullDirectory + @"\Input\" + icaoCode + ".toc";
            var tmcFilename = airportAFSFullDirectory + @"\Input\" + icaoCode + ".tmc";

            if (File.Exists(airportZipFilename))
            {
                // Parse the DST and DAT files
                var datFileLoader = new DATFileLoader();
                var dsfFileLoader = new DSFFileLoader();
                var datFile       = datFileLoader.GetDATFileFromXPZip(icaoCode, airportZipFilename);
                var dsfFile       = dsfFileLoader.GetDSFFileFromXPZip(icaoCode, airportZipFilename);

                // Create empty AFS files
                var tscFile = new TSCFile();
                var tocFile = new TOCFile();
                var tmcFile = new TMCFile();

                // Convert the X-Plane files
                this.datConverter.Convert(datFile, tscFile, tocFile);
                this.dsfConverter.Convert(dsfFile, tscFile, tocFile);

                // Update the TMC file
                this.UpdateTMCFile(tmcFile, airportAFSFullDirectory);

                // Get strings of the AFS files
                var tscFileString = tscFile.ToString();
                var tocFileString = tocFile.ToString();
                var tmcFileString = tmcFile.ToString();

                if (!Directory.Exists(airportAFSFullDirectory))
                {
                    Directory.CreateDirectory(airportAFSFullDirectory);
                }

                // Write the AFS files
                File.WriteAllText(tscFilename, tscFileString);
                File.WriteAllText(tocFilename, tocFileString);
                File.WriteAllText(tmcFilename, tmcFileString);

                var maxScriptGenerator = new MaxScriptGenerator();
                maxScriptGenerator.GenerateScripts(icaoCode, datFile, dsfFile, tscFile, airportAFSFullDirectory,
                                                   DirectoryHelper.GetTexturesDirectory(XP2AFSConverterManager.Settings));

                log.Info("Airport conversion done");
            }
            else
            {
                log.ErrorFormat("Could not find the data for airport {0} make sure it is downloaded", icaoCode);
            }
        }