HorseisleMapEditor/SilicaTilesEditor/Tileset.cs

145 lines
5.8 KiB
C#

using SilicaTilesEditor.Properties;
using System;
using System.Drawing;
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 };
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[] 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 ReadTerrain()
{
Console.WriteLine("Reading Terrain.png...");
int i = 0;
for (int y = 0; y < (Resources.TerrainTileset.Height/32); y++)
{
for (int x = 0; x < (Resources.TerrainTileset.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));
}
}
ReadAllTerrain = true;
}
public static void ReadExtOverlay()
{
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++)
{
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));
}
}
Console.WriteLine("Total Tiles Read: " + i.ToString());
}
}
public static void ReadOverlay()
{
Console.WriteLine("Reading Overlay.png...");
int i = 0;
int OVERLAY_SIZE = 24;
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));
}
}
}
}
}