Compare commits

...

4 Commits
v1.0 ... master

Author SHA1 Message Date
Li 0b951674c7 cache resources, instead of looking up every time 2022-11-28 12:14:54 +13:00
Li e560c569a2 Improve load time 2 2022-11-28 12:08:22 +13:00
Li f08b53243e Improve load times 2022-11-28 11:55:08 +13:00
Li 21735a349e Fix some bugz 2022-11-28 11:30:44 +13:00
6 changed files with 92 additions and 51 deletions

3
.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
.vs/*
SilicaTilesEditor/obj/*
SilicaTilesEditor/bin/*

View File

@ -48,9 +48,9 @@ namespace SilicaTilesEditor
this.tileset7 = new System.Windows.Forms.ToolStripMenuItem(); this.tileset7 = new System.Windows.Forms.ToolStripMenuItem();
this.lookingAt = new System.Windows.Forms.Label(); this.lookingAt = new System.Windows.Forms.Label();
this.layout = new System.Windows.Forms.TableLayoutPanel(); this.layout = new System.Windows.Forms.TableLayoutPanel();
this.selTileId = new System.Windows.Forms.Label();
this.tileSelector = new SilicaTilesEditor.TileSelectorControl(); this.tileSelector = new SilicaTilesEditor.TileSelectorControl();
this.tileList = new SilicaTilesEditor.TileMapEditorControl(); this.tileList = new SilicaTilesEditor.TileMapEditorControl();
this.selTileId = new System.Windows.Forms.Label();
this.toolMenu.SuspendLayout(); this.toolMenu.SuspendLayout();
this.layout.SuspendLayout(); this.layout.SuspendLayout();
this.SuspendLayout(); this.SuspendLayout();
@ -82,21 +82,21 @@ namespace SilicaTilesEditor
// newItem // newItem
// //
this.newItem.Name = "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.Text = "New File";
this.newItem.Click += new System.EventHandler(this.newItem_Click); this.newItem.Click += new System.EventHandler(this.newItem_Click);
// //
// loadItem // loadItem
// //
this.loadItem.Name = "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.Text = "Load File";
this.loadItem.Click += new System.EventHandler(this.loadItem_Click); this.loadItem.Click += new System.EventHandler(this.loadItem_Click);
// //
// saveItem // saveItem
// //
this.saveItem.Name = "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.Text = "Save File";
this.saveItem.Click += new System.EventHandler(this.saveItem_Click); 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.Size = new System.Drawing.Size(1107, 487);
this.layout.TabIndex = 4; 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 // tileSelector
// //
this.tileSelector.AutoScroll = true; this.tileSelector.AutoScroll = true;
@ -253,16 +263,6 @@ namespace SilicaTilesEditor
this.tileList.Size = new System.Drawing.Size(852, 481); this.tileList.Size = new System.Drawing.Size(852, 481);
this.tileList.TabIndex = 1; 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 // MainForm
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -275,6 +275,7 @@ namespace SilicaTilesEditor
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "MainForm"; this.Name = "MainForm";
this.Text = "Horse Isle Map Editor"; 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.Load += new System.EventHandler(this.MainForm_Load);
this.toolMenu.ResumeLayout(false); this.toolMenu.ResumeLayout(false);
this.toolMenu.PerformLayout(); this.toolMenu.PerformLayout();

View File

@ -1,4 +1,5 @@
using System; using System;
using System.Diagnostics;
using System.Windows.Forms; using System.Windows.Forms;
namespace SilicaTilesEditor namespace SilicaTilesEditor
@ -42,9 +43,8 @@ namespace SilicaTilesEditor
} }
private void MainForm_Load(object sender, EventArgs e) private void MainForm_Load(object sender, EventArgs e)
{ {
Tileset.ReadTerrain(); Tileset.ReadAllTiles();
Tileset.ReadOverlay();
Tileset.ReadExtOverlay();
layout.ColumnStyles[0].Width = (32*7) + SystemInformation.VerticalScrollBarWidth; layout.ColumnStyles[0].Width = (32*7) + SystemInformation.VerticalScrollBarWidth;
tileset0.Checked = true; tileset0.Checked = true;
tileList.ExtOverlay = 0; tileList.ExtOverlay = 0;
@ -172,5 +172,10 @@ namespace SilicaTilesEditor
MessageBox.Show("File saved successfully.", "Save", MessageBoxButtons.OK, MessageBoxIcon.Information); MessageBox.Show("File saved successfully.", "Save", MessageBoxButtons.OK, MessageBoxIcon.Information);
} }
} }
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
Process.GetCurrentProcess().Kill();
}
} }
} }

View File

@ -46,7 +46,7 @@ namespace SilicaTilesEditor
this.Invalidate(); this.Invalidate();
if(Map.MapLoaded) 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; int relY = 0;
if (Map.MapLoaded) if (Map.MapLoaded)
{ {
/* Draw Terrain Tiles */
for (int y = offsetY; y < (tlistHeight + offsetY)+1; y++) for (int y = offsetY; y < (tlistHeight + offsetY)+1; y++)
{ {
relX = -1; relX = -1;
@ -105,7 +105,7 @@ namespace SilicaTilesEditor
} }
relY++; relY++;
} }
/* Draw Overlay Tiles */
if (DisplayOverlay) if (DisplayOverlay)
{ {
@ -118,10 +118,11 @@ namespace SilicaTilesEditor
for (int x = offsetX; x < (tlistWidth + offsetX) + 1; x++) for (int x = offsetX; x < (tlistWidth + offsetX) + 1; x++)
{ {
relX++; relX++;
int tileId = Map.GetTileId(x, y, true) - 1; int tileId = Map.GetTileId(x, y, true) -1;
Bitmap Tile = null; Bitmap Tile = null;
if (tileId >= Tileset.OverlayList.Length) if (tileId >= Tileset.OverlayList.Length)
{ {
/* Draw Extenal Overlay Tiles */
tileId -= Tileset.OverlayList.Length; tileId -= Tileset.OverlayList.Length;
Tile = Tileset.GetTileset(ExtOverlay)[tileId]; Tile = Tileset.GetTileset(ExtOverlay)[tileId];
} }

View File

@ -33,7 +33,7 @@ namespace SilicaTilesEditor
else else
SelTileY = Convert.ToInt32(Math.Floor((float)VerticalScroll.Value / 48.0)) + Convert.ToInt32(Math.Floor((float)(e.Y + tinyOffsetY) / 48.0)); 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; bool change = false;
if(SelectedTileid > 0xFF) if(SelectedTileid > 0xFF)

View File

@ -1,24 +1,36 @@
using SilicaTilesEditor.Properties; using SilicaTilesEditor.Properties;
using System; using System;
using System.Drawing; using System.Drawing;
using System.Threading.Tasks;
namespace SilicaTilesEditor namespace SilicaTilesEditor
{ {
class Tileset class Tileset
{ {
public static Bitmap[] TerrainList = new Bitmap[((Resources.TerrainTileset.Height / 32) * (Resources.TerrainTileset.Width / 32)) + 1]; private static Bitmap cacheTerrainTileset = Resources.TerrainTileset;
public static Bitmap[] OverlayList = new Bitmap[193]; private static Bitmap cacheOverlayTileset = Resources.OverlayTileset;
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 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 public static Bitmap[] JoinedTileset
{ {
get 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..."); Console.WriteLine("Reading Terrain.png...");
int i = 0; 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++; i++;
TerrainList[i] = new Bitmap(32, 32); TerrainList[i] = new Bitmap(32, 32);
int posx = x * 32; srcRect.X = x * 32;
int posy = y * 32; srcRect.Y = y * 32;
CopyRegionIntoImage(Resources.TerrainTileset, new Rectangle(posx, posy, 32, 32), TerrainList[i], new Rectangle(0, 0, 32, 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[] TilesetList = GetTileset(picid);
Bitmap Tileset = ExtOverlays[picid]; Bitmap Tileset = ExtOverlays[picid];
@ -112,31 +139,35 @@ namespace SilicaTilesEditor
{ {
for (int x = 0; x < (Tileset.Width / 32); x++) for (int x = 0; x < (Tileset.Width / 32); x++)
{ {
i++;
TilesetList[i] = new Bitmap(32, 48); TilesetList[i] = new Bitmap(32, 48);
int posx = x * 32; srcRect.X = x * 32;
int posy = y * 48; srcRect.Y = y * 48;
CopyRegionIntoImage(Tileset, new Rectangle(posx, posy, 32, 48), TilesetList[i], new Rectangle(0, 0, 32, 48)); CopyRegionIntoImage(Tileset, srcRect, TilesetList[i], dstRect);
i++;
} }
} }
Console.WriteLine("Total Tiles Read: " + i.ToString()); Console.WriteLine("Total Tiles Read: " + i.ToString());
} }
} }
public static void ReadOverlay() private static void readOverlay()
{ {
Console.WriteLine("Reading Overlay.png..."); Console.WriteLine("Reading Overlay.png...");
int i = 0; int i = 0;
int OVERLAY_SIZE = 24; 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 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++; i++;
OverlayList[i] = new Bitmap(32, 48); OverlayList[i] = new Bitmap(32, 48);
int posx = x * 32; srcRect.X = x * 32;
int posy = y * 48; srcRect.Y = y * 48;
CopyRegionIntoImage(Resources.OverlayTileset, new Rectangle(posx, posy, 32, 48), OverlayList[i], new Rectangle(0, 0, 32, 48));
CopyRegionIntoImage(cacheOverlayTileset, srcRect, OverlayList[i], dstRect);
} }
} }
} }