HorseisleMapEditor/SilicaTilesEditor/Map.cs

115 lines
3.5 KiB
C#

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Drawing;
namespace SilicaTilesEditor
{
public static class Map
{
public static string LoadedMap = "";
public static bool MapLoaded = false;
public static int Width;
public static int Height;
public static byte[] MapData;
public static byte[] oMapData;
public static void SetTileId(int x, int y, bool overlay, int tileId)
{
int pos = ((x * Height) + y);
if (!MapLoaded)
return;
if ((pos <= 0 || pos >= oMapData.Length) && overlay)
return;
else if ((pos <= 0 || pos >= MapData.Length) && !overlay)
return;
else if (overlay)
oMapData[pos] = (byte)tileId;
else if (!overlay)
MapData[pos] = (byte)tileId;
else // Not sure how you could even get here.
return;
}
public static int GetTileId(int x, int y, bool overlay)
{
int pos = ((x * Height) + y);
if ((pos <= 0 || pos >= oMapData.Length) && overlay)
return 1;
else if ((pos <= 0 || pos >= MapData.Length) && !overlay)
return 1;
else if (overlay)
return oMapData[pos];
else if (!overlay)
return MapData[pos];
else // Not sure how you could even get here.
return 1;
}
public static void SaveMap(string MapFile)
{
byte[] worldMap = new byte[8 + (Width * Height) * 2];
byte[] WidthInt = BitConverter.GetBytes(Width);
byte[] HeightInt = BitConverter.GetBytes(Height);
Array.ConstrainedCopy(WidthInt, 0, worldMap, 0, 4);
Array.ConstrainedCopy(HeightInt, 0, worldMap, 4, 4);
int ii = 8;
for (int i = 0; i < MapData.Length; i++)
{
worldMap[ii] = oMapData[i];
worldMap[ii + 1] = MapData[i];
ii += 2;
}
LoadedMap = MapFile;
MapLoaded = true;
File.WriteAllBytes(MapFile, worldMap);
}
public static void CreateMap(int width, int height)
{
Width = width;
Height = height;
MapData = new byte[width * height];
oMapData = new byte[width * height];
for (int i = 0; i < MapData.Length; i++)
{
oMapData[i] = 1;
MapData[i] = 1;
}
LoadedMap = "NEW.MAP";
MapLoaded = true;
}
public static void OpenMap(string MapFile)
{
byte[] worldMap = File.ReadAllBytes(MapFile);
Width = BitConverter.ToInt32(worldMap, 0);
Height = BitConverter.ToInt32(worldMap, 4);
MapData = new byte[Width * Height];
oMapData = new byte[Width * Height];
int ii = 8;
for (int i = 0; i < MapData.Length; i++)
{
oMapData[i] = worldMap[ii];
MapData[i] = worldMap[ii + 1];
ii += 2;
}
LoadedMap = MapFile;
MapLoaded = true;
}
}
}