diff --git a/Core/Objects/WallObject.cs b/Core/Objects/WallObject.cs
index e501da44..526b4f59 100644
--- a/Core/Objects/WallObject.cs
+++ b/Core/Objects/WallObject.cs
@@ -26,7 +26,7 @@ public enum WallObjectFlags2 : uint8_t
NoSelectPrimaryColour = 1 << 0,
DoorSoundMask = 1 << 1, // unused? only for rct2?
DoorSoundShift = 1 << 2, // unused? only for rct2?
- IsOpaque = 1 << 3, // unused? only for rct2?
+ Opaque = 1 << 3, // unused? only for rct2?
Animated = 1 << 4, // unused? only for rct2?
};
diff --git a/Gui/Gui.csproj b/Gui/Gui.csproj
index 122c6c17..88e5b953 100644
--- a/Gui/Gui.csproj
+++ b/Gui/Gui.csproj
@@ -40,6 +40,7 @@
+
diff --git a/Gui/MainForm.cs b/Gui/MainForm.cs
index 4cbc34d4..41a6709b 100644
--- a/Gui/MainForm.cs
+++ b/Gui/MainForm.cs
@@ -1,6 +1,5 @@
using NAudio.Gui;
using NAudio.Wave;
-using OpenLoco.ObjectEditor;
using OpenLoco.ObjectEditor.DatFileParsing;
using OpenLoco.ObjectEditor.Headers;
using OpenLoco.ObjectEditor.Objects;
@@ -13,6 +12,8 @@
using Core.Objects.Sound;
using Zenith.Core;
using System.Text;
+using SixLabors.ImageSharp.PixelFormats;
+using SixLabors.ImageSharp.Formats;
namespace OpenLoco.ObjectEditor.Gui
{
@@ -92,8 +93,12 @@ public MainForm()
var paletteFilename = "Gui.palette.png";
using (var stream = assembly.GetManifestResourceStream(paletteFilename))
{
- var paletteBitmap = (Bitmap)Image.FromStream(stream!);
- var palette = PaletteHelpers.PaletteFromBitmap(paletteBitmap);
+ //var paletteBitmap = (Bitmap)Image.FromStream(stream!);
+ //var palette = PaletteHelpers.PaletteFromBitmap(paletteBitmap);
+ //model = new MainFormModel(logger, SettingsFile, palette);
+
+ var paletteBitmap = SixLabors.ImageSharp.Image.Load(stream!);
+ var palette = PaletteHelpers.PaletteFromBitmapIS(paletteBitmap);
model = new MainFormModel(logger, SettingsFile, palette);
}
@@ -1004,7 +1009,7 @@ IEnumerable CreateImageControls(IEnumerable images)
}
}
- static IEnumerable CreateImages(List G1Elements, Color[] palette, bool useTransparency = false, ILogger? logger = null)
+ static IEnumerable CreateImages(List G1Elements, SixLabors.ImageSharp.Color[] palette, bool useTransparency = false, ILogger? logger = null)
{
if (palette is null)
{
@@ -1051,7 +1056,7 @@ static IEnumerable CreateImages(List G1Elements, Color[] pa
}
}
- static Bitmap? G1ElementToBitmap(G1Element32 currElement, Color[] palette, bool useTransparency = false)
+ static Bitmap? G1ElementToBitmap(G1Element32 currElement, SixLabors.ImageSharp.Color[] palette, bool useTransparency = false)
{
var imageData = currElement.ImageData;
var dstImg = new Bitmap(currElement.Width, currElement.Height);
@@ -1075,7 +1080,8 @@ static IEnumerable CreateImages(List G1Elements, Color[] pa
else
{
var colour = palette[paletteIndex];
- ImageHelpers.SetPixel(dstImgData, x, y, colour);
+ var pixel = colour.ToPixel();
+ ImageHelpers.SetPixel(dstImgData, x, y, Color.FromArgb(pixel.R, pixel.G, pixel.B));
}
}
}
diff --git a/Gui/MainFormModel.cs b/Gui/MainFormModel.cs
index 5dc76a56..0c76c6f7 100644
--- a/Gui/MainFormModel.cs
+++ b/Gui/MainFormModel.cs
@@ -60,7 +60,7 @@ class MainFormModel
// //}
//}
- public Color[] Palette { get; private set; }
+ public SixLabors.ImageSharp.Color[] Palette { get; private set; }
public G1Dat? G1 { get; set; }
@@ -74,7 +74,7 @@ class MainFormModel
public List MiscFiles { get; set; } = [];
- public MainFormModel(ILogger logger, string settingsFile, Color[] palette)
+ public MainFormModel(ILogger logger, string settingsFile, SixLabors.ImageSharp.Color[] palette)
{
this.logger = logger;
Palette = palette;
diff --git a/Gui/PaletteHelpers.cs b/Gui/PaletteHelpers.cs
index e26ef335..2e25a8f7 100644
--- a/Gui/PaletteHelpers.cs
+++ b/Gui/PaletteHelpers.cs
@@ -1,23 +1,39 @@
-using System.Drawing.Imaging;
+using SixLabors.ImageSharp;
+using SixLabors.ImageSharp.PixelFormats;
namespace OpenLoco.ObjectEditor.Gui
{
public static class PaletteHelpers
{
- public static Color[] PaletteFromBitmap(Bitmap img)
+ //public static System.Drawing.Color[] PaletteFromBitmap(Bitmap img)
+ //{
+ // var palette = new System.Drawing.Color[256];
+ // var rect = new System.Drawing.Rectangle(0, 0, img.Width, img.Height);
+ // var imgData = img.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
+ // for (var y = 0; y < img.Width; ++y)
+ // {
+ // for (var x = 0; x < img.Height; ++x)
+ // {
+ // palette[(y * img.Height) + x] = ImageHelpers.GetPixel(imgData, x, y);
+ // }
+ // }
+
+ // img.UnlockBits(imgData);
+ // return palette;
+ //}
+
+ public static SixLabors.ImageSharp.Color[] PaletteFromBitmapIS(Image img)
{
- var palette = new Color[256];
- var rect = new Rectangle(0, 0, img.Width, img.Height);
- var imgData = img.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
- for (var y = 0; y < img.Width; ++y)
+ var palette = new SixLabors.ImageSharp.Color[256];
+
+ for (var y = 0; y < img.Height; ++y)
{
- for (var x = 0; x < img.Height; ++x)
+ for (var x = 0; x < img.Width; ++x)
{
- palette[(y * img.Height) + x] = ImageHelpers.GetPixel(imgData, x, y);
+ palette[(y * img.Height) + x] = img[x, y];
}
}
- img.UnlockBits(imgData);
return palette;
}
diff --git a/Tests/LoadSaveTests.cs b/Tests/LoadSaveTests.cs
index 778cf10b..a2561dcd 100644
--- a/Tests/LoadSaveTests.cs
+++ b/Tests/LoadSaveTests.cs
@@ -73,7 +73,7 @@ public void LoadSaveGenericTest(string objectName, Action ass
{
Assert.That(bytes2S5Header, Is.EqualTo(bytes1S5Header));
Assert.That(bytes2ObjHeader, Is.EqualTo(bytes1ObjHeader));
- CollectionAssert.AreEqual(bytes1ObjArr.ToArray(), bytes2ObjArr.ToArray());
+ Assert.That(bytes1ObjArr.ToArray(), Is.EquivalentTo(bytes2ObjArr.ToArray()));
});
}
@@ -250,7 +250,7 @@ void assertFunc(ILocoObject obj, CompetitorObject struc) => Assert.Multiple(() =
Assert.That(struc.var_04, Is.EqualTo(6672), nameof(struc.var_04));
Assert.That(struc.var_08, Is.EqualTo(2053), nameof(struc.var_08));
Assert.That(struc.Emotions, Is.EqualTo(255), nameof(struc.Emotions));
- CollectionAssert.AreEqual(struc.Images, Array.CreateInstance(typeof(byte), 9), nameof(struc.Images));
+ Assert.That(struc.Images, Is.EquivalentTo(Array.CreateInstance(typeof(byte), 9)), nameof(struc.Images));
Assert.That(struc.Intelligence, Is.EqualTo(7), nameof(struc.Intelligence));
Assert.That(struc.Aggressiveness, Is.EqualTo(5), nameof(struc.Aggressiveness));
Assert.That(struc.Competitiveness, Is.EqualTo(6), nameof(struc.Competitiveness));
@@ -304,7 +304,7 @@ void assertFunc(ILocoObject obj, HillShapesObject struc) => Assert.Multiple(() =
Assert.That(struc.HillHeightMapCount, Is.EqualTo(2), nameof(struc.HillHeightMapCount));
Assert.That(struc.MountainHeightMapCount, Is.EqualTo(2), nameof(struc.MountainHeightMapCount));
//Assert.That(struc.var_08, Is.EqualTo(0), nameof(struc.var_08));
- CollectionAssert.AreEqual(struc.pad_0C, Array.CreateInstance(typeof(byte), 2), nameof(struc.pad_0C));
+ Assert.That(struc.pad_0C, Is.EquivalentTo(Array.CreateInstance(typeof(byte), 2)), nameof(struc.pad_0C));
});
LoadSaveGenericTest(objectName, assertFunc);
}
@@ -433,10 +433,10 @@ public void RegionObject(string objectName)
{
void assertFunc(ILocoObject obj, RegionObject struc) => Assert.Multiple(() =>
{
- CollectionAssert.AreEqual(struc.pad_06, Array.CreateInstance(typeof(byte), 2), nameof(struc.pad_06));
+ Assert.That(struc.pad_06, Is.EquivalentTo(Array.CreateInstance(typeof(byte), 2)), nameof(struc.pad_06));
Assert.That(struc.RequiredObjectCount, Is.EqualTo(1), nameof(struc.RequiredObjectCount));
//CollectionAssert.AreEqual(struc.requiredObjects, Array.CreateInstance(typeof(byte), 4), nameof(struc.requiredObjects));
- CollectionAssert.AreEqual(struc.pad_0D, Array.CreateInstance(typeof(byte), 5), nameof(struc.pad_0D));
+ Assert.That(struc.pad_0D, Is.EquivalentTo(Array.CreateInstance(typeof(byte), 5)), nameof(struc.pad_0D));
});
LoadSaveGenericTest(objectName, assertFunc);
}
@@ -759,8 +759,8 @@ void assertFunc(ILocoObject obj, TreeObject struc) => Assert.Multiple(() =>
Assert.That(struc.NumRotations, Is.EqualTo(1), nameof(struc.NumRotations));
Assert.That(struc.Growth, Is.EqualTo(4), nameof(struc.Growth));
Assert.That(struc.Flags, Is.EqualTo(TreeObjectFlags.HighAltitude | TreeObjectFlags.RequiresWater | TreeObjectFlags.HasShadow), nameof(struc.Flags));
- CollectionAssert.AreEqual(struc.Sprites, Array.CreateInstance(typeof(byte), 6), nameof(struc.Sprites));
- CollectionAssert.AreEqual(struc.SnowSprites, Array.CreateInstance(typeof(byte), 6), nameof(struc.SnowSprites));
+ Assert.That(struc.Sprites, Is.EquivalentTo(Array.CreateInstance(typeof(byte), 6)), nameof(struc.Sprites));
+ Assert.That(struc.SnowSprites, Is.EquivalentTo(Array.CreateInstance(typeof(byte), 6)), nameof(struc.SnowSprites));
Assert.That(struc.ShadowImageOffset, Is.EqualTo(0), nameof(struc.ShadowImageOffset));
Assert.That(struc.var_3C, Is.EqualTo(15), nameof(struc.var_3C));
Assert.That(struc.SeasonState, Is.EqualTo(3), nameof(struc.SeasonState));
@@ -862,10 +862,10 @@ public void WallObject(string objectName)
{
void assertFunc(ILocoObject obj, WallObject struc) => Assert.Multiple(() =>
{
- Assert.That(struc.var_06, Is.EqualTo(15), nameof(struc.var_06));
+ Assert.That(struc.ToolId, Is.EqualTo(15), nameof(struc.ToolId));
Assert.That(struc.Flags, Is.EqualTo(WallObjectFlags.None), nameof(struc.Flags));
Assert.That(struc.Height, Is.EqualTo(2), nameof(struc.Height));
- Assert.That(struc.var_09, Is.EqualTo(8), nameof(struc.var_09));
+ Assert.That(struc.Flags2, Is.EqualTo(WallObjectFlags2.Opaque), nameof(struc.Flags2));
});
LoadSaveGenericTest(objectName, assertFunc);
}
diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj
index 7da61d6b..f985db80 100644
--- a/Tests/Tests.csproj
+++ b/Tests/Tests.csproj
@@ -10,11 +10,17 @@
-
-
-
-
-
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+