예제 #1
0
        // OK clicked
        private void apply_Click(object sender, EventArgs e)
        {
            Configuration newcfg;
            WAD           sourcewad;
            bool          conflictingname;

            // Configuration selected?
            if (config.SelectedIndex == -1)
            {
                // Select a configuration!
                MessageBox.Show(this, "Please select a game configuration to use for editing your map.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                config.Focus();
                return;
            }

            // Level name empty?
            if (levelname.Text.Length == 0)
            {
                // Enter a level name!
                MessageBox.Show(this, "Please enter a level name for your map.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                levelname.Focus();
                return;
            }

            // Collect information
            ConfigurationInfo configinfo = General.Configs[config.SelectedIndex];
            DataLocationList  locations  = datalocations.GetResources();

            // When making a new map, check if we should warn the user for missing resources
            if (newmap && (locations.Count == 0) && (configinfo.Resources.Count == 0))
            {
                if (MessageBox.Show(this, "You are about to make a map without selecting any resources. Textures, flats and " +
                                    "sprites may not be shown correctly or may not show up at all. Do you want to continue?", Application.ProductName,
                                    MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.No)
                {
                    return;
                }
            }

            // Next checks are only for maps that are already opened
            if (!newmap)
            {
                // Now we check if the map name the user has given does already exist in the source WAD file
                // We have to warn the user about that, because it would create a level name conflict in the WAD

                // Level name changed and the map exists in a source wad?
                if ((levelname.Text != options.CurrentName) && (General.Map != null) &&
                    (General.Map.FilePathName != "") && File.Exists(General.Map.FilePathName))
                {
                    // Open the source wad file to check for conflicting name
                    sourcewad       = new WAD(General.Map.FilePathName, true);
                    conflictingname = (sourcewad.FindLumpIndex(levelname.Text) > -1);
                    sourcewad.Dispose();

                    // Names conflict?
                    if (conflictingname)
                    {
                        // Show warning!
                        if (General.ShowWarningMessage("The map name \"" + levelname.Text + "\" is already in use by another map or data lump in the source WAD file. Saving your map with this name will cause conflicting data lumps in the WAD file. Do you want to continue?", MessageBoxButtons.YesNo, MessageBoxDefaultButton.Button2) == DialogResult.No)
                        {
                            return;
                        }
                    }
                }

                // When the user changed the configuration to one that has a different read/write interface,
                // we have to warn the user that the map may not be compatible.

                // Configuration changed?
                if ((options.ConfigFile != "") && (General.Configs[config.SelectedIndex].Filename != options.ConfigFile))
                {
                    // Load the new cfg file
                    newcfg = General.LoadGameConfiguration(General.Configs[config.SelectedIndex].Filename);
                    if (newcfg == null)
                    {
                        return;
                    }

                    // Check if the config uses a different IO interface
                    if (newcfg.ReadSetting("formatinterface", "") != General.Map.Config.FormatInterface)
                    {
                        // Warn the user about IO interface change
                        if (General.ShowWarningMessage("The game configuration you selected uses a different file format than your current map. Because your map was not designed for this format it may cause the map to work incorrectly in the game. Do you want to continue?", MessageBoxButtons.YesNo, MessageBoxDefaultButton.Button2) == DialogResult.No)
                        {
                            // Reset to old configuration
                            for (int i = 0; i < config.Items.Count; i++)
                            {
                                // Is this configuration the old config?
                                if (string.Compare(General.Configs[i].Filename, options.ConfigFile, true) == 0)
                                {
                                    // Select this item
                                    config.SelectedIndex = i;
                                }
                            }
                            return;
                        }
                    }
                }
            }

            // Apply changes
            options.ClearResources();
            options.ConfigFile    = General.Configs[config.SelectedIndex].Filename;
            options.CurrentName   = levelname.Text.Trim().ToUpper();
            options.StrictPatches = strictpatches.Checked;
            options.CopyResources(datalocations.GetResources());

            // ano
            General.Settings.WriteSetting("lastopenedgameconfig", options.ConfigFile);

            // Reset default drawing textures
            General.Settings.DefaultTexture        = null;
            General.Settings.DefaultFloorTexture   = null;
            General.Settings.DefaultCeilingTexture = null;

            // Hide window
            this.DialogResult = DialogResult.OK;
            this.Close();
        }
        // OK clicked
        private void apply_Click(object sender, EventArgs e)
        {
            // Configuration selected?
            if (config.SelectedIndex == -1)
            {
                // Select a configuration!
                MessageBox.Show(this, "Please select a game configuration to use for editing your map.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                config.Focus();
                return;
            }

            //mxd. Script configuration selected?
            if (scriptcompiler.Enabled && scriptcompiler.SelectedIndex == -1)
            {
                // Select a configuration!
                MessageBox.Show(this, "Please select a script type to use for editing your map.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                scriptcompiler.Focus();
                return;
            }

            // Collect information
            ConfigurationInfo configinfo = (config.SelectedItem as ConfigurationInfo);             //mxd
            DataLocationList  locations  = datalocations.GetResources();

            // Resources are valid? (mxd)
            if (!datalocations.ResourcesAreValid())
            {
                MessageBox.Show(this, "Cannot open map: at least one resource doesn't exist!", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                datalocations.Focus();
                return;
            }

            // No map selected?
            if (mapslist.SelectedItems.Count == 0)
            {
                // Choose a map!
                MessageBox.Show(this, "Please select a map to load for editing.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                mapslist.Focus();
                return;
            }

            //mxd. We cant't deal with this... We just can't...
            if (!configinfo.ValidateMapName(mapslist.SelectedItems[0].Text.ToUpperInvariant()))
            {
                // Choose a different map!
                MessageBox.Show(this, "Selected map name conflicts with a lump name defined for current map format.\nPlease rename the map and try again.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                mapslist.Focus();
                return;
            }

            // Check if we should warn the user for missing resources
            if ((!wadfile.IsIWAD) && (locations.Count == 0) && (configinfo.Resources.Count == 0))
            {
                if (MessageBox.Show(this, "You are about to load a map without selecting any resources. Textures, flats and " +
                                    "sprites may not be shown correctly or may not show up at all. Do you want to continue?", Application.ProductName,
                                    MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.No)
                {
                    return;
                }
            }

            // Apply changes
            options.ClearResources();
            options.ConfigFile    = configinfo.Filename;
            options.CurrentName   = mapslist.SelectedItems[0].Text;
            options.StrictPatches = strictpatches.Checked;
            options.CopyResources(locations);

            //mxd. Store script compiler
            if (scriptcompiler.Enabled)
            {
                ScriptConfiguration scriptcfg = scriptcompiler.SelectedItem as ScriptConfiguration;
                foreach (KeyValuePair <string, ScriptConfiguration> group in General.CompiledScriptConfigs)
                {
                    if (group.Value == scriptcfg)
                    {
                        options.ScriptCompiler = group.Key;
                        break;
                    }
                }
            }

            //mxd. Use long texture names?
            if (longtexturenames.Enabled)
            {
                options.UseLongTextureNames = longtexturenames.Checked;
            }

            //mxd. Resource usage
            options.UseResourcesInReadonlyMode = readonlyresources.Checked;

            // Hide window
            wadfile.Dispose();
            this.DialogResult = DialogResult.OK;
            this.Close();
        }
예제 #3
0
        // OK clicked
        private void apply_Click(object sender, EventArgs e)
        {
            // Configuration selected?
            if (config.SelectedIndex == -1)
            {
                // Select a configuration!
                MessageBox.Show(this, "Please select a game configuration to use for editing your map.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                config.Focus();
                return;
            }

            //mxd. Script configuration selected?
            if (scriptcompiler.Enabled && scriptcompiler.SelectedIndex == -1)
            {
                // Select a configuration!
                MessageBox.Show(this, "Please select a script type to use for editing your map.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                scriptcompiler.Focus();
                return;
            }

            // Level name empty?
            if (levelname.Text.Length == 0)
            {
                // Enter a level name!
                MessageBox.Show(this, "Please enter a level name for your map.", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                levelname.Focus();
                return;
            }

            // Collect information
            ConfigurationInfo configinfo = config.SelectedItem as ConfigurationInfo;             //mxd
            DataLocationList  locations  = datalocations.GetResources();

            //mxd. Level name will f**k things up horribly?
            if (!configinfo.ValidateMapName(levelname.Text.ToUpperInvariant()))
            {
                // Enter a different level name!
                MessageBox.Show(this, "Chosen map name conflicts with a lump name defined for current map format.\n", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                levelname.Focus();
                return;
            }

            // Resources are valid? (mxd)
            if (!datalocations.ResourcesAreValid())
            {
                MessageBox.Show(this, "Cannot " + (newmap ? "create map" : "change map settings") + ": at least one resource doesn't exist!", Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                datalocations.Focus();
                return;
            }

            // When making a new map, check if we should warn the user for missing resources
            if (newmap)
            {
                General.Settings.LastUsedConfigName = configinfo.Name;                 //mxd

                if ((locations.Count == 0) && (configinfo.Resources.Count == 0) &&
                    MessageBox.Show(this, "You are about to make a map without selecting any resources. Textures, flats and " +
                                    "sprites may not be shown correctly or may not show up at all. Do you want to continue?", Application.ProductName,
                                    MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2) == DialogResult.No)
                {
                    return;
                }
            }

            // Next checks are only for maps that are already opened
            if (!newmap)
            {
                // Now we check if the map name the user has given does already exist in the source WAD file
                // We have to warn the user about that, because it would create a level name conflict in the WAD

                // Level name changed and the map exists in a source wad?
                if ((levelname.Text != options.CurrentName) && (General.Map != null) &&
                    (!string.IsNullOrEmpty(General.Map.FilePathName)) && File.Exists(General.Map.FilePathName))
                {
                    // Open the source wad file to check for conflicting name
                    WAD  sourcewad       = new WAD(General.Map.FilePathName, true);
                    bool conflictingname = (sourcewad.FindLumpIndex(levelname.Text) > -1);
                    sourcewad.Dispose();

                    // Names conflict?
                    if (conflictingname)
                    {
                        // Show warning!
                        if (General.ShowWarningMessage("The map name \"" + levelname.Text + "\" is already in use by another map or data lump in the source WAD file. Saving your map with this name will cause conflicting data lumps in the WAD file. Do you want to continue?", MessageBoxButtons.YesNo, MessageBoxDefaultButton.Button2) == DialogResult.No)
                        {
                            return;
                        }
                    }
                }

                //mxd. If the map was never saved and it's name was changed, update filename
                if ((levelname.Text != options.CurrentName) && (General.Map != null) && (string.IsNullOrEmpty(General.Map.FilePathName)))
                {
                    General.Map.FileTitle = levelname.Text + ".wad";
                }

                // When the user changed the configuration to one that has a different read/write interface,
                // we have to warn the user that the map may not be compatible.

                // Configuration changed?
                if ((options.ConfigFile != "") && (configinfo.Filename != options.ConfigFile))
                {
                    // Check if the config uses a different IO interface
                    if (configinfo.Configuration.ReadSetting("formatinterface", "") != General.Map.Config.FormatInterface)
                    {
                        // Warn the user about IO interface change
                        if (General.ShowWarningMessage("The game configuration you selected uses a different file format than your current map. Because your map was not designed for this format it may cause the map to work incorrectly in the game. Do you want to continue?", MessageBoxButtons.YesNo, MessageBoxDefaultButton.Button2) == DialogResult.No)
                        {
                            // Reset to old configuration
                            for (int i = 0; i < config.Items.Count; i++)
                            {
                                // Is this configuration the old config?
                                if (string.Compare((config.Items[i] as ConfigurationInfo).Filename, options.ConfigFile, true) == 0)
                                {
                                    // Select this item
                                    config.SelectedIndex = i;
                                }
                            }
                            return;
                        }

                        //mxd. Otherwise map data won't be saved if a user decides to save the map right after converting to new map format
                        General.Map.IsChanged = true;
                    }
                }
            }

            // Apply changes
            options.ClearResources();
            options.ConfigFile    = (config.SelectedItem as ConfigurationInfo).Filename;          //mxd
            options.CurrentName   = levelname.Text.Trim().ToUpper();
            options.StrictPatches = strictpatches.Checked;
            options.CopyResources(datalocations.GetResources());

            //mxd. Store script compiler
            if (scriptcompiler.Enabled)
            {
                ScriptConfiguration scriptcfg = scriptcompiler.SelectedItem as ScriptConfiguration;
                foreach (KeyValuePair <string, ScriptConfiguration> group in General.CompiledScriptConfigs)
                {
                    if (group.Value == scriptcfg)
                    {
                        options.ScriptCompiler = group.Key;
                        break;
                    }
                }
            }

            //mxd. Use long texture names?
            if (longtexturenames.Enabled)
            {
                options.UseLongTextureNames = longtexturenames.Checked;
            }

            //mxd. Resource usage
            options.UseResourcesInReadonlyMode = readonlyresources.Checked;

            // Hide window
            this.DialogResult = DialogResult.OK;
            this.Close();
        }