Exemplo n.º 1
0
        private bool SelectContentPackage(GUITickBox tickBox)
        {
            var contentPackage = tickBox.UserData as ContentPackage;

            if (contentPackage.CorePackage)
            {
                if (tickBox.Selected)
                {
                    //make sure no other core packages are selected
                    SelectedContentPackages.RemoveWhere(cp => cp.CorePackage && cp != contentPackage);
                    SelectedContentPackages.Add(contentPackage);
                    foreach (GUITickBox otherTickBox in tickBox.Parent.Children)
                    {
                        ContentPackage otherContentPackage = otherTickBox.UserData as ContentPackage;
                        if (otherContentPackage == contentPackage)
                        {
                            continue;
                        }
                        otherTickBox.Selected = SelectedContentPackages.Contains(otherContentPackage);
                    }
                }
                else if (SelectedContentPackages.Contains(contentPackage))
                {
                    //core packages cannot be deselected, only switched by selecting another core package
                    new GUIMessageBox(TextManager.Get("Warning"), TextManager.Get("CorePackageRequiredWarning"));
                    tickBox.Selected = true;
                    return(true);
                }
            }
            else
            {
                if (tickBox.Selected)
                {
                    SelectedContentPackages.Add(contentPackage);
                }
                else
                {
                    SelectedContentPackages.Remove(contentPackage);
                }
            }
            UnsavedSettings = true;
            return(true);
        }
Exemplo n.º 2
0
        public void EnsureCoreContentPackageSelected()
        {
            if (SelectedContentPackages.Any(cp => cp.CorePackage))
            {
                return;
            }

            if (GameMain.VanillaContent != null)
            {
                SelectedContentPackages.Add(GameMain.VanillaContent);
            }
            else
            {
                var availablePackage = ContentPackage.List.FirstOrDefault(cp => cp.IsCompatible() && cp.CorePackage);
                if (availablePackage != null)
                {
                    SelectedContentPackages.Add(availablePackage);
                }
            }
        }
Exemplo n.º 3
0
        private void LoadDefaultConfig(bool setLanguage = true)
        {
            XDocument doc = XMLExtensions.TryLoadXml(savePath);

            if (setLanguage || string.IsNullOrEmpty(Language))
            {
                Language = doc.Root.GetAttributeString("language", "English");
            }

            MasterServerUrl = doc.Root.GetAttributeString("masterserverurl", "");

            AutoCheckUpdates = doc.Root.GetAttributeBool("autocheckupdates", true);
            WasGameUpdated   = doc.Root.GetAttributeBool("wasgameupdated", false);

            VerboseLogging       = doc.Root.GetAttributeBool("verboselogging", false);
            SaveDebugConsoleLogs = doc.Root.GetAttributeBool("savedebugconsolelogs", false);

            QuickStartSubmarineName = doc.Root.GetAttributeString("quickstartsub", "");

            if (doc == null)
            {
                GraphicsWidth  = 1024;
                GraphicsHeight = 678;

                MasterServerUrl = "";

                SelectedContentPackages.Add(ContentPackage.List.Any() ? ContentPackage.List[0] : new ContentPackage(""));

                jobPreferences = new List <string>();
                foreach (JobPrefab job in JobPrefab.List)
                {
                    jobPreferences.Add(job.Identifier);
                }
                return;
            }

            XElement graphicsMode = doc.Root.Element("graphicsmode");

            GraphicsWidth  = 0;
            GraphicsHeight = 0;
            VSyncEnabled   = graphicsMode.GetAttributeBool("vsync", true);

            XElement graphicsSettings = doc.Root.Element("graphicssettings");

            ParticleLimit              = graphicsSettings.GetAttributeInt("particlelimit", 1500);
            LightMapScale              = MathHelper.Clamp(graphicsSettings.GetAttributeFloat("lightmapscale", 0.5f), 0.1f, 1.0f);
            SpecularityEnabled         = graphicsSettings.GetAttributeBool("specularity", true);
            ChromaticAberrationEnabled = graphicsSettings.GetAttributeBool("chromaticaberration", true);
            HUDScale       = graphicsSettings.GetAttributeFloat("hudscale", 1.0f);
            InventoryScale = graphicsSettings.GetAttributeFloat("inventoryscale", 1.0f);
            var losModeStr = graphicsSettings.GetAttributeString("losmode", "Transparent");

            if (!Enum.TryParse(losModeStr, out losMode))
            {
                losMode = LosMode.Transparent;
            }

#if CLIENT
            if (GraphicsWidth == 0 || GraphicsHeight == 0)
            {
                GraphicsWidth  = GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width;
                GraphicsHeight = GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height;
            }
#endif

            var windowModeStr = graphicsMode.GetAttributeString("displaymode", "Fullscreen");
            if (!Enum.TryParse(windowModeStr, out WindowMode wm))
            {
                wm = WindowMode.Fullscreen;
            }
            WindowMode = wm;

            useSteamMatchmaking        = doc.Root.GetAttributeBool("usesteammatchmaking", true);
            requireSteamAuthentication = doc.Root.GetAttributeBool("requiresteamauthentication", true);
            AutoUpdateWorkshopItems    = doc.Root.GetAttributeBool("autoupdateworkshopitems", true);

#if DEBUG
            EnableSplashScreen = false;
#else
            EnableSplashScreen = doc.Root.GetAttributeBool("enablesplashscreen", true);
#endif

            AimAssistAmount = doc.Root.GetAttributeFloat("aimassistamount", 0.5f);

            SetDefaultBindings(doc, legacy: false);

            foreach (XElement subElement in doc.Root.Elements())
            {
                switch (subElement.Name.ToString().ToLowerInvariant())
                {
                case "keymapping":
                    LoadKeyBinds(subElement);
                    break;

                case "gameplay":
                    jobPreferences = new List <string>();
                    foreach (XElement ele in subElement.Element("jobpreferences").Elements("job"))
                    {
                        string jobIdentifier = ele.GetAttributeString("identifier", "");
                        if (string.IsNullOrEmpty(jobIdentifier))
                        {
                            continue;
                        }
                        jobPreferences.Add(jobIdentifier);
                    }
                    break;

                case "player":
                    defaultPlayerName  = subElement.GetAttributeString("name", "");
                    CharacterHeadIndex = subElement.GetAttributeInt("headindex", CharacterHeadIndex);
                    if (Enum.TryParse(subElement.GetAttributeString("gender", "none"), true, out Gender g))
                    {
                        CharacterGender = g;
                    }
                    if (Enum.TryParse(subElement.GetAttributeString("race", "white"), true, out Race r))
                    {
                        CharacterRace = r;
                    }
                    else
                    {
                        CharacterRace = Race.White;
                    }
                    CharacterHairIndex           = subElement.GetAttributeInt("hairindex", -1);
                    CharacterBeardIndex          = subElement.GetAttributeInt("beardindex", -1);
                    CharacterMoustacheIndex      = subElement.GetAttributeInt("moustacheindex", -1);
                    CharacterFaceAttachmentIndex = subElement.GetAttributeInt("faceattachmentindex", -1);
                    break;
                }
            }

            List <string>         missingPackagePaths  = new List <string>();
            List <ContentPackage> incompatiblePackages = new List <ContentPackage>();
            foreach (XElement subElement in doc.Root.Elements())
            {
                switch (subElement.Name.ToString().ToLowerInvariant())
                {
                case "contentpackage":
                    string path = System.IO.Path.GetFullPath(subElement.GetAttributeString("path", ""));
                    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);
                    }
                    break;
                }
            }

            TextManager.LoadTextPacks(SelectedContentPackages);

            //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()
                }));
            }
            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);
                }
            }
            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();
            }
        }
Exemplo n.º 4
0
        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()
                }));
            }
        }
Exemplo n.º 5
0
        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()));
            }
        }
Exemplo n.º 6
0
        public void LoadDefaultConfig()
        {
            XDocument doc = XMLExtensions.TryLoadXml(savePath);

            Language = doc.Root.GetAttributeString("language", "English");

            MasterServerUrl = doc.Root.GetAttributeString("masterserverurl", "");

            AutoCheckUpdates = doc.Root.GetAttributeBool("autocheckupdates", true);
            WasGameUpdated   = doc.Root.GetAttributeBool("wasgameupdated", false);

            VerboseLogging       = doc.Root.GetAttributeBool("verboselogging", false);
            SaveDebugConsoleLogs = doc.Root.GetAttributeBool("savedebugconsolelogs", false);

#if DEBUG
            UseSteam = doc.Root.GetAttributeBool("usesteam", true);
#endif
            QuickStartSubmarineName = doc.Root.GetAttributeString("quickstartsub", "");

            if (doc == null)
            {
                GraphicsWidth  = 1024;
                GraphicsHeight = 678;

                MasterServerUrl = "";

                SelectedContentPackages.Add(ContentPackage.List.Any() ? ContentPackage.List[0] : new ContentPackage(""));

                jobPreferences = new List <string>();
                foreach (JobPrefab job in JobPrefab.List)
                {
                    jobPreferences.Add(job.Identifier);
                }
                return;
            }

            XElement graphicsMode = doc.Root.Element("graphicsmode");
            GraphicsWidth  = 0;
            GraphicsHeight = 0;
            VSyncEnabled   = graphicsMode.GetAttributeBool("vsync", true);

            XElement graphicsSettings = doc.Root.Element("graphicssettings");
            ParticleLimit              = graphicsSettings.GetAttributeInt("particlelimit", 1500);
            LightMapScale              = MathHelper.Clamp(graphicsSettings.GetAttributeFloat("lightmapscale", 0.5f), 0.1f, 1.0f);
            SpecularityEnabled         = graphicsSettings.GetAttributeBool("specularity", true);
            ChromaticAberrationEnabled = graphicsSettings.GetAttributeBool("chromaticaberration", true);
            HUDScale       = graphicsSettings.GetAttributeFloat("hudscale", 1.0f);
            InventoryScale = graphicsSettings.GetAttributeFloat("inventoryscale", 1.0f);
            var losModeStr = graphicsSettings.GetAttributeString("losmode", "Transparent");
            if (!Enum.TryParse(losModeStr, out losMode))
            {
                losMode = LosMode.Transparent;
            }

#if CLIENT
            if (GraphicsWidth == 0 || GraphicsHeight == 0)
            {
                GraphicsWidth  = GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Width;
                GraphicsHeight = GraphicsAdapter.DefaultAdapter.CurrentDisplayMode.Height;
            }
#endif

            var windowModeStr = graphicsMode.GetAttributeString("displaymode", "Fullscreen");
            if (!Enum.TryParse(windowModeStr, out WindowMode wm))
            {
                wm = WindowMode.Fullscreen;
            }
            WindowMode = wm;

            useSteamMatchmaking        = doc.Root.GetAttributeBool("usesteammatchmaking", true);
            requireSteamAuthentication = doc.Root.GetAttributeBool("requiresteamauthentication", true);
            AutoUpdateWorkshopItems    = doc.Root.GetAttributeBool("autoupdateworkshopitems", true);

#if DEBUG
            EnableSplashScreen = false;
#else
            EnableSplashScreen = doc.Root.GetAttributeBool("enablesplashscreen", true);
#endif

            AimAssistAmount = doc.Root.GetAttributeFloat("aimassistamount", 0.5f);

            keyMapping = new KeyOrMouse[Enum.GetNames(typeof(InputType)).Length];
            keyMapping[(int)InputType.Up]    = new KeyOrMouse(Keys.W);
            keyMapping[(int)InputType.Down]  = new KeyOrMouse(Keys.S);
            keyMapping[(int)InputType.Left]  = new KeyOrMouse(Keys.A);
            keyMapping[(int)InputType.Right] = new KeyOrMouse(Keys.D);
            keyMapping[(int)InputType.Run]   = new KeyOrMouse(Keys.LeftShift);

            keyMapping[(int)InputType.InfoTab]    = new KeyOrMouse(Keys.Tab);
            keyMapping[(int)InputType.Chat]       = new KeyOrMouse(Keys.T);
            keyMapping[(int)InputType.RadioChat]  = new KeyOrMouse(Keys.Y);
            keyMapping[(int)InputType.CrewOrders] = new KeyOrMouse(Keys.C);

            keyMapping[(int)InputType.Select] = new KeyOrMouse(Keys.E);

            keyMapping[(int)InputType.SelectNextCharacter]     = new KeyOrMouse(Keys.Tab);
            keyMapping[(int)InputType.SelectPreviousCharacter] = new KeyOrMouse(Keys.Q);

            keyMapping[(int)InputType.Voice] = new KeyOrMouse(Keys.V);

            keyMapping[(int)InputType.Use] = new KeyOrMouse(0);
            keyMapping[(int)InputType.Aim] = new KeyOrMouse(1);

            foreach (XElement subElement in doc.Root.Elements())
            {
                switch (subElement.Name.ToString().ToLowerInvariant())
                {
                case "keymapping":
                    foreach (XAttribute attribute in subElement.Attributes())
                    {
                        if (Enum.TryParse(attribute.Name.ToString(), true, out InputType inputType))
                        {
                            if (int.TryParse(attribute.Value.ToString(), out int mouseButton))
                            {
                                keyMapping[(int)inputType] = new KeyOrMouse(mouseButton);
                            }
                            else
                            {
                                if (Enum.TryParse(attribute.Value.ToString(), true, out Keys key))
                                {
                                    keyMapping[(int)inputType] = new KeyOrMouse(key);
                                }
                            }
                        }
                    }
                    break;

                case "gameplay":
                    jobPreferences = new List <string>();
                    foreach (XElement ele in subElement.Element("jobpreferences").Elements("job"))
                    {
                        string jobIdentifier = ele.GetAttributeString("identifier", "");
                        if (string.IsNullOrEmpty(jobIdentifier))
                        {
                            continue;
                        }
                        jobPreferences.Add(jobIdentifier);
                    }
                    break;

                case "player":
                    defaultPlayerName  = subElement.GetAttributeString("name", "");
                    CharacterHeadIndex = subElement.GetAttributeInt("headindex", CharacterHeadIndex);
                    if (Enum.TryParse(subElement.GetAttributeString("gender", "none"), true, out Gender g))
                    {
                        CharacterGender = g;
                    }
                    if (Enum.TryParse(subElement.GetAttributeString("race", "white"), true, out Race r))
                    {
                        CharacterRace = r;
                    }
                    else
                    {
                        CharacterRace = Race.White;
                    }
                    CharacterHairIndex           = subElement.GetAttributeInt("hairindex", -1);
                    CharacterBeardIndex          = subElement.GetAttributeInt("beardindex", -1);
                    CharacterMoustacheIndex      = subElement.GetAttributeInt("moustacheindex", -1);
                    CharacterFaceAttachmentIndex = subElement.GetAttributeInt("faceattachmentindex", -1);
                    break;
                }
            }

            foreach (InputType inputType in Enum.GetValues(typeof(InputType)))
            {
                if (keyMapping[(int)inputType] == null)
                {
                    DebugConsole.ThrowError("Key binding for the input type \"" + inputType + " not set!");
                    keyMapping[(int)inputType] = new KeyOrMouse(Keys.D1);
                }
            }

            List <string>         missingPackagePaths  = new List <string>();
            List <ContentPackage> incompatiblePackages = new List <ContentPackage>();
            foreach (XElement subElement in doc.Root.Elements())
            {
                switch (subElement.Name.ToString().ToLowerInvariant())
                {
                case "contentpackage":
                    string path = System.IO.Path.GetFullPath(subElement.GetAttributeString("path", ""));
                    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);
                    }
                    break;
                }
            }

            TextManager.LoadTextPacks(SelectedContentPackages);

            //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()));
            }
            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();
            }
        }