diff --git a/StoneRed.LogicSimulator.Api/Attributes/LogicGateDescriptionAttribute.cs b/StoneRed.LogicSimulator.Api/Attributes/LogicGateDescriptionAttribute.cs
new file mode 100644
index 0000000..a65301d
--- /dev/null
+++ b/StoneRed.LogicSimulator.Api/Attributes/LogicGateDescriptionAttribute.cs
@@ -0,0 +1,12 @@
+namespace StoneRed.LogicSimulator.Api.Attributes;
+
+[AttributeUsage(AttributeTargets.Class)]
+public class LogicGateDescriptionAttribute : Attribute
+{
+ public string Description { get; }
+
+ public LogicGateDescriptionAttribute(string description)
+ {
+ Description = description;
+ }
+}
\ No newline at end of file
diff --git a/StoneRed.LogicSimulator/Simulation/LogicGates/Attributes/LogicGateNameAttribute.cs b/StoneRed.LogicSimulator.Api/Attributes/LogicGateNameAttribute.cs
similarity index 53%
rename from StoneRed.LogicSimulator/Simulation/LogicGates/Attributes/LogicGateNameAttribute.cs
rename to StoneRed.LogicSimulator.Api/Attributes/LogicGateNameAttribute.cs
index b1c20bb..7b6710c 100644
--- a/StoneRed.LogicSimulator/Simulation/LogicGates/Attributes/LogicGateNameAttribute.cs
+++ b/StoneRed.LogicSimulator.Api/Attributes/LogicGateNameAttribute.cs
@@ -1,9 +1,7 @@
-using System;
-
-namespace StoneRed.LogicSimulator.Simulation.LogicGates.Attributes;
+namespace StoneRed.LogicSimulator.Api.Attributes;
[AttributeUsage(AttributeTargets.Class)]
-internal class LogicGateNameAttribute : Attribute
+public class LogicGateNameAttribute : Attribute
{
public string Name { get; }
diff --git a/StoneRed.LogicSimulator/Simulation/LogicGates/Interfaces/IColorable.cs b/StoneRed.LogicSimulator.Api/Interfaces/IColorable.cs
similarity index 59%
rename from StoneRed.LogicSimulator/Simulation/LogicGates/Interfaces/IColorable.cs
rename to StoneRed.LogicSimulator.Api/Interfaces/IColorable.cs
index 82a5d34..8d412ae 100644
--- a/StoneRed.LogicSimulator/Simulation/LogicGates/Interfaces/IColorable.cs
+++ b/StoneRed.LogicSimulator.Api/Interfaces/IColorable.cs
@@ -1,6 +1,6 @@
using Microsoft.Xna.Framework;
-namespace StoneRed.LogicSimulator.Simulation.LogicGates.Interfaces;
+namespace StoneRed.LogicSimulator.Api.Interfaces;
internal interface IColorable
{
diff --git a/StoneRed.LogicSimulator/Simulation/LogicGates/Interfaces/IDrawable.cs b/StoneRed.LogicSimulator.Api/Interfaces/IDrawable.cs
similarity index 61%
rename from StoneRed.LogicSimulator/Simulation/LogicGates/Interfaces/IDrawable.cs
rename to StoneRed.LogicSimulator.Api/Interfaces/IDrawable.cs
index d5f4129..4257570 100644
--- a/StoneRed.LogicSimulator/Simulation/LogicGates/Interfaces/IDrawable.cs
+++ b/StoneRed.LogicSimulator.Api/Interfaces/IDrawable.cs
@@ -1,6 +1,6 @@
using Microsoft.Xna.Framework.Graphics;
-namespace StoneRed.LogicSimulator.Simulation.LogicGates.Interfaces;
+namespace StoneRed.LogicSimulator.Api.Interfaces;
internal interface IDrawable
{
diff --git a/StoneRed.LogicSimulator/Simulation/LogicGates/Interfaces/IInteractable.cs b/StoneRed.LogicSimulator.Api/Interfaces/IInteractable.cs
similarity index 78%
rename from StoneRed.LogicSimulator/Simulation/LogicGates/Interfaces/IInteractable.cs
rename to StoneRed.LogicSimulator.Api/Interfaces/IInteractable.cs
index c60ca95..3d5c084 100644
--- a/StoneRed.LogicSimulator/Simulation/LogicGates/Interfaces/IInteractable.cs
+++ b/StoneRed.LogicSimulator.Api/Interfaces/IInteractable.cs
@@ -1,6 +1,6 @@
using MonoGame.Extended.Input;
-namespace StoneRed.LogicSimulator.Simulation.LogicGates.Interfaces;
+namespace StoneRed.LogicSimulator.Api.Interfaces;
internal interface IInteractable
{
diff --git a/StoneRed.LogicSimulator/Simulation/LogicGates/Interfaces/LogicGate.cs b/StoneRed.LogicSimulator.Api/Interfaces/LogicGate.cs
similarity index 96%
rename from StoneRed.LogicSimulator/Simulation/LogicGates/Interfaces/LogicGate.cs
rename to StoneRed.LogicSimulator.Api/Interfaces/LogicGate.cs
index 5d0f261..0fd4ec9 100644
--- a/StoneRed.LogicSimulator/Simulation/LogicGates/Interfaces/LogicGate.cs
+++ b/StoneRed.LogicSimulator.Api/Interfaces/LogicGate.cs
@@ -1,11 +1,8 @@
using Microsoft.Xna.Framework.Graphics;
-using StoneRed.LogicSimulator.Utilities;
+using StoneRed.LogicSimulator.Api.Utilities;
-using System;
-using System.Collections.Generic;
-
-namespace StoneRed.LogicSimulator.Simulation.LogicGates.Interfaces;
+namespace StoneRed.LogicSimulator.Api.Interfaces;
#pragma warning disable S112 // General exceptions should never be thrown
internal abstract class LogicGate
diff --git a/StoneRed.LogicSimulator.Api/StoneRed.LogicSimulator.Api.csproj b/StoneRed.LogicSimulator.Api/StoneRed.LogicSimulator.Api.csproj
new file mode 100644
index 0000000..d37b560
--- /dev/null
+++ b/StoneRed.LogicSimulator.Api/StoneRed.LogicSimulator.Api.csproj
@@ -0,0 +1,17 @@
+
+
+
+ net6.0
+ enable
+ enable
+
+
+
+
+
+
+
+
+
+
+
diff --git a/StoneRed.LogicSimulator/Utilities/BitHelper.cs b/StoneRed.LogicSimulator.Api/Utilities/BitHelper.cs
similarity index 91%
rename from StoneRed.LogicSimulator/Utilities/BitHelper.cs
rename to StoneRed.LogicSimulator.Api/Utilities/BitHelper.cs
index 09e1df2..dc2bdc6 100644
--- a/StoneRed.LogicSimulator/Utilities/BitHelper.cs
+++ b/StoneRed.LogicSimulator.Api/Utilities/BitHelper.cs
@@ -1,6 +1,4 @@
-using System;
-
-namespace StoneRed.LogicSimulator.Utilities;
+namespace StoneRed.LogicSimulator.Api.Utilities;
#pragma warning disable S112 // General exceptions should never be thrown
diff --git a/StoneRed.LogicSimulator/Simulation/LogicGates/LogicGateWorldData.cs b/StoneRed.LogicSimulator.Api/Utilities/LogicGateWorldData.cs
similarity index 80%
rename from StoneRed.LogicSimulator/Simulation/LogicGates/LogicGateWorldData.cs
rename to StoneRed.LogicSimulator.Api/Utilities/LogicGateWorldData.cs
index 369b4a7..60fd4d6 100644
--- a/StoneRed.LogicSimulator/Simulation/LogicGates/LogicGateWorldData.cs
+++ b/StoneRed.LogicSimulator.Api/Utilities/LogicGateWorldData.cs
@@ -1,6 +1,6 @@
using Microsoft.Xna.Framework;
-namespace StoneRed.LogicSimulator.Simulation.LogicGates;
+namespace StoneRed.LogicSimulator.Api.Utilities;
internal record LogicGateWorldData
{
diff --git a/StoneRed.LogicSimulator.sln b/StoneRed.LogicSimulator.sln
index 75354b2..9330d31 100644
--- a/StoneRed.LogicSimulator.sln
+++ b/StoneRed.LogicSimulator.sln
@@ -3,7 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.6.33815.320
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StoneRed.LogicSimulator", "StoneRed.LogicSimulator\StoneRed.LogicSimulator.csproj", "{7B259CCA-2947-4DF8-8252-7CF75FE39B8E}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StoneRed.LogicSimulator", "StoneRed.LogicSimulator\StoneRed.LogicSimulator.csproj", "{7B259CCA-2947-4DF8-8252-7CF75FE39B8E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StoneRed.LogicSimulator.Api", "StoneRed.LogicSimulator.Api\StoneRed.LogicSimulator.Api.csproj", "{CD9C3C4D-4AF1-4A31-BDED-34CB91503B4C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -15,6 +17,10 @@ Global
{7B259CCA-2947-4DF8-8252-7CF75FE39B8E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7B259CCA-2947-4DF8-8252-7CF75FE39B8E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7B259CCA-2947-4DF8-8252-7CF75FE39B8E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CD9C3C4D-4AF1-4A31-BDED-34CB91503B4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CD9C3C4D-4AF1-4A31-BDED-34CB91503B4C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CD9C3C4D-4AF1-4A31-BDED-34CB91503B4C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CD9C3C4D-4AF1-4A31-BDED-34CB91503B4C}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/StoneRed.LogicSimulator/Icon.bmp b/StoneRed.LogicSimulator/Icon.bmp
index 76c228b..18feec8 100644
Binary files a/StoneRed.LogicSimulator/Icon.bmp and b/StoneRed.LogicSimulator/Icon.bmp differ
diff --git a/StoneRed.LogicSimulator/Icon.ico b/StoneRed.LogicSimulator/Icon.ico
index 5ad7016..79b6065 100644
Binary files a/StoneRed.LogicSimulator/Icon.ico and b/StoneRed.LogicSimulator/Icon.ico differ
diff --git a/StoneRed.LogicSimulator/Simulation/LogicGateSimulator.cs b/StoneRed.LogicSimulator/Simulation/LogicGateSimulator.cs
index ea34e65..2461a76 100644
--- a/StoneRed.LogicSimulator/Simulation/LogicGateSimulator.cs
+++ b/StoneRed.LogicSimulator/Simulation/LogicGateSimulator.cs
@@ -1,4 +1,4 @@
-using StoneRed.LogicSimulator.Simulation.LogicGates.Interfaces;
+using StoneRed.LogicSimulator.Api.Interfaces;
using System;
using System.Collections.Concurrent;
diff --git a/StoneRed.LogicSimulator/Simulation/LogicGates/Attributes/LogicGateDescriptionAttribute.cs b/StoneRed.LogicSimulator/Simulation/LogicGates/Attributes/LogicGateDescriptionAttribute.cs
deleted file mode 100644
index d614360..0000000
--- a/StoneRed.LogicSimulator/Simulation/LogicGates/Attributes/LogicGateDescriptionAttribute.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System;
-
-namespace StoneRed.LogicSimulator.Simulation.LogicGates.Attributes;
-
-[AttributeUsage(AttributeTargets.All)]
-internal class LogicGateDescriptionAttribute : Attribute
-{
- public string Description { get; }
-
- public LogicGateDescriptionAttribute(string description)
- {
- Description = description;
- }
-}
\ No newline at end of file
diff --git a/StoneRed.LogicSimulator/Simulation/LogicGates/Button.cs b/StoneRed.LogicSimulator/Simulation/LogicGates/Button.cs
index e531b9f..a7bd624 100644
--- a/StoneRed.LogicSimulator/Simulation/LogicGates/Button.cs
+++ b/StoneRed.LogicSimulator/Simulation/LogicGates/Button.cs
@@ -2,8 +2,8 @@
using MonoGame.Extended.Input;
-using StoneRed.LogicSimulator.Simulation.LogicGates.Attributes;
-using StoneRed.LogicSimulator.Simulation.LogicGates.Interfaces;
+using StoneRed.LogicSimulator.Api.Attributes;
+using StoneRed.LogicSimulator.Api.Interfaces;
namespace StoneRed.LogicSimulator.Simulation.LogicGates;
diff --git a/StoneRed.LogicSimulator/Simulation/LogicGates/Clock.cs b/StoneRed.LogicSimulator/Simulation/LogicGates/Clock.cs
index 6b54b88..7e2fd67 100644
--- a/StoneRed.LogicSimulator/Simulation/LogicGates/Clock.cs
+++ b/StoneRed.LogicSimulator/Simulation/LogicGates/Clock.cs
@@ -1,7 +1,7 @@
using MonoGame.Extended.Input;
-using StoneRed.LogicSimulator.Simulation.LogicGates.Attributes;
-using StoneRed.LogicSimulator.Simulation.LogicGates.Interfaces;
+using StoneRed.LogicSimulator.Api.Attributes;
+using StoneRed.LogicSimulator.Api.Interfaces;
using System;
diff --git a/StoneRed.LogicSimulator/Simulation/LogicGates/Lamp.cs b/StoneRed.LogicSimulator/Simulation/LogicGates/Lamp.cs
index ccbf2b4..236aadb 100644
--- a/StoneRed.LogicSimulator/Simulation/LogicGates/Lamp.cs
+++ b/StoneRed.LogicSimulator/Simulation/LogicGates/Lamp.cs
@@ -1,7 +1,7 @@
using Microsoft.Xna.Framework;
-using StoneRed.LogicSimulator.Simulation.LogicGates.Attributes;
-using StoneRed.LogicSimulator.Simulation.LogicGates.Interfaces;
+using StoneRed.LogicSimulator.Api.Attributes;
+using StoneRed.LogicSimulator.Api.Interfaces;
namespace StoneRed.LogicSimulator.Simulation.LogicGates;
diff --git a/StoneRed.LogicSimulator/Simulation/LogicGates/NotGate.cs b/StoneRed.LogicSimulator/Simulation/LogicGates/NotGate.cs
index b068e18..297611a 100644
--- a/StoneRed.LogicSimulator/Simulation/LogicGates/NotGate.cs
+++ b/StoneRed.LogicSimulator/Simulation/LogicGates/NotGate.cs
@@ -1,5 +1,5 @@
-using StoneRed.LogicSimulator.Simulation.LogicGates.Attributes;
-using StoneRed.LogicSimulator.Simulation.LogicGates.Interfaces;
+using StoneRed.LogicSimulator.Api.Attributes;
+using StoneRed.LogicSimulator.Api.Interfaces;
namespace StoneRed.LogicSimulator.Simulation.LogicGates;
diff --git a/StoneRed.LogicSimulator/Simulation/LogicGates/Pin.cs b/StoneRed.LogicSimulator/Simulation/LogicGates/Pin.cs
index 5b7b1fb..073d778 100644
--- a/StoneRed.LogicSimulator/Simulation/LogicGates/Pin.cs
+++ b/StoneRed.LogicSimulator/Simulation/LogicGates/Pin.cs
@@ -1,5 +1,5 @@
-using StoneRed.LogicSimulator.Simulation.LogicGates.Attributes;
-using StoneRed.LogicSimulator.Simulation.LogicGates.Interfaces;
+using StoneRed.LogicSimulator.Api.Attributes;
+using StoneRed.LogicSimulator.Api.Interfaces;
namespace StoneRed.LogicSimulator.Simulation.LogicGates;
diff --git a/StoneRed.LogicSimulator/Simulation/LogicGates/Switch.cs b/StoneRed.LogicSimulator/Simulation/LogicGates/Switch.cs
index e84aa91..3579f4f 100644
--- a/StoneRed.LogicSimulator/Simulation/LogicGates/Switch.cs
+++ b/StoneRed.LogicSimulator/Simulation/LogicGates/Switch.cs
@@ -2,8 +2,8 @@
using MonoGame.Extended.Input;
-using StoneRed.LogicSimulator.Simulation.LogicGates.Attributes;
-using StoneRed.LogicSimulator.Simulation.LogicGates.Interfaces;
+using StoneRed.LogicSimulator.Api.Attributes;
+using StoneRed.LogicSimulator.Api.Interfaces;
namespace StoneRed.LogicSimulator.Simulation.LogicGates;
diff --git a/StoneRed.LogicSimulator/Simulation/LogicGates/TestLogicGate.cs b/StoneRed.LogicSimulator/Simulation/LogicGates/TestLogicGate.cs
index 71dd436..c8533a0 100644
--- a/StoneRed.LogicSimulator/Simulation/LogicGates/TestLogicGate.cs
+++ b/StoneRed.LogicSimulator/Simulation/LogicGates/TestLogicGate.cs
@@ -1,15 +1,15 @@
-using Microsoft.Xna.Framework;
+#if DEBUG
+
+using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
-using StoneRed.LogicSimulator.Simulation.LogicGates.Attributes;
-using StoneRed.LogicSimulator.Simulation.LogicGates.Interfaces;
+using StoneRed.LogicSimulator.Api.Attributes;
+using StoneRed.LogicSimulator.Api.Interfaces;
namespace StoneRed.LogicSimulator.Simulation.LogicGates;
-#if DEBUG
-
[LogicGateName("Test")]
-internal class TestLogicGate : LogicGate, Interfaces.IDrawable
+internal class TestLogicGate : LogicGate, Api.Interfaces.IDrawable
{
private readonly Color[] colors = new Color[9];
private Texture2D texture = null!;
diff --git a/StoneRed.LogicSimulator/StoneRed.LogicSimulator.csproj b/StoneRed.LogicSimulator/StoneRed.LogicSimulator.csproj
index ef64f89..39aa621 100644
--- a/StoneRed.LogicSimulator/StoneRed.LogicSimulator.csproj
+++ b/StoneRed.LogicSimulator/StoneRed.LogicSimulator.csproj
@@ -33,6 +33,9 @@
+
+
+
Never
diff --git a/StoneRed.LogicSimulator/UserInterface/Screens/WorldScreen.cs b/StoneRed.LogicSimulator/UserInterface/Screens/WorldScreen.cs
index c894d3d..1dd6fce 100644
--- a/StoneRed.LogicSimulator/UserInterface/Screens/WorldScreen.cs
+++ b/StoneRed.LogicSimulator/UserInterface/Screens/WorldScreen.cs
@@ -9,8 +9,8 @@ using MonoGame.Extended.Input;
using Myra.Graphics2D.UI;
+using StoneRed.LogicSimulator.Api.Interfaces;
using StoneRed.LogicSimulator.Simulation;
-using StoneRed.LogicSimulator.Simulation.LogicGates.Interfaces;
using StoneRed.LogicSimulator.UserInterface.Windows;
using StoneRed.LogicSimulator.Utilities;
using StoneRed.LogicSimulator.WorldSaveSystem;
@@ -18,7 +18,7 @@ using StoneRed.LogicSimulator.WorldSaveSystem;
using System;
using System.Linq;
-using IColorable = StoneRed.LogicSimulator.Simulation.LogicGates.Interfaces.IColorable;
+using IColorable = StoneRed.LogicSimulator.Api.Interfaces.IColorable;
namespace StoneRed.LogicSimulator.UserInterface.Screens;
@@ -119,7 +119,7 @@ internal class WorldScreen : SrlsScreen
}
// Draw logic gate
- if (logicGate is Simulation.LogicGates.Interfaces.IDrawable drawable)
+ if (logicGate is Api.Interfaces.IDrawable drawable)
{
Rectangle rectangle = new Rectangle((logicGate.WorldData.Position * srls.Scale).ToPoint(), (logicGateSize * srls.Scale).ToPoint());
srls.SpriteBatch.Draw(drawable.Texture, rectangle, null, color, 0, Vector2.Zero, SpriteEffects.None, 0.2f);
diff --git a/StoneRed.LogicSimulator/Utilities/LogicGatesManager.cs b/StoneRed.LogicSimulator/Utilities/LogicGatesManager.cs
index f8fa2ba..43564de 100644
--- a/StoneRed.LogicSimulator/Utilities/LogicGatesManager.cs
+++ b/StoneRed.LogicSimulator/Utilities/LogicGatesManager.cs
@@ -1,7 +1,7 @@
using Microsoft.Xna.Framework.Graphics;
-using StoneRed.LogicSimulator.Simulation.LogicGates.Attributes;
-using StoneRed.LogicSimulator.Simulation.LogicGates.Interfaces;
+using StoneRed.LogicSimulator.Api.Attributes;
+using StoneRed.LogicSimulator.Api.Interfaces;
using System;
using System.Collections.Generic;
@@ -41,7 +41,7 @@ internal class LogicGatesManager
public void LoadLogicGates()
{
- IEnumerable logicGateTypes = typeof(LogicGate)
+ IEnumerable logicGateTypes = GetType()
.Assembly.GetTypes()
.Where(t => t.IsSubclassOf(typeof(LogicGate)) && !t.IsAbstract);
diff --git a/StoneRed.LogicSimulator/WorldSaveSystem/WorldData.cs b/StoneRed.LogicSimulator/WorldSaveSystem/WorldData.cs
index fb90946..8b996c8 100644
--- a/StoneRed.LogicSimulator/WorldSaveSystem/WorldData.cs
+++ b/StoneRed.LogicSimulator/WorldSaveSystem/WorldData.cs
@@ -1,4 +1,4 @@
-using StoneRed.LogicSimulator.Simulation.LogicGates.Interfaces;
+using StoneRed.LogicSimulator.Api.Interfaces;
using System.Collections.Generic;
diff --git a/StoneRed.LogicSimulator/WorldSaveSystem/WorldReaders/WorldReaderV1.cs b/StoneRed.LogicSimulator/WorldSaveSystem/WorldReaders/WorldReaderV1.cs
index 2a04977..332ee53 100644
--- a/StoneRed.LogicSimulator/WorldSaveSystem/WorldReaders/WorldReaderV1.cs
+++ b/StoneRed.LogicSimulator/WorldSaveSystem/WorldReaders/WorldReaderV1.cs
@@ -1,7 +1,7 @@
using FluentResults;
+using StoneRed.LogicSimulator.Api.Interfaces;
using StoneRed.LogicSimulator.Misc;
-using StoneRed.LogicSimulator.Simulation.LogicGates.Interfaces;
using System;
using System.Collections.Generic;
diff --git a/StoneRed.LogicSimulator/WorldSaveSystem/WorldWriters/WorldWriterV1.cs b/StoneRed.LogicSimulator/WorldSaveSystem/WorldWriters/WorldWriterV1.cs
index fa521be..d56cc99 100644
--- a/StoneRed.LogicSimulator/WorldSaveSystem/WorldWriters/WorldWriterV1.cs
+++ b/StoneRed.LogicSimulator/WorldSaveSystem/WorldWriters/WorldWriterV1.cs
@@ -1,8 +1,8 @@
using FluentResults;
+using StoneRed.LogicSimulator.Api.Attributes;
+using StoneRed.LogicSimulator.Api.Interfaces;
using StoneRed.LogicSimulator.Misc;
-using StoneRed.LogicSimulator.Simulation.LogicGates.Attributes;
-using StoneRed.LogicSimulator.Simulation.LogicGates.Interfaces;
using StoneRed.LogicSimulator.Utilities;
using System;