private void LoadContentPackages(IEnumerable <string> contentPackagePaths) { var missingPackagePaths = new List <string>(); var incompatiblePackages = new List <ContentPackage>(); SelectedContentPackages.Clear(); foreach (string path in contentPackagePaths) { var matchingContentPackage = ContentPackage.List.Find(cp => System.IO.Path.GetFullPath(cp.Path) == path); if (matchingContentPackage == null) { missingPackagePaths.Add(path); } else if (!matchingContentPackage.IsCompatible()) { incompatiblePackages.Add(matchingContentPackage); } else { SelectedContentPackages.Add(matchingContentPackage); } } TextManager.LoadTextPacks(SelectedContentPackages); foreach (ContentPackage contentPackage in SelectedContentPackages) { bool packageOk = contentPackage.VerifyFiles(out List <string> errorMessages); if (!packageOk) { DebugConsole.ThrowError("Error in content package \"" + contentPackage.Name + "\":\n" + string.Join("\n", errorMessages)); continue; } foreach (ContentFile file in contentPackage.Files) { ToolBox.IsProperFilenameCase(file.Path); } } EnsureCoreContentPackageSelected(); //save to get rid of the invalid selected packages in the config file if (missingPackagePaths.Count > 0 || incompatiblePackages.Count > 0) { SaveNewPlayerConfig(); } //display error messages after all content packages have been loaded //to make sure the package that contains text files has been loaded before we attempt to use TextManager foreach (string missingPackagePath in missingPackagePaths) { DebugConsole.ThrowError(TextManager.GetWithVariable("ContentPackageNotFound", "[packagepath]", missingPackagePath)); } foreach (ContentPackage incompatiblePackage in incompatiblePackages) { DebugConsole.ThrowError(TextManager.GetWithVariables(incompatiblePackage.GameVersion <= new Version(0, 0, 0, 0) ? "IncompatibleContentPackageUnknownVersion" : "IncompatibleContentPackage", new string[3] { "[packagename]", "[packageversion]", "[gameversion]" }, new string[3] { incompatiblePackage.Name, incompatiblePackage.GameVersion.ToString(), GameMain.Version.ToString() })); } }
private void LoadContentPackages(IEnumerable <string> contentPackagePaths) { var missingPackagePaths = new List <string>(); var incompatiblePackages = new List <ContentPackage>(); SelectedContentPackages.Clear(); foreach (string path in contentPackagePaths) { var matchingContentPackage = ContentPackage.List.Find(cp => System.IO.Path.GetFullPath(cp.Path) == path); if (matchingContentPackage == null) { missingPackagePaths.Add(path); } else if (!matchingContentPackage.IsCompatible()) { incompatiblePackages.Add(matchingContentPackage); } else { SelectedContentPackages.Add(matchingContentPackage); } } TextManager.LoadTextPacks(SelectedContentPackages); foreach (ContentPackage contentPackage in SelectedContentPackages) { foreach (ContentFile file in contentPackage.Files) { if (!System.IO.File.Exists(file.Path)) { DebugConsole.ThrowError("Error in content package \"" + contentPackage.Name + "\" - file \"" + file.Path + "\" not found."); continue; } ToolBox.IsProperFilenameCase(file.Path); } } if (!SelectedContentPackages.Any()) { var availablePackage = ContentPackage.List.FirstOrDefault(cp => cp.IsCompatible() && cp.CorePackage); if (availablePackage != null) { SelectedContentPackages.Add(availablePackage); } } //save to get rid of the invalid selected packages in the config file if (missingPackagePaths.Count > 0 || incompatiblePackages.Count > 0) { SaveNewPlayerConfig(); } //display error messages after all content packages have been loaded //to make sure the package that contains text files has been loaded before we attempt to use TextManager foreach (string missingPackagePath in missingPackagePaths) { DebugConsole.ThrowError(TextManager.Get("ContentPackageNotFound").Replace("[packagepath]", missingPackagePath)); } foreach (ContentPackage incompatiblePackage in incompatiblePackages) { DebugConsole.ThrowError(TextManager.Get(incompatiblePackage.GameVersion <= new Version(0, 0, 0, 0) ? "IncompatibleContentPackageUnknownVersion" : "IncompatibleContentPackage") .Replace("[packagename]", incompatiblePackage.Name) .Replace("[packageversion]", incompatiblePackage.GameVersion.ToString()) .Replace("[gameversion]", GameMain.Version.ToString())); } }