From 81a6e6c328baa5514c1d7e6382efbcec7143a33a Mon Sep 17 00:00:00 2001 From: eaxvac Date: Mon, 7 Dec 2020 03:03:50 +0800 Subject: [PATCH] [HaCreator] Create a new map by cloning - speeds things up --- HaCreator/GUI/Load.cs | 8 +- HaCreator/GUI/New.Designer.cs | 144 ++++++++++++++++++++++++++++++---- HaCreator/GUI/New.cs | 86 ++++++++++++++++++-- 3 files changed, 211 insertions(+), 27 deletions(-) diff --git a/HaCreator/GUI/Load.cs b/HaCreator/GUI/Load.cs index b21cd6f2..2a6f60aa 100644 --- a/HaCreator/GUI/Load.cs +++ b/HaCreator/GUI/Load.cs @@ -21,11 +21,9 @@ namespace HaCreator.GUI { public partial class Load : System.Windows.Forms.Form { - public bool usebasepng = false; - public int bufferzone = 100; - private MultiBoard multiBoard; - private System.Windows.Controls.TabControl Tabs; - private System.Windows.RoutedEventHandler[] rightClickHandler; + private readonly MultiBoard multiBoard; + private readonly System.Windows.Controls.TabControl Tabs; + private readonly System.Windows.RoutedEventHandler[] rightClickHandler; private readonly string defaultMapNameFilter; diff --git a/HaCreator/GUI/New.Designer.cs b/HaCreator/GUI/New.Designer.cs index a02ebb3c..56be1d32 100644 --- a/HaCreator/GUI/New.Designer.cs +++ b/HaCreator/GUI/New.Designer.cs @@ -33,14 +33,25 @@ private void InitializeComponent() this.newHeight = new System.Windows.Forms.NumericUpDown(); this.newWidth = new System.Windows.Forms.NumericUpDown(); this.newButton = new System.Windows.Forms.Button(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.tabPage2 = new System.Windows.Forms.TabPage(); + this.label3 = new System.Windows.Forms.Label(); + this.numericUpDown1 = new System.Windows.Forms.NumericUpDown(); + this.buttonCreateFrmClone = new System.Windows.Forms.Button(); + this.button_SelectCloneMap = new System.Windows.Forms.Button(); ((System.ComponentModel.ISupportInitialize)(this.newHeight)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.newWidth)).BeginInit(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.tabPage2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).BeginInit(); this.SuspendLayout(); // // label2 // this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(9, 32); + this.label2.Location = new System.Drawing.Point(7, 33); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(42, 13); this.label2.TabIndex = 17; @@ -49,7 +60,7 @@ private void InitializeComponent() // label1 // this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(9, 12); + this.label1.Location = new System.Drawing.Point(7, 13); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(42, 13); this.label1.TabIndex = 16; @@ -57,14 +68,14 @@ private void InitializeComponent() // // newHeight // - this.newHeight.Location = new System.Drawing.Point(67, 31); + this.newHeight.Location = new System.Drawing.Point(65, 32); this.newHeight.Maximum = new decimal(new int[] { 2147483647, 0, 0, 0}); this.newHeight.Name = "newHeight"; - this.newHeight.Size = new System.Drawing.Size(127, 22); + this.newHeight.Size = new System.Drawing.Size(260, 22); this.newHeight.TabIndex = 1; this.newHeight.Value = new decimal(new int[] { 600, @@ -74,14 +85,14 @@ private void InitializeComponent() // // newWidth // - this.newWidth.Location = new System.Drawing.Point(67, 9); + this.newWidth.Location = new System.Drawing.Point(65, 10); this.newWidth.Maximum = new decimal(new int[] { 2147483647, 0, 0, 0}); this.newWidth.Name = "newWidth"; - this.newWidth.Size = new System.Drawing.Size(127, 22); + this.newWidth.Size = new System.Drawing.Size(260, 22); this.newWidth.TabIndex = 0; this.newWidth.Value = new decimal(new int[] { 800, @@ -92,36 +103,130 @@ private void InitializeComponent() // newButton // this.newButton.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; - this.newButton.Location = new System.Drawing.Point(9, 55); + this.newButton.Location = new System.Drawing.Point(7, 121); this.newButton.Name = "newButton"; - this.newButton.Size = new System.Drawing.Size(185, 31); + this.newButton.Size = new System.Drawing.Size(318, 31); this.newButton.TabIndex = 2; this.newButton.Text = "Create"; this.newButton.Click += new System.EventHandler(this.newButton_Click); // + // tabControl1 + // + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.tabPage2); + this.tabControl1.Location = new System.Drawing.Point(1, 2); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(344, 187); + this.tabControl1.TabIndex = 18; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.label1); + this.tabPage1.Controls.Add(this.newButton); + this.tabPage1.Controls.Add(this.newWidth); + this.tabPage1.Controls.Add(this.label2); + this.tabPage1.Controls.Add(this.newHeight); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(336, 161); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "New"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // tabPage2 + // + this.tabPage2.Controls.Add(this.button_SelectCloneMap); + this.tabPage2.Controls.Add(this.buttonCreateFrmClone); + this.tabPage2.Controls.Add(this.numericUpDown1); + this.tabPage2.Controls.Add(this.label3); + this.tabPage2.Location = new System.Drawing.Point(4, 22); + this.tabPage2.Name = "tabPage2"; + this.tabPage2.Padding = new System.Windows.Forms.Padding(3); + this.tabPage2.Size = new System.Drawing.Size(336, 161); + this.tabPage2.TabIndex = 1; + this.tabPage2.Text = "Clone"; + this.tabPage2.UseVisualStyleBackColor = true; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(7, 14); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(47, 13); + this.label3.TabIndex = 17; + this.label3.Text = "Map ID:"; + // + // numericUpDown1 + // + this.numericUpDown1.Enabled = false; + this.numericUpDown1.Location = new System.Drawing.Point(60, 12); + this.numericUpDown1.Maximum = new decimal(new int[] { + 2147483647, + 0, + 0, + 0}); + this.numericUpDown1.Minimum = new decimal(new int[] { + 1, + 0, + 0, + -2147483648}); + this.numericUpDown1.Name = "numericUpDown1"; + this.numericUpDown1.Size = new System.Drawing.Size(265, 22); + this.numericUpDown1.TabIndex = 18; + this.numericUpDown1.Value = new decimal(new int[] { + 1, + 0, + 0, + -2147483648}); + this.numericUpDown1.ValueChanged += new System.EventHandler(this.numericUpDown1_ValueChanged); + // + // buttonCreateFrmClone + // + this.buttonCreateFrmClone.AccessibleRole = System.Windows.Forms.AccessibleRole.PushButton; + this.buttonCreateFrmClone.Enabled = false; + this.buttonCreateFrmClone.Location = new System.Drawing.Point(10, 121); + this.buttonCreateFrmClone.Name = "buttonCreateFrmClone"; + this.buttonCreateFrmClone.Size = new System.Drawing.Size(315, 31); + this.buttonCreateFrmClone.TabIndex = 19; + this.buttonCreateFrmClone.Text = "Create"; + this.buttonCreateFrmClone.Click += new System.EventHandler(this.buttonCreateFrmClone_Click); + // + // button_SelectCloneMap + // + this.button_SelectCloneMap.Location = new System.Drawing.Point(240, 40); + this.button_SelectCloneMap.Name = "button_SelectCloneMap"; + this.button_SelectCloneMap.Size = new System.Drawing.Size(85, 23); + this.button_SelectCloneMap.TabIndex = 20; + this.button_SelectCloneMap.Text = "Select map"; + this.button_SelectCloneMap.UseVisualStyleBackColor = true; + this.button_SelectCloneMap.Click += new System.EventHandler(this.button_SelectCloneMap_Click); + // // New // this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; - this.ClientSize = new System.Drawing.Size(203, 95); - this.Controls.Add(this.newButton); - this.Controls.Add(this.label2); - this.Controls.Add(this.label1); - this.Controls.Add(this.newHeight); - this.Controls.Add(this.newWidth); + this.ClientSize = new System.Drawing.Size(342, 188); + this.Controls.Add(this.tabControl1); this.Font = new System.Drawing.Font("Segoe UI", 8.25F); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; this.KeyPreview = true; this.MinimizeBox = false; this.Name = "New"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; - this.Text = "New"; + this.Text = "Create a new map"; this.Load += new System.EventHandler(this.New_Load); this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.New_KeyDown); ((System.ComponentModel.ISupportInitialize)(this.newHeight)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.newWidth)).EndInit(); + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage1.PerformLayout(); + this.tabPage2.ResumeLayout(false); + this.tabPage2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.numericUpDown1)).EndInit(); this.ResumeLayout(false); - this.PerformLayout(); } @@ -132,5 +237,12 @@ private void InitializeComponent() private System.Windows.Forms.NumericUpDown newHeight; private System.Windows.Forms.NumericUpDown newWidth; private System.Windows.Forms.Button newButton; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.TabPage tabPage2; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Button buttonCreateFrmClone; + private System.Windows.Forms.NumericUpDown numericUpDown1; + private System.Windows.Forms.Button button_SelectCloneMap; } } \ No newline at end of file diff --git a/HaCreator/GUI/New.cs b/HaCreator/GUI/New.cs index 8289387b..e3ef1353 100644 --- a/HaCreator/GUI/New.cs +++ b/HaCreator/GUI/New.cs @@ -4,8 +4,11 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +using HaCreator.GUI.InstanceEditor; using HaCreator.MapEditor; using HaCreator.Wz; +using MapleLib.WzLib; +using MapleLib.WzLib.WzProperties; using System; using System.Collections.Generic; using System.ComponentModel; @@ -33,15 +36,91 @@ public New(MultiBoard board, System.Windows.Controls.TabControl Tabs, System.Win this.rightClickHandler = rightClickHandler; } + /// + /// On Load + /// + /// + /// + private void New_Load(object sender, EventArgs e) + { + newWidth.Text = ApplicationSettings.LastMapSize.Width.ToString(); + newHeight.Text = ApplicationSettings.LastMapSize.Height.ToString(); + } + + #region Create new private void newButton_Click(object sender, EventArgs e) { int w = int.Parse(newWidth.Text); int h = int.Parse(newHeight.Text); + MapLoader.CreateMap("", "", -1, "", MapLoader.CreateStandardMapMenu(rightClickHandler), new XNA.Point(w, h), new XNA.Point(w / 2, h / 2), Tabs, multiBoard); DialogResult = DialogResult.OK; Close(); } + #endregion + #region Clone map + /// + /// Select a map + /// + /// + /// + private void button_SelectCloneMap_Click(object sender, EventArgs e) + { + LoadMapSelector selector = new LoadMapSelector(numericUpDown1); + selector.ShowDialog(); + } + + /// + /// On map id selection changed + /// + /// + /// + private void numericUpDown1_ValueChanged(object sender, EventArgs e) + { + if (numericUpDown1.Value != -1) + { + buttonCreateFrmClone.Enabled = true; // enable the button after selecting a map + } + } + + + /// + /// Button on create map + /// + /// + /// + private void buttonCreateFrmClone_Click(object sender, EventArgs e) + { + if (numericUpDown1.Value == -1) + return; + + long mapid = (long) numericUpDown1.Value; // should be int, but anyway in case the future version uses more than 2.1b + string mapId_str = mapid.ToString(); + string mapId_PaddingZeros = mapId_str.PadLeft(9, '0') + ".img"; // 100000000.img.xml + string mapcat = "Map" + mapId_PaddingZeros.Substring(0, 1); + + WzDirectory directory = Program.WzManager.FindMapWz(mapcat); + WzImage mapImage = (WzImage)directory[mapId_PaddingZeros]; + + if (mapImage == null) + { + MessageBox.Show("Map is null."); + return; + } + + WzSubProperty strMapProp = WzInfoTools.GetMapStringProp(mapId_str); + string cloneMapName = WzInfoTools.GetMapName(strMapProp); + string cloneStreetName = WzInfoTools.GetMapStreetName(strMapProp); + string cloneCategoryName = WzInfoTools.GetMapCategoryName(strMapProp); + + MapLoader.CreateMapFromImage(-1 /*mapid*/, mapImage.DeepClone(), cloneMapName, cloneStreetName, cloneCategoryName, (WzSubProperty) strMapProp.DeepClone(), Tabs, multiBoard, rightClickHandler); + + Close(); + } + #endregion + + #region Misc private void New_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Escape) @@ -53,11 +132,6 @@ private void New_KeyDown(object sender, KeyEventArgs e) newButton_Click(null, null); } } - - private void New_Load(object sender, EventArgs e) - { - newWidth.Text = ApplicationSettings.LastMapSize.Width.ToString(); - newHeight.Text = ApplicationSettings.LastMapSize.Height.ToString(); - } + #endregion } }