From 21735a349e5a776626890a11cf4cfe4092e95917 Mon Sep 17 00:00:00 2001
From: Li <li@silica.codes>
Date: Mon, 28 Nov 2022 11:30:44 +1300
Subject: [PATCH 1/4] Fix some bugz

---
 .gitignore                                |  3 ++
 SilicaTilesEditor/MainForm.Designer.cs    | 28 ++++++-------
 SilicaTilesEditor/TileMapEditorControl.cs |  9 +++--
 SilicaTilesEditor/TileSelectorControl.cs  |  2 +-
 SilicaTilesEditor/Tileset.cs              | 48 +++++++++++++----------
 5 files changed, 51 insertions(+), 39 deletions(-)
 create mode 100644 .gitignore

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..4e52eb2
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+.vs/*
+SilicaTilesEditor/obj/*
+SilicaTilesEditor/bin/*
\ No newline at end of file
diff --git a/SilicaTilesEditor/MainForm.Designer.cs b/SilicaTilesEditor/MainForm.Designer.cs
index dff39e7..d2dce73 100644
--- a/SilicaTilesEditor/MainForm.Designer.cs
+++ b/SilicaTilesEditor/MainForm.Designer.cs
@@ -48,9 +48,9 @@ namespace SilicaTilesEditor
             this.tileset7 = new System.Windows.Forms.ToolStripMenuItem();
             this.lookingAt = new System.Windows.Forms.Label();
             this.layout = new System.Windows.Forms.TableLayoutPanel();
+            this.selTileId = new System.Windows.Forms.Label();
             this.tileSelector = new SilicaTilesEditor.TileSelectorControl();
             this.tileList = new SilicaTilesEditor.TileMapEditorControl();
-            this.selTileId = new System.Windows.Forms.Label();
             this.toolMenu.SuspendLayout();
             this.layout.SuspendLayout();
             this.SuspendLayout();
@@ -82,21 +82,21 @@ namespace SilicaTilesEditor
             // newItem
             // 
             this.newItem.Name = "newItem";
-            this.newItem.Size = new System.Drawing.Size(180, 22);
+            this.newItem.Size = new System.Drawing.Size(121, 22);
             this.newItem.Text = "New File";
             this.newItem.Click += new System.EventHandler(this.newItem_Click);
             // 
             // loadItem
             // 
             this.loadItem.Name = "loadItem";
-            this.loadItem.Size = new System.Drawing.Size(180, 22);
+            this.loadItem.Size = new System.Drawing.Size(121, 22);
             this.loadItem.Text = "Load File";
             this.loadItem.Click += new System.EventHandler(this.loadItem_Click);
             // 
             // saveItem
             // 
             this.saveItem.Name = "saveItem";
-            this.saveItem.Size = new System.Drawing.Size(180, 22);
+            this.saveItem.Size = new System.Drawing.Size(121, 22);
             this.saveItem.Text = "Save File";
             this.saveItem.Click += new System.EventHandler(this.saveItem_Click);
             // 
@@ -234,6 +234,16 @@ namespace SilicaTilesEditor
             this.layout.Size = new System.Drawing.Size(1107, 487);
             this.layout.TabIndex = 4;
             // 
+            // selTileId
+            // 
+            this.selTileId.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+            this.selTileId.AutoSize = true;
+            this.selTileId.Location = new System.Drawing.Point(12, 515);
+            this.selTileId.Name = "selTileId";
+            this.selTileId.Size = new System.Drawing.Size(89, 13);
+            this.selTileId.TabIndex = 5;
+            this.selTileId.Text = "Seleted Tile ID: 0";
+            // 
             // tileSelector
             // 
             this.tileSelector.AutoScroll = true;
@@ -253,16 +263,6 @@ namespace SilicaTilesEditor
             this.tileList.Size = new System.Drawing.Size(852, 481);
             this.tileList.TabIndex = 1;
             // 
-            // selTileId
-            // 
-            this.selTileId.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
-            this.selTileId.AutoSize = true;
-            this.selTileId.Location = new System.Drawing.Point(12, 515);
-            this.selTileId.Name = "selTileId";
-            this.selTileId.Size = new System.Drawing.Size(89, 13);
-            this.selTileId.TabIndex = 5;
-            this.selTileId.Text = "Seleted Tile ID: 1";
-            // 
             // MainForm
             // 
             this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
diff --git a/SilicaTilesEditor/TileMapEditorControl.cs b/SilicaTilesEditor/TileMapEditorControl.cs
index 4acd599..d0e4fa8 100644
--- a/SilicaTilesEditor/TileMapEditorControl.cs
+++ b/SilicaTilesEditor/TileMapEditorControl.cs
@@ -46,7 +46,7 @@ namespace SilicaTilesEditor
 
                 this.Invalidate();
                 if(Map.MapLoaded)
-                    Program.form.lookingAt.Text = "Looking at: " + selectedTileX + "," + selectedTileY + "(" + Map.GetTileId(selectedTileX, selectedTileY, false) + ":" + Map.GetTileId(selectedTileX, selectedTileY, true) + ")";
+                    Program.form.lookingAt.Text = "Looking at: " + selectedTileX + "," + selectedTileY + "(" + (Map.GetTileId(selectedTileX, selectedTileY, false) - 1) + ":" + (Map.GetTileId(selectedTileX, selectedTileY, true) - 1) + ")";
             }
 
         }
@@ -89,7 +89,7 @@ namespace SilicaTilesEditor
             int relY = 0;
             if (Map.MapLoaded)
             {
-
+                /* Draw Terrain Tiles */
                 for (int y = offsetY; y < (tlistHeight + offsetY)+1; y++)
                 {
                     relX = -1;
@@ -105,7 +105,7 @@ namespace SilicaTilesEditor
                     }
                     relY++;
                 }
-
+                /* Draw Overlay Tiles */
                 if (DisplayOverlay)
                 {
 
@@ -118,10 +118,11 @@ namespace SilicaTilesEditor
                         for (int x = offsetX; x < (tlistWidth + offsetX) + 1; x++)
                         {
                             relX++;
-                            int tileId = Map.GetTileId(x, y, true) - 1;
+                            int tileId = Map.GetTileId(x, y, true) -1;
                             Bitmap Tile = null;
                             if (tileId >= Tileset.OverlayList.Length)
                             {
+                                /* Draw Extenal Overlay Tiles */
                                 tileId -= Tileset.OverlayList.Length;
                                 Tile = Tileset.GetTileset(ExtOverlay)[tileId];
                             }
diff --git a/SilicaTilesEditor/TileSelectorControl.cs b/SilicaTilesEditor/TileSelectorControl.cs
index 24ab0d2..4d21db9 100644
--- a/SilicaTilesEditor/TileSelectorControl.cs
+++ b/SilicaTilesEditor/TileSelectorControl.cs
@@ -33,7 +33,7 @@ namespace SilicaTilesEditor
             else
                 SelTileY = Convert.ToInt32(Math.Floor((float)VerticalScroll.Value / 48.0)) + Convert.ToInt32(Math.Floor((float)(e.Y + tinyOffsetY) / 48.0));
 
-            SelectedTileid = ((SelTileY * maxX) + SelTileX) + 1;
+            SelectedTileid = ((SelTileY * maxX) + SelTileX);
 
             bool change = false;
             if(SelectedTileid > 0xFF)
diff --git a/SilicaTilesEditor/Tileset.cs b/SilicaTilesEditor/Tileset.cs
index 5f382a7..1848a24 100644
--- a/SilicaTilesEditor/Tileset.cs
+++ b/SilicaTilesEditor/Tileset.cs
@@ -7,17 +7,17 @@ namespace SilicaTilesEditor
     class Tileset
     {
         public static Bitmap[] TerrainList = new Bitmap[((Resources.TerrainTileset.Height / 32) * (Resources.TerrainTileset.Width / 32)) + 1];
-        public static Bitmap[] OverlayList = new Bitmap[193];
+        public static Bitmap[] OverlayList = new Bitmap[192 + 1];
         public static Bitmap[] ExtOverlays = new Bitmap[8] { Resources.Tileset0, Resources.Tileset1, Resources.Tileset2, Resources.Tileset3, Resources.Tileset4, Resources.Tileset5, Resources.Tileset6, Resources.Tileset7 };
 
-        public static Bitmap[] ExtNorm = new Bitmap[((Resources.Tileset0.Height / 48) * (Resources.Tileset0.Width / 32)) + 1];
-        public static Bitmap[] ExtSnow = new Bitmap[((Resources.Tileset1.Height / 48) * (Resources.Tileset1.Width / 32)) + 1];
-        public static Bitmap[] ExtSand = new Bitmap[((Resources.Tileset2.Height / 48) * (Resources.Tileset2.Width / 32)) + 1];
-        public static Bitmap[] ExtPirt = new Bitmap[((Resources.Tileset3.Height / 48) * (Resources.Tileset3.Width / 32)) + 1];
-        public static Bitmap[] ExtFlwr = new Bitmap[((Resources.Tileset4.Height / 48) * (Resources.Tileset4.Width / 32)) + 1];
-        public static Bitmap[] ExtJngl = new Bitmap[((Resources.Tileset5.Height / 48) * (Resources.Tileset5.Width / 32)) + 1];
-        public static Bitmap[] ExtClwd = new Bitmap[((Resources.Tileset6.Height / 48) * (Resources.Tileset6.Width / 32)) + 1];
-        public static Bitmap[] ExtVolc = new Bitmap[((Resources.Tileset7.Height / 48) * (Resources.Tileset7.Width / 32)) + 1];
+        public static Bitmap[] ExtNorm = new Bitmap[((Resources.Tileset0.Height / 48) * (Resources.Tileset0.Width / 32))];
+        public static Bitmap[] ExtSnow = new Bitmap[((Resources.Tileset1.Height / 48) * (Resources.Tileset1.Width / 32))];
+        public static Bitmap[] ExtSand = new Bitmap[((Resources.Tileset2.Height / 48) * (Resources.Tileset2.Width / 32))];
+        public static Bitmap[] ExtPirt = new Bitmap[((Resources.Tileset3.Height / 48) * (Resources.Tileset3.Width / 32))];
+        public static Bitmap[] ExtFlwr = new Bitmap[((Resources.Tileset4.Height / 48) * (Resources.Tileset4.Width / 32))];
+        public static Bitmap[] ExtJngl = new Bitmap[((Resources.Tileset5.Height / 48) * (Resources.Tileset5.Width / 32))];
+        public static Bitmap[] ExtClwd = new Bitmap[((Resources.Tileset6.Height / 48) * (Resources.Tileset6.Width / 32))];
+        public static Bitmap[] ExtVolc = new Bitmap[((Resources.Tileset7.Height / 48) * (Resources.Tileset7.Width / 32))];
 
         public static Bitmap[] JoinedTileset
         {
@@ -83,6 +83,8 @@ namespace SilicaTilesEditor
         {
             Console.WriteLine("Reading Terrain.png...");
             int i = 0;
+            Rectangle dstRect = new Rectangle(0, 0, 32, 32);
+            Rectangle srcRect = new Rectangle(0, 0, 32, 32);
 
             for (int y = 0; y < (Resources.TerrainTileset.Height/32); y++)
             {
@@ -90,9 +92,9 @@ namespace SilicaTilesEditor
                 {
                     i++;
                     TerrainList[i] = new Bitmap(32, 32);
-                    int posx = x * 32;
-                    int posy = y * 32;
-                    CopyRegionIntoImage(Resources.TerrainTileset, new Rectangle(posx, posy, 32, 32), TerrainList[i], new Rectangle(0, 0, 32, 32));
+                    srcRect.X = x * 32;
+                    srcRect.Y = y * 32;
+                    CopyRegionIntoImage(Resources.TerrainTileset, srcRect, TerrainList[i], dstRect);
                 }
             }
             ReadAllTerrain = true;
@@ -100,7 +102,9 @@ namespace SilicaTilesEditor
 
         public static void ReadExtOverlay()
         {
-            for(int picid = 0; picid <= 7; picid++)
+            Rectangle dstRect = new Rectangle(0, 0, 32, 48);
+            Rectangle srcRect = new Rectangle(0, 0, 32, 48);
+            for (int picid = 0; picid <= 7; picid++)
             {
                 Bitmap[] TilesetList = GetTileset(picid);
                 Bitmap Tileset = ExtOverlays[picid];
@@ -112,11 +116,11 @@ namespace SilicaTilesEditor
                 {
                     for (int x = 0; x < (Tileset.Width / 32); x++)
                     {
-                        i++;
                         TilesetList[i] = new Bitmap(32, 48);
-                        int posx = x * 32;
-                        int posy = y * 48;
-                        CopyRegionIntoImage(Tileset, new Rectangle(posx, posy, 32, 48), TilesetList[i], new Rectangle(0, 0, 32, 48));
+                        srcRect.X = x * 32;
+                        srcRect.Y = y * 48;
+                        CopyRegionIntoImage(Tileset, srcRect, TilesetList[i], dstRect);
+                        i++;
                     }
                 }
                 Console.WriteLine("Total Tiles Read: " + i.ToString());
@@ -128,15 +132,19 @@ namespace SilicaTilesEditor
             int i = 0;
             int OVERLAY_SIZE = 24;
 
+            Rectangle dstRect = new Rectangle(0, 0, 32, 48);
+            Rectangle srcRect = new Rectangle(0, 0, 32, 48);
+
             for (int y = 0; y < OVERLAY_SIZE; y++)
             {
                 for (int x = 0; x < (Resources.OverlayTileset.Width / 32); x++)
                 {
                     i++;
                     OverlayList[i] = new Bitmap(32, 48);
-                    int posx = x * 32;
-                    int posy = y * 48;
-                    CopyRegionIntoImage(Resources.OverlayTileset, new Rectangle(posx, posy, 32, 48), OverlayList[i], new Rectangle(0, 0, 32, 48));
+                    srcRect.X = x * 32;
+                    srcRect.Y = y * 48;
+
+                    CopyRegionIntoImage(Resources.OverlayTileset, srcRect, OverlayList[i], dstRect);
                 }
             }
         }

From f08b53243e758b13f16cd9a3919e6073386acea5 Mon Sep 17 00:00:00 2001
From: Li <li@silica.codes>
Date: Mon, 28 Nov 2022 11:55:08 +1300
Subject: [PATCH 2/4] Improve load times

---
 SilicaTilesEditor/MainForm.cs |  7 ++++---
 SilicaTilesEditor/Tileset.cs  | 23 ++++++++++++++++++-----
 2 files changed, 22 insertions(+), 8 deletions(-)

diff --git a/SilicaTilesEditor/MainForm.cs b/SilicaTilesEditor/MainForm.cs
index bbe8c20..aac65ff 100644
--- a/SilicaTilesEditor/MainForm.cs
+++ b/SilicaTilesEditor/MainForm.cs
@@ -1,4 +1,6 @@
 using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
 using System.Windows.Forms;
 
 namespace SilicaTilesEditor
@@ -42,9 +44,8 @@ namespace SilicaTilesEditor
         }
         private void MainForm_Load(object sender, EventArgs e)
         {
-            Tileset.ReadTerrain();
-            Tileset.ReadOverlay();
-            Tileset.ReadExtOverlay();
+            Tileset.ReadAllTiles();
+
             layout.ColumnStyles[0].Width = (32*7) + SystemInformation.VerticalScrollBarWidth;
             tileset0.Checked = true;
             tileList.ExtOverlay = 0;
diff --git a/SilicaTilesEditor/Tileset.cs b/SilicaTilesEditor/Tileset.cs
index 1848a24..ce200ba 100644
--- a/SilicaTilesEditor/Tileset.cs
+++ b/SilicaTilesEditor/Tileset.cs
@@ -1,6 +1,9 @@
 using SilicaTilesEditor.Properties;
 using System;
+using System.Collections.Generic;
 using System.Drawing;
+using System.Runtime.CompilerServices;
+using System.Threading.Tasks;
 
 namespace SilicaTilesEditor
 {
@@ -18,7 +21,6 @@ namespace SilicaTilesEditor
         public static Bitmap[] ExtJngl = new Bitmap[((Resources.Tileset5.Height / 48) * (Resources.Tileset5.Width / 32))];
         public static Bitmap[] ExtClwd = new Bitmap[((Resources.Tileset6.Height / 48) * (Resources.Tileset6.Width / 32))];
         public static Bitmap[] ExtVolc = new Bitmap[((Resources.Tileset7.Height / 48) * (Resources.Tileset7.Width / 32))];
-
         public static Bitmap[] JoinedTileset
         {
             get
@@ -79,7 +81,19 @@ namespace SilicaTilesEditor
             }
         }
 
-        public static void ReadTerrain()
+        public static void ReadAllTiles()
+        {
+            Task[] tileTasks = new Task[3];
+
+            tileTasks[0] = Task.Run(() => readTerrain());
+            tileTasks[1] = Task.Run(() => readOverlay());
+            tileTasks[2] = Task.Run(() => readExtOverlay());
+
+            Task.WaitAll(tileTasks);
+            ReadAllTerrain = true;
+            ReadAllOverlay = true;
+        }
+        private static void readTerrain()
         {
             Console.WriteLine("Reading Terrain.png...");
             int i = 0;
@@ -97,10 +111,9 @@ namespace SilicaTilesEditor
                     CopyRegionIntoImage(Resources.TerrainTileset, srcRect, TerrainList[i], dstRect);
                 }
             }
-            ReadAllTerrain = true;
         }
 
-        public static void ReadExtOverlay()
+        private static void readExtOverlay()
         {
             Rectangle dstRect = new Rectangle(0, 0, 32, 48);
             Rectangle srcRect = new Rectangle(0, 0, 32, 48);
@@ -126,7 +139,7 @@ namespace SilicaTilesEditor
                 Console.WriteLine("Total Tiles Read: " + i.ToString());
             }
         }
-        public static void ReadOverlay()
+        private static void readOverlay()
         {
             Console.WriteLine("Reading Overlay.png...");
             int i = 0;

From e560c569a2fb1894188f5dd4e22c25ce065dc45d Mon Sep 17 00:00:00 2001
From: Li <li@silica.codes>
Date: Mon, 28 Nov 2022 12:08:22 +1300
Subject: [PATCH 3/4] Improve load time 2

---
 SilicaTilesEditor/MainForm.Designer.cs |  1 +
 SilicaTilesEditor/MainForm.cs          |  8 +++--
 SilicaTilesEditor/Tileset.cs           | 46 ++++++++++++++++----------
 3 files changed, 35 insertions(+), 20 deletions(-)

diff --git a/SilicaTilesEditor/MainForm.Designer.cs b/SilicaTilesEditor/MainForm.Designer.cs
index d2dce73..56370f2 100644
--- a/SilicaTilesEditor/MainForm.Designer.cs
+++ b/SilicaTilesEditor/MainForm.Designer.cs
@@ -275,6 +275,7 @@ namespace SilicaTilesEditor
             this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
             this.Name = "MainForm";
             this.Text = "Horse Isle Map Editor";
+            this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.MainForm_FormClosing);
             this.Load += new System.EventHandler(this.MainForm_Load);
             this.toolMenu.ResumeLayout(false);
             this.toolMenu.PerformLayout();
diff --git a/SilicaTilesEditor/MainForm.cs b/SilicaTilesEditor/MainForm.cs
index aac65ff..5e8da4d 100644
--- a/SilicaTilesEditor/MainForm.cs
+++ b/SilicaTilesEditor/MainForm.cs
@@ -1,6 +1,5 @@
 using System;
-using System.Collections.Generic;
-using System.Threading.Tasks;
+using System.Diagnostics;
 using System.Windows.Forms;
 
 namespace SilicaTilesEditor
@@ -173,5 +172,10 @@ namespace SilicaTilesEditor
                 MessageBox.Show("File saved successfully.", "Save", MessageBoxButtons.OK, MessageBoxIcon.Information);
             }
         }
+
+        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
+        {
+            Process.GetCurrentProcess().Kill();
+        }
     }
 }
diff --git a/SilicaTilesEditor/Tileset.cs b/SilicaTilesEditor/Tileset.cs
index ce200ba..4d6121e 100644
--- a/SilicaTilesEditor/Tileset.cs
+++ b/SilicaTilesEditor/Tileset.cs
@@ -1,26 +1,36 @@
 using SilicaTilesEditor.Properties;
 using System;
-using System.Collections.Generic;
 using System.Drawing;
-using System.Runtime.CompilerServices;
 using System.Threading.Tasks;
 
 namespace SilicaTilesEditor
 {
     class Tileset
     {
-        public static Bitmap[] TerrainList = new Bitmap[((Resources.TerrainTileset.Height / 32) * (Resources.TerrainTileset.Width / 32)) + 1];
-        public static Bitmap[] OverlayList = new Bitmap[192 + 1];
-        public static Bitmap[] ExtOverlays = new Bitmap[8] { Resources.Tileset0, Resources.Tileset1, Resources.Tileset2, Resources.Tileset3, Resources.Tileset4, Resources.Tileset5, Resources.Tileset6, Resources.Tileset7 };
+        public static Bitmap CacheTerrainTileset = Resources.TerrainTileset;
+        public static Bitmap CacheOverlayTileset = Resources.OverlayTileset;
+        public static Bitmap CacheOverlayTileset0 = Resources.Tileset0;
+        public static Bitmap CacheOverlayTileset1 = Resources.Tileset1;
+        public static Bitmap CacheOverlayTileset2 = Resources.Tileset2;
+        public static Bitmap CacheOverlayTileset3 = Resources.Tileset3;
+        public static Bitmap CacheOverlayTileset4 = Resources.Tileset4;
+        public static Bitmap CacheOverlayTileset5 = Resources.Tileset5;
+        public static Bitmap CacheOverlayTileset6 = Resources.Tileset6;
+        public static Bitmap CacheOverlayTileset7 = Resources.Tileset7;
 
-        public static Bitmap[] ExtNorm = new Bitmap[((Resources.Tileset0.Height / 48) * (Resources.Tileset0.Width / 32))];
-        public static Bitmap[] ExtSnow = new Bitmap[((Resources.Tileset1.Height / 48) * (Resources.Tileset1.Width / 32))];
-        public static Bitmap[] ExtSand = new Bitmap[((Resources.Tileset2.Height / 48) * (Resources.Tileset2.Width / 32))];
-        public static Bitmap[] ExtPirt = new Bitmap[((Resources.Tileset3.Height / 48) * (Resources.Tileset3.Width / 32))];
-        public static Bitmap[] ExtFlwr = new Bitmap[((Resources.Tileset4.Height / 48) * (Resources.Tileset4.Width / 32))];
-        public static Bitmap[] ExtJngl = new Bitmap[((Resources.Tileset5.Height / 48) * (Resources.Tileset5.Width / 32))];
-        public static Bitmap[] ExtClwd = new Bitmap[((Resources.Tileset6.Height / 48) * (Resources.Tileset6.Width / 32))];
-        public static Bitmap[] ExtVolc = new Bitmap[((Resources.Tileset7.Height / 48) * (Resources.Tileset7.Width / 32))];
+
+        public static Bitmap[] TerrainList = new Bitmap[((CacheTerrainTileset.Height / 32) * (CacheTerrainTileset.Width / 32)) + 1];
+        public static Bitmap[] OverlayList = new Bitmap[192 + 1];
+        public static Bitmap[] ExtOverlays = new Bitmap[8] { CacheOverlayTileset0, CacheOverlayTileset1, CacheOverlayTileset2, CacheOverlayTileset3, CacheOverlayTileset4, CacheOverlayTileset5, CacheOverlayTileset6, CacheOverlayTileset7 };
+
+        public static Bitmap[] ExtNorm = new Bitmap[((CacheOverlayTileset0.Height / 48) * (CacheOverlayTileset0.Width / 32))];
+        public static Bitmap[] ExtSnow = new Bitmap[((CacheOverlayTileset1.Height / 48) * (CacheOverlayTileset1.Width / 32))];
+        public static Bitmap[] ExtSand = new Bitmap[((CacheOverlayTileset2.Height / 48) * (CacheOverlayTileset2.Width / 32))];
+        public static Bitmap[] ExtPirt = new Bitmap[((CacheOverlayTileset3.Height / 48) * (CacheOverlayTileset3.Width / 32))];
+        public static Bitmap[] ExtFlwr = new Bitmap[((CacheOverlayTileset4.Height / 48) * (CacheOverlayTileset4.Width / 32))];
+        public static Bitmap[] ExtJngl = new Bitmap[((CacheOverlayTileset5.Height / 48) * (CacheOverlayTileset5.Width / 32))];
+        public static Bitmap[] ExtClwd = new Bitmap[((CacheOverlayTileset6.Height / 48) * (CacheOverlayTileset6.Width / 32))];
+        public static Bitmap[] ExtVolc = new Bitmap[((CacheOverlayTileset7.Height / 48) * (CacheOverlayTileset7.Width / 32))];
         public static Bitmap[] JoinedTileset
         {
             get
@@ -100,15 +110,15 @@ namespace SilicaTilesEditor
             Rectangle dstRect = new Rectangle(0, 0, 32, 32);
             Rectangle srcRect = new Rectangle(0, 0, 32, 32);
 
-            for (int y = 0; y < (Resources.TerrainTileset.Height/32); y++)
+            for (int y = 0; y < (CacheTerrainTileset.Height/32); y++)
             {
-                for (int x = 0; x < (Resources.TerrainTileset.Width / 32); x++)
+                for (int x = 0; x < (CacheTerrainTileset.Width / 32); x++)
                 {
                     i++;
                     TerrainList[i] = new Bitmap(32, 32);
                     srcRect.X = x * 32;
                     srcRect.Y = y * 32;
-                    CopyRegionIntoImage(Resources.TerrainTileset, srcRect, TerrainList[i], dstRect);
+                    CopyRegionIntoImage(CacheTerrainTileset, srcRect, TerrainList[i], dstRect);
                 }
             }
         }
@@ -150,14 +160,14 @@ namespace SilicaTilesEditor
 
             for (int y = 0; y < OVERLAY_SIZE; y++)
             {
-                for (int x = 0; x < (Resources.OverlayTileset.Width / 32); x++)
+                for (int x = 0; x < (CacheOverlayTileset.Width / 32); x++)
                 {
                     i++;
                     OverlayList[i] = new Bitmap(32, 48);
                     srcRect.X = x * 32;
                     srcRect.Y = y * 48;
 
-                    CopyRegionIntoImage(Resources.OverlayTileset, srcRect, OverlayList[i], dstRect);
+                    CopyRegionIntoImage(CacheOverlayTileset, srcRect, OverlayList[i], dstRect);
                 }
             }
         }

From 0b951674c7691d322e17e975a4036ca33703c223 Mon Sep 17 00:00:00 2001
From: Li <li@silica.codes>
Date: Mon, 28 Nov 2022 12:14:54 +1300
Subject: [PATCH 4/4] cache resources, instead of looking up every time

---
 SilicaTilesEditor/Tileset.cs | 50 ++++++++++++++++++------------------
 1 file changed, 25 insertions(+), 25 deletions(-)

diff --git a/SilicaTilesEditor/Tileset.cs b/SilicaTilesEditor/Tileset.cs
index 4d6121e..0b8d771 100644
--- a/SilicaTilesEditor/Tileset.cs
+++ b/SilicaTilesEditor/Tileset.cs
@@ -7,30 +7,30 @@ namespace SilicaTilesEditor
 {
     class Tileset
     {
-        public static Bitmap CacheTerrainTileset = Resources.TerrainTileset;
-        public static Bitmap CacheOverlayTileset = Resources.OverlayTileset;
-        public static Bitmap CacheOverlayTileset0 = Resources.Tileset0;
-        public static Bitmap CacheOverlayTileset1 = Resources.Tileset1;
-        public static Bitmap CacheOverlayTileset2 = Resources.Tileset2;
-        public static Bitmap CacheOverlayTileset3 = Resources.Tileset3;
-        public static Bitmap CacheOverlayTileset4 = Resources.Tileset4;
-        public static Bitmap CacheOverlayTileset5 = Resources.Tileset5;
-        public static Bitmap CacheOverlayTileset6 = Resources.Tileset6;
-        public static Bitmap CacheOverlayTileset7 = Resources.Tileset7;
+        private static Bitmap cacheTerrainTileset = Resources.TerrainTileset;
+        private static Bitmap cacheOverlayTileset = Resources.OverlayTileset;
+        private static Bitmap cacheOverlayTileset0 = Resources.Tileset0;
+        private static Bitmap cacheOverlayTileset1 = Resources.Tileset1;
+        private static Bitmap cacheOverlayTileset2 = Resources.Tileset2;
+        private static Bitmap cacheOverlayTileset3 = Resources.Tileset3;
+        private static Bitmap cacheOverlayTileset4 = Resources.Tileset4;
+        private static Bitmap cacheOverlayTileset5 = Resources.Tileset5;
+        private static Bitmap cacheOverlayTileset6 = Resources.Tileset6;
+        private static Bitmap cacheOverlayTileset7 = Resources.Tileset7;
 
 
-        public static Bitmap[] TerrainList = new Bitmap[((CacheTerrainTileset.Height / 32) * (CacheTerrainTileset.Width / 32)) + 1];
+        public static Bitmap[] TerrainList = new Bitmap[((cacheTerrainTileset.Height / 32) * (cacheTerrainTileset.Width / 32)) + 1];
         public static Bitmap[] OverlayList = new Bitmap[192 + 1];
-        public static Bitmap[] ExtOverlays = new Bitmap[8] { CacheOverlayTileset0, CacheOverlayTileset1, CacheOverlayTileset2, CacheOverlayTileset3, CacheOverlayTileset4, CacheOverlayTileset5, CacheOverlayTileset6, CacheOverlayTileset7 };
+        public static Bitmap[] ExtOverlays = new Bitmap[8] { cacheOverlayTileset0, cacheOverlayTileset1, cacheOverlayTileset2, cacheOverlayTileset3, cacheOverlayTileset4, cacheOverlayTileset5, cacheOverlayTileset6, cacheOverlayTileset7 };
 
-        public static Bitmap[] ExtNorm = new Bitmap[((CacheOverlayTileset0.Height / 48) * (CacheOverlayTileset0.Width / 32))];
-        public static Bitmap[] ExtSnow = new Bitmap[((CacheOverlayTileset1.Height / 48) * (CacheOverlayTileset1.Width / 32))];
-        public static Bitmap[] ExtSand = new Bitmap[((CacheOverlayTileset2.Height / 48) * (CacheOverlayTileset2.Width / 32))];
-        public static Bitmap[] ExtPirt = new Bitmap[((CacheOverlayTileset3.Height / 48) * (CacheOverlayTileset3.Width / 32))];
-        public static Bitmap[] ExtFlwr = new Bitmap[((CacheOverlayTileset4.Height / 48) * (CacheOverlayTileset4.Width / 32))];
-        public static Bitmap[] ExtJngl = new Bitmap[((CacheOverlayTileset5.Height / 48) * (CacheOverlayTileset5.Width / 32))];
-        public static Bitmap[] ExtClwd = new Bitmap[((CacheOverlayTileset6.Height / 48) * (CacheOverlayTileset6.Width / 32))];
-        public static Bitmap[] ExtVolc = new Bitmap[((CacheOverlayTileset7.Height / 48) * (CacheOverlayTileset7.Width / 32))];
+        public static Bitmap[] ExtNorm = new Bitmap[((cacheOverlayTileset0.Height / 48) * (cacheOverlayTileset0.Width / 32))];
+        public static Bitmap[] ExtSnow = new Bitmap[((cacheOverlayTileset1.Height / 48) * (cacheOverlayTileset1.Width / 32))];
+        public static Bitmap[] ExtSand = new Bitmap[((cacheOverlayTileset2.Height / 48) * (cacheOverlayTileset2.Width / 32))];
+        public static Bitmap[] ExtPirt = new Bitmap[((cacheOverlayTileset3.Height / 48) * (cacheOverlayTileset3.Width / 32))];
+        public static Bitmap[] ExtFlwr = new Bitmap[((cacheOverlayTileset4.Height / 48) * (cacheOverlayTileset4.Width / 32))];
+        public static Bitmap[] ExtJngl = new Bitmap[((cacheOverlayTileset5.Height / 48) * (cacheOverlayTileset5.Width / 32))];
+        public static Bitmap[] ExtClwd = new Bitmap[((cacheOverlayTileset6.Height / 48) * (cacheOverlayTileset6.Width / 32))];
+        public static Bitmap[] ExtVolc = new Bitmap[((cacheOverlayTileset7.Height / 48) * (cacheOverlayTileset7.Width / 32))];
         public static Bitmap[] JoinedTileset
         {
             get
@@ -110,15 +110,15 @@ namespace SilicaTilesEditor
             Rectangle dstRect = new Rectangle(0, 0, 32, 32);
             Rectangle srcRect = new Rectangle(0, 0, 32, 32);
 
-            for (int y = 0; y < (CacheTerrainTileset.Height/32); y++)
+            for (int y = 0; y < (cacheTerrainTileset.Height/32); y++)
             {
-                for (int x = 0; x < (CacheTerrainTileset.Width / 32); x++)
+                for (int x = 0; x < (cacheTerrainTileset.Width / 32); x++)
                 {
                     i++;
                     TerrainList[i] = new Bitmap(32, 32);
                     srcRect.X = x * 32;
                     srcRect.Y = y * 32;
-                    CopyRegionIntoImage(CacheTerrainTileset, srcRect, TerrainList[i], dstRect);
+                    CopyRegionIntoImage(cacheTerrainTileset, srcRect, TerrainList[i], dstRect);
                 }
             }
         }
@@ -160,14 +160,14 @@ namespace SilicaTilesEditor
 
             for (int y = 0; y < OVERLAY_SIZE; y++)
             {
-                for (int x = 0; x < (CacheOverlayTileset.Width / 32); x++)
+                for (int x = 0; x < (cacheOverlayTileset.Width / 32); x++)
                 {
                     i++;
                     OverlayList[i] = new Bitmap(32, 48);
                     srcRect.X = x * 32;
                     srcRect.Y = y * 48;
 
-                    CopyRegionIntoImage(CacheOverlayTileset, srcRect, OverlayList[i], dstRect);
+                    CopyRegionIntoImage(cacheOverlayTileset, srcRect, OverlayList[i], dstRect);
                 }
             }
         }