Exemple #1
0
        private void OnConsoleVideoMode(string arguments)
        {
            if (!string.IsNullOrEmpty(arguments))
            {
                try
                {
                    Vec2I mode = Vec2I.Parse(arguments);

                    if (EngineApp.Instance.FullScreen && !DisplaySettings.VideoModeExists(mode))
                    {
                        string text = string.Format("Cannot change screen resolution to \"{0}x{1}\". " +
                                                    "This resolution is not supported by the system.", mode.X, mode.Y);
                        Log.Warning(text);
                        return;
                    }

                    EngineApp.Instance.VideoMode = mode;
                }
                catch (Exception ex)
                {
                    Log.Warning(ex.Message);
                }
            }
            else
            {
                Print(string.Format("Value: \"{0}\"", EngineApp.Instance.VideoMode));
            }
        }
        void ChangeVideoMode()
        {
            Vec2I size;

            {
                size = EngineApp.Instance.VideoMode;

                if (comboBoxResolution.SelectedIndex != -1)
                {
                    string s = (string)(comboBoxResolution).SelectedItem;
                    s    = s.Replace("x", " ");
                    size = Vec2I.Parse(s);
                }
            }

            EngineApp.Instance.VideoMode = size;
        }
        private void MainForm_Load(object sender, EventArgs e)
        {
            //Engine.config parameters
            string renderingSystemComponentName = "";
            bool   allowShaders          = true;
            bool   depthBufferAccess     = true;
            string fullSceneAntialiasing = "";

            RendererWorld.FilteringModes filtering = RendererWorld.FilteringModes.RecommendedSetting;
            string renderTechnique             = "";
            bool   fullScreen                  = true;
            string videoMode                   = "";
            bool   multiMonitorMode            = false;
            bool   verticalSync                = true;
            bool   allowChangeDisplayFrequency = true;
            string physicsSystemComponentName  = "";
            //bool physicsAllowHardwareAcceleration = false;
            string soundSystemComponentName = "";
            string language             = "Autodetect";
            bool   localizeEngine       = true;
            bool   localizeToolset      = true;
            string renderingDeviceName  = "";
            int    renderingDeviceIndex = 0;

            //load from Deployment.config
            if (VirtualFileSystem.Deployed)
            {
                if (!string.IsNullOrEmpty(VirtualFileSystem.DeploymentParameters.DefaultLanguage))
                {
                    language = VirtualFileSystem.DeploymentParameters.DefaultLanguage;
                }
            }

            //load from Engine.config
            {
                string    error;
                TextBlock block = TextBlockUtils.LoadFromRealFile(
                    VirtualFileSystem.GetRealPathByVirtual("user:Configs/Engine.config"),
                    out error);
                if (block != null)
                {
                    //Renderer
                    TextBlock rendererBlock = block.FindChild("Renderer");
                    if (rendererBlock != null)
                    {
                        renderingSystemComponentName = rendererBlock.GetAttribute("implementationComponent");

                        if (rendererBlock.IsAttributeExist("renderingDeviceName"))
                        {
                            renderingDeviceName = rendererBlock.GetAttribute("renderingDeviceName");
                        }
                        if (rendererBlock.IsAttributeExist("renderingDeviceIndex"))
                        {
                            renderingDeviceIndex = int.Parse(rendererBlock.GetAttribute("renderingDeviceIndex"));
                        }
                        if (rendererBlock.IsAttributeExist("allowShaders"))
                        {
                            allowShaders = bool.Parse(rendererBlock.GetAttribute("allowShaders"));
                        }
                        if (rendererBlock.IsAttributeExist("depthBufferAccess"))
                        {
                            depthBufferAccess = bool.Parse(rendererBlock.GetAttribute("depthBufferAccess"));
                        }
                        if (rendererBlock.IsAttributeExist("fullSceneAntialiasing"))
                        {
                            fullSceneAntialiasing = rendererBlock.GetAttribute("fullSceneAntialiasing");
                        }

                        if (rendererBlock.IsAttributeExist("filtering"))
                        {
                            try
                            {
                                filtering = (RendererWorld.FilteringModes)
                                            Enum.Parse(typeof(RendererWorld.FilteringModes),
                                                       rendererBlock.GetAttribute("filtering"));
                            }
                            catch { }
                        }

                        if (rendererBlock.IsAttributeExist("renderTechnique"))
                        {
                            renderTechnique = rendererBlock.GetAttribute("renderTechnique");
                        }

                        if (rendererBlock.IsAttributeExist("fullScreen"))
                        {
                            fullScreen = bool.Parse(rendererBlock.GetAttribute("fullScreen"));
                        }

                        if (rendererBlock.IsAttributeExist("videoMode"))
                        {
                            videoMode = rendererBlock.GetAttribute("videoMode");
                        }

                        if (rendererBlock.IsAttributeExist("multiMonitorMode"))
                        {
                            multiMonitorMode = bool.Parse(rendererBlock.GetAttribute("multiMonitorMode"));
                        }

                        if (rendererBlock.IsAttributeExist("verticalSync"))
                        {
                            verticalSync = bool.Parse(rendererBlock.GetAttribute("verticalSync"));
                        }

                        if (rendererBlock.IsAttributeExist("allowChangeDisplayFrequency"))
                        {
                            allowChangeDisplayFrequency = bool.Parse(
                                rendererBlock.GetAttribute("allowChangeDisplayFrequency"));
                        }
                    }

                    //Physics system
                    TextBlock physicsSystemBlock = block.FindChild("PhysicsSystem");
                    if (physicsSystemBlock != null)
                    {
                        physicsSystemComponentName = physicsSystemBlock.GetAttribute("implementationComponent");
                        //if( physicsSystemBlock.IsAttributeExist( "allowHardwareAcceleration" ) )
                        //{
                        //   physicsAllowHardwareAcceleration =
                        //      bool.Parse( physicsSystemBlock.GetAttribute( "allowHardwareAcceleration" ) );
                        //}
                    }

                    //Sound system
                    TextBlock soundSystemBlock = block.FindChild("SoundSystem");
                    if (soundSystemBlock != null)
                    {
                        soundSystemComponentName = soundSystemBlock.GetAttribute("implementationComponent");
                    }

                    //Localization
                    TextBlock localizationBlock = block.FindChild("Localization");
                    if (localizationBlock != null)
                    {
                        if (localizationBlock.IsAttributeExist("language"))
                        {
                            language = localizationBlock.GetAttribute("language");
                        }
                        if (localizationBlock.IsAttributeExist("localizeEngine"))
                        {
                            localizeEngine = bool.Parse(localizationBlock.GetAttribute("localizeEngine"));
                        }
                        if (localizationBlock.IsAttributeExist("localizeToolset"))
                        {
                            localizeToolset = bool.Parse(localizationBlock.GetAttribute("localizeToolset"));
                        }
                    }
                }
            }

            //init toolset language
            if (localizeToolset)
            {
                if (!string.IsNullOrEmpty(language))
                {
                    string language2 = language;
                    if (string.Compare(language2, "autodetect", true) == 0)
                    {
                        language2 = DetectLanguage();
                    }
                    string languageDirectory = Path.Combine(LanguageManager.LanguagesDirectory, language2);
                    string fileName          = Path.Combine(languageDirectory, "Configurator.language");
                    ToolsLocalization.Init(fileName);
                }
            }

            //fill render system
            {
                EngineComponentManager.ComponentInfo[] components = GetSortedComponentsByType(
                    EngineComponentManager.ComponentTypeFlags.RenderingSystem);

                if (string.IsNullOrEmpty(renderingSystemComponentName))
                {
                    //find component by default
                    foreach (EngineComponentManager.ComponentInfo component2 in components)
                    {
                        if (component2.IsEnabledByDefaultForThisPlatform())
                        {
                            renderingSystemComponentName = component2.Name;
                            break;
                        }
                    }
                }

                //rendering systems combo box
                foreach (EngineComponentManager.ComponentInfo component in components)
                {
                    string text = component.FullName;
                    if (component.IsEnabledByDefaultForThisPlatform())
                    {
                        text = string.Format(Translate("{0} (default)"), text);
                    }
                    int itemId = comboBoxRenderSystems.Items.Add(text);
                    if (renderingSystemComponentName == component.Name)
                    {
                        comboBoxRenderSystems.SelectedIndex = itemId;
                    }
                }
                if (comboBoxRenderSystems.Items.Count != 0 && comboBoxRenderSystems.SelectedIndex == -1)
                {
                    comboBoxRenderSystems.SelectedIndex = 0;
                }

                //rendering device
                {
                    if (comboBoxRenderingDevices.Items.Count > 1 && !string.IsNullOrEmpty(renderingDeviceName))
                    {
                        int deviceCountWithSelectedName = 0;

                        for (int n = 1; n < comboBoxRenderingDevices.Items.Count; n++)
                        {
                            string name = (string)comboBoxRenderingDevices.Items[n];
                            if (name == renderingDeviceName)
                            {
                                comboBoxRenderingDevices.SelectedIndex = n;
                                deviceCountWithSelectedName++;
                            }
                        }

                        if (deviceCountWithSelectedName > 1)
                        {
                            int comboBoxIndex = renderingDeviceIndex + 1;
                            if (comboBoxIndex < comboBoxRenderingDevices.Items.Count)
                            {
                                string name = (string)comboBoxRenderingDevices.Items[comboBoxIndex];
                                if (name == renderingDeviceName)
                                {
                                    comboBoxRenderingDevices.SelectedIndex = comboBoxIndex;
                                }
                            }
                        }
                    }

                    if (comboBoxRenderingDevices.SelectedIndex == -1 && comboBoxRenderingDevices.Items.Count != 0)
                    {
                        comboBoxRenderingDevices.SelectedIndex = 0;
                    }
                }

                //allowShaders
                checkBoxAllowShaders.Checked = allowShaders;

                //depthBufferAccess
                comboBoxDepthBufferAccess.Items.Add(Translate("No"));
                comboBoxDepthBufferAccess.Items.Add(Translate("Yes"));
                comboBoxDepthBufferAccess.SelectedIndex = depthBufferAccess ? 1 : 0;

                //fullSceneAntialiasing
                for (int n = 0; n < comboBoxAntialiasing.Items.Count; n++)
                {
                    ComboBoxItem item = (ComboBoxItem)comboBoxAntialiasing.Items[n];
                    if (item.Identifier == fullSceneAntialiasing)
                    {
                        comboBoxAntialiasing.SelectedIndex = n;
                    }
                }
                if (comboBoxAntialiasing.SelectedIndex == -1)
                {
                    comboBoxAntialiasing.SelectedIndex = 0;
                }

                //filtering
                {
                    Type enumType = typeof(RendererWorld.FilteringModes);
                    LocalizedEnumConverter enumConverter = new LocalizedEnumConverter(enumType);

                    RendererWorld.FilteringModes[] values =
                        (RendererWorld.FilteringModes[])Enum.GetValues(enumType);
                    for (int n = 0; n < values.Length; n++)
                    {
                        RendererWorld.FilteringModes value = values[n];
                        int index = comboBoxFiltering.Items.Add(enumConverter.ConvertToString(value));
                        if (filtering == value)
                        {
                            comboBoxFiltering.SelectedIndex = index;
                        }
                    }
                }

                //renderTechnique
                {
                    comboBoxRenderTechnique.Items.Add(new ComboBoxItem("RecommendedSetting", "Recommended setting"));
                    comboBoxRenderTechnique.Items.Add(new ComboBoxItem("Standard", "Low Dynamic Range (Standard)"));
                    comboBoxRenderTechnique.Items.Add(new ComboBoxItem("HDR", "64-bit High Dynamic Range (HDR)"));

                    for (int n = 0; n < comboBoxRenderTechnique.Items.Count; n++)
                    {
                        ComboBoxItem item = (ComboBoxItem)comboBoxRenderTechnique.Items[n];
                        if (item.Identifier == renderTechnique)
                        {
                            comboBoxRenderTechnique.SelectedIndex = n;
                        }
                    }
                    if (comboBoxRenderTechnique.SelectedIndex == -1)
                    {
                        comboBoxRenderTechnique.SelectedIndex = 0;
                    }
                }

                //video mode
                {
                    comboBoxVideoMode.Items.Add(Translate("Current screen resolution"));
                    comboBoxVideoMode.SelectedIndex = 0;

                    comboBoxVideoMode.Items.Add(Translate("Use all displays (multi-monitor mode)"));
                    if (multiMonitorMode)
                    {
                        comboBoxVideoMode.SelectedIndex = 1;
                    }

                    foreach (Vec2I mode in DisplaySettings.VideoModes)
                    {
                        if (mode.X < 640)
                        {
                            continue;
                        }
                        comboBoxVideoMode.Items.Add(string.Format("{0}x{1}", mode.X, mode.Y));
                        if (mode.ToString() == videoMode)
                        {
                            comboBoxVideoMode.SelectedIndex = comboBoxVideoMode.Items.Count - 1;
                        }
                    }

                    if (!string.IsNullOrEmpty(videoMode) && comboBoxVideoMode.SelectedIndex == 0)
                    {
                        try
                        {
                            Vec2I mode = Vec2I.Parse(videoMode);
                            comboBoxVideoMode.Items.Add(string.Format("{0}x{1}", mode.X, mode.Y));
                            comboBoxVideoMode.SelectedIndex = comboBoxVideoMode.Items.Count - 1;
                        }
                        catch { }
                    }
                }

                //full screen
                checkBoxFullScreen.Checked = fullScreen;

                //vertical sync
                checkBoxVerticalSync.Checked = verticalSync;
            }

            //fill physics system page
            {
                EngineComponentManager.ComponentInfo[] components = GetSortedComponentsByType(
                    EngineComponentManager.ComponentTypeFlags.PhysicsSystem);

                if (string.IsNullOrEmpty(physicsSystemComponentName))
                {
                    //find component by default
                    foreach (EngineComponentManager.ComponentInfo component2 in components)
                    {
                        if (component2.IsEnabledByDefaultForThisPlatform())
                        {
                            physicsSystemComponentName = component2.Name;
                            break;
                        }
                    }
                }

                //update combo box
                foreach (EngineComponentManager.ComponentInfo component in components)
                {
                    string text = component.FullName;
                    if (component.IsEnabledByDefaultForThisPlatform())
                    {
                        text = string.Format(Translate("{0} (default)"), text);
                    }

                    int itemId = comboBoxPhysicsSystems.Items.Add(text);
                    if (physicsSystemComponentName == component.Name)
                    {
                        comboBoxPhysicsSystems.SelectedIndex = itemId;
                    }
                }
                if (comboBoxPhysicsSystems.SelectedIndex == -1)
                {
                    comboBoxPhysicsSystems.SelectedIndex = 0;
                }

                //if( checkBoxPhysicsAllowHardwareAcceleration.Enabled )
                //   checkBoxPhysicsAllowHardwareAcceleration.Checked = physicsAllowHardwareAcceleration;
            }

            //fill sound system page
            {
                EngineComponentManager.ComponentInfo[] components = GetSortedComponentsByType(
                    EngineComponentManager.ComponentTypeFlags.SoundSystem);

                if (string.IsNullOrEmpty(soundSystemComponentName))
                {
                    //find component by default
                    foreach (EngineComponentManager.ComponentInfo component2 in components)
                    {
                        if (component2.IsEnabledByDefaultForThisPlatform())
                        {
                            soundSystemComponentName = component2.Name;
                            break;
                        }
                    }
                }

                //update combo box
                foreach (EngineComponentManager.ComponentInfo component in components)
                {
                    string text = component.FullName;
                    if (component.IsEnabledByDefaultForThisPlatform())
                    {
                        text = string.Format(Translate("{0} (default)"), text);
                    }

                    int itemId = comboBoxSoundSystems.Items.Add(text);
                    if (soundSystemComponentName == component.Name)
                    {
                        comboBoxSoundSystems.SelectedIndex = itemId;
                    }
                }
                if (comboBoxSoundSystems.SelectedIndex == -1)
                {
                    comboBoxSoundSystems.SelectedIndex = 0;
                }
            }

            //fill localization page
            {
                List <string> languages = new List <string>();
                {
                    languages.Add(Translate("Autodetect"));
                    string[] directories = VirtualDirectory.GetDirectories(LanguageManager.LanguagesDirectory,
                                                                           "*.*", SearchOption.TopDirectoryOnly);
                    foreach (string directory in directories)
                    {
                        languages.Add(Path.GetFileNameWithoutExtension(directory));
                    }
                }

                foreach (string lang in languages)
                {
                    int itemId = comboBoxLanguages.Items.Add(lang);
                    if (string.Compare(language, lang, true) == 0)
                    {
                        comboBoxLanguages.SelectedIndex = itemId;
                    }
                }

                if (comboBoxLanguages.SelectedIndex == -1)
                {
                    comboBoxLanguages.SelectedIndex = 0;
                }

                checkBoxLocalizeEngine.Checked  = localizeEngine;
                checkBoxLocalizeToolset.Checked = localizeToolset;
            }

            Translate();

            formLoaded = true;
        }