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..56370f2 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); @@ -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 bbe8c20..5e8da4d 100644 --- a/SilicaTilesEditor/MainForm.cs +++ b/SilicaTilesEditor/MainForm.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.Windows.Forms; namespace SilicaTilesEditor @@ -42,9 +43,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; @@ -172,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/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..0b8d771 100644 --- a/SilicaTilesEditor/Tileset.cs +++ b/SilicaTilesEditor/Tileset.cs @@ -1,24 +1,36 @@ using SilicaTilesEditor.Properties; using System; using System.Drawing; +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[193]; - public static Bitmap[] ExtOverlays = new Bitmap[8] { Resources.Tileset0, Resources.Tileset1, Resources.Tileset2, Resources.Tileset3, Resources.Tileset4, Resources.Tileset5, Resources.Tileset6, 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[] 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[] 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 @@ -79,28 +91,43 @@ 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; + 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); - 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(cacheTerrainTileset, srcRect, TerrainList[i], dstRect); } } - ReadAllTerrain = true; } - public static void ReadExtOverlay() + private 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,31 +139,35 @@ 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()); } } - public static void ReadOverlay() + private static void readOverlay() { Console.WriteLine("Reading Overlay.png..."); 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++) + for (int x = 0; x < (cacheOverlayTileset.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(cacheOverlayTileset, srcRect, OverlayList[i], dstRect); } } }