mirror of
https://github.com/islehorse/HorseisleMapEditor.git
synced 2025-04-06 05:05:44 +12:00
114 lines
3.5 KiB
C#
114 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;
|
|
}
|
|
}
|
|
}
|