/// <summary> /// Searches the YSFlightDirectory for the Aircraft Folder, and loads all Aircraft Lists from it. /// </summary> /// <returns></returns> public static bool LoadAll() { //Invalidate the old aircraft list! List.Clear(); //if the YSFlight Aircraft directory doesn't exist, return false. string YSFlightAircraftDirectory = Settings.Loading.YSFlightDirectory + "/Aircraft/"; if (!Directories.DirectoryExists(YSFlightAircraftDirectory)) { return(false); } string[] Filenames = Directories.DirectoryGetFilenames(YSFlightAircraftDirectory); string[] AircraftLists = Filenames.Where(x => x.ToUpperInvariant().StartsWith("AIR") && x.ToUpperInvariant().EndsWith(".LST")).ToArray(); foreach (string AircraftList in AircraftLists) { if (!Files.FileExists(YSFlightAircraftDirectory + AircraftList)) { return(false); } string[] AircraftListContents = Files.FileReadAllLines(YSFlightAircraftDirectory + AircraftList); AircraftListContents = AircraftListContents.Where(x => x.ToUpperInvariant().Contains(".DAT")).ToArray(); foreach (string Line in AircraftListContents) { string ProcessedLine = Line.ReplaceAll("\\", "/"); string[] SplitString = Strings.SplitPreservingQuotes(ProcessedLine, ' '); string AircraftPath0Dat = ""; string AircraftPath1Model = ""; string AircraftPath2Collision = ""; string AircraftPath3Cockpit = ""; string AircraftPath4Coarse = ""; if (SplitString.Length > 4) { SplitString = new string[] { SplitString[0], SplitString[1], SplitString[2], SplitString[3], SplitString[4] } } ; switch (SplitString.Length - 1) { case 4: AircraftPath4Coarse = SplitString[4]; goto case 3; case 3: AircraftPath3Cockpit = SplitString[3]; goto case 2; case 2: AircraftPath2Collision = SplitString[2]; goto case 1; case 1: AircraftPath1Model = SplitString[1]; goto case 0; case 0: AircraftPath0Dat = SplitString[0]; break; } Aircraft NewMetaAircraft = new Aircraft(); NewMetaAircraft.AircraftPath0Dat = AircraftPath0Dat; NewMetaAircraft.AircraftPath1Model = AircraftPath1Model; NewMetaAircraft.AircraftPath2Collision = AircraftPath2Collision; NewMetaAircraft.AircraftPath3Cockpit = AircraftPath3Cockpit; NewMetaAircraft.AircraftPath4Coarse = AircraftPath4Coarse; if (NewMetaAircraft.AircraftPath0Dat.Length < 4) { Console.WriteLine(Line); } List.Add(NewMetaAircraft); } } //AT THIS POINT, ALL YSFLIGHT AIRCRAFT LST's ARE FULLY LOADED. NOW WE CACHE THE AIRCRAFT NAMES. foreach (Aircraft ThisMetaAircraft in List) { if (!Files.FileExists(Settings.Loading.YSFlightDirectory + "/" + ThisMetaAircraft.AircraftPath0Dat)) { Console.WriteLine("Failed To Load: " + Settings.Loading.YSFlightDirectory + "/" + ThisMetaAircraft.AircraftPath0Dat); continue; //Couldn't find the aircraft DAT file, we'll leave it blank! } string[] DatFileContents = Files.FileReadAllLines(Settings.Loading.YSFlightDirectory + "/" + ThisMetaAircraft.AircraftPath0Dat); foreach (string DatFileLine in DatFileContents) { #region Identify if (DatFileLine.ToUpperInvariant().Contains("IDENTIFY")) { string AircraftName = Strings.SplitPreservingQuotes(DatFileLine, ' ')[1]; AircraftName = AircraftName.ReplaceAll(" ", "_"); AircraftName = AircraftName.Split('�')[0]; ThisMetaAircraft.Identify = AircraftName.ToUpperInvariant(); } #endregion } } //Cache Complete. All aircraft are loaded, ready for use. return(true); }
/// <summary> /// Searches the YSFlightDirectory for the Ground Folder, and loads all Ground Lists from it. /// </summary> /// <returns>True if Loading OK!</returns> public static bool LoadAll() { //Invalidate the old grounds list! List.Clear(); //if the YSFlight Ground directory doesn't exist, return false. string YSFlightGroundDirectory = Settings.Loading.YSFlightDirectory + "/Ground/"; if (!Directories.DirectoryExists(YSFlightGroundDirectory)) { return(false); } string[] Filenames = Directories.DirectoryGetFilenames(YSFlightGroundDirectory); string[] GroundLists = Filenames.Where(x => x.ToUpperInvariant().StartsWith("GRO") && x.ToUpperInvariant().EndsWith(".LST")).ToArray(); foreach (string GroundList in GroundLists) { if (!Files.FileExists(YSFlightGroundDirectory + GroundList)) { return(false); } string[] GroundListContents = Files.FileReadAllLines(YSFlightGroundDirectory + GroundList); GroundListContents = GroundListContents.Where(x => x.ToUpperInvariant().Contains(".DAT")).ToArray(); foreach (string Line in GroundListContents) { string ProcessedLine = Line.ReplaceAll("\\", "/"); //escape code. actually replacing a single blackslash with a single forwardslash. :) //ProcessedLine = Utilities.StringCompress(ProcessedLine); //string[] SplitString = ProcessedLine.Split(' '); string[] SplitString = Strings.SplitPreservingQuotes(ProcessedLine, ' '); string GroundPath0Dat = ""; string GroundPath1Model = ""; string GroundPath2Collision = ""; string GroundPath3Cockpit = ""; string GroundPath4Coarse = ""; switch (SplitString.Length - 1) { case 4: GroundPath4Coarse = SplitString[4]; goto case 3; case 3: GroundPath3Cockpit = SplitString[3]; goto case 2; case 2: GroundPath2Collision = SplitString[2]; goto case 1; case 1: GroundPath1Model = SplitString[1]; goto case 0; case 0: GroundPath0Dat = SplitString[0]; break; } Ground NewMetaGround = new Ground(); NewMetaGround.GroundPath0Dat = GroundPath0Dat; NewMetaGround.GroundPath1Model = GroundPath1Model; NewMetaGround.GroundPath2Collision = GroundPath2Collision; NewMetaGround.GroundPath3Cockpit = GroundPath3Cockpit; NewMetaGround.GroundPath4Coarse = GroundPath4Coarse; List.Add(NewMetaGround); } } //AT THIS POINT, ALL YSFLIGHT Ground LST's ARE FULLY LOADED. NOW WE CACHE THE Ground data. foreach (Ground ThisMetaGround in List) { if (!Files.FileExists(Settings.Loading.YSFlightDirectory + "/" + ThisMetaGround.GroundPath0Dat)) { continue; //Couldn't find the Ground DAT file, we'll leave it blank! } string[] DatFileContents = Files.FileReadAllLines(Settings.Loading.YSFlightDirectory + "/" + ThisMetaGround.GroundPath0Dat); foreach (string DatFileLine in DatFileContents) { if (DatFileLine.ToUpperInvariant().Contains("IDENTIFY")) { string GroundName = Strings.SplitPreservingQuotes(DatFileLine, ' ')[1]; ThisMetaGround.Identify = GroundName; } } } //Cache Complete. All Ground are loaded, ready for use. return(true); }