HorseisleMapEditor/SilicaTilesEditor/Tileset.cs

176 lines
7.2 KiB
C#

using SilicaTilesEditor.Properties;
using System;
using System.Drawing;
using System.Threading.Tasks;
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;
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
{
Bitmap[] ExtOverlaySet = GetTileset(Program.form.tileList.ExtOverlay);
int sz = OverlayList.Length + ExtOverlaySet.Length;
if (sz > 0xFF)
sz = 0xFF;
Bitmap[] arr = new Bitmap[sz];
int i = 0;
for(i = 0; i < OverlayList.Length; i++)
{
arr[i] = OverlayList[i];
}
for (int ii = 0; ii < ExtOverlaySet.Length; ii++)
{
arr[i] = ExtOverlaySet[ii];
i++;
if (i >= 0xFF)
break;
}
return arr;
}
}
public static Boolean ReadAllTerrain = false;
public static Boolean ReadAllOverlay = false;
public static void CopyRegionIntoImage(Bitmap srcBitmap, Rectangle srcRegion, Bitmap destBitmap, Rectangle destRegion)
{
using (Graphics grD = Graphics.FromImage(destBitmap))
{
grD.DrawImage(srcBitmap, destRegion, srcRegion, GraphicsUnit.Pixel);
}
}
public static Bitmap[] GetTileset(int numb)
{
switch(numb)
{
case 0:
return ExtNorm;
case 1:
return ExtSnow;
case 2:
return ExtSand;
case 3:
return ExtPirt;
case 4:
return ExtFlwr;
case 5:
return ExtJngl;
case 6:
return ExtClwd;
case 7:
return ExtVolc;
default:
return ExtNorm;
}
}
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 < (CacheTerrainTileset.Height/32); y++)
{
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);
}
}
}
private static void readExtOverlay()
{
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];
Console.WriteLine("Reading Overlay"+ picid.ToString()+".png...");
int i = 0;
for (int y = 0; y < (Tileset.Height / 48); y++)
{
for (int x = 0; x < (Tileset.Width / 32); x++)
{
TilesetList[i] = new Bitmap(32, 48);
srcRect.X = x * 32;
srcRect.Y = y * 48;
CopyRegionIntoImage(Tileset, srcRect, TilesetList[i], dstRect);
i++;
}
}
Console.WriteLine("Total Tiles Read: " + i.ToString());
}
}
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 < (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);
}
}
}
}
}