diff --git a/FNAF_Clone.sln.DotSettings.user b/FNAF_Clone.sln.DotSettings.user
index ac6c023..7cf1b1f 100644
--- a/FNAF_Clone.sln.DotSettings.user
+++ b/FNAF_Clone.sln.DotSettings.user
@@ -1,5 +1,7 @@
True
ForceIncluded
+ ForceIncluded
ForceIncluded
+ ForceIncluded
ForceIncluded
\ No newline at end of file
diff --git a/FNAF_Server/GameLogic.cs b/FNAF_Server/GameLogic.cs
index e8320a8..0f15bae 100644
--- a/FNAF_Server/GameLogic.cs
+++ b/FNAF_Server/GameLogic.cs
@@ -1,9 +1,13 @@
+using FNAF_Server.Map;
using PacketLib;
namespace FNAF_Server;
public class GameLogic {
+ public static void Init() {
+ MapManager.InitMap();
+ }
public static void Update() {
}
diff --git a/FNAF_Server/Map/MapManager.cs b/FNAF_Server/Map/MapManager.cs
new file mode 100644
index 0000000..a3a6217
--- /dev/null
+++ b/FNAF_Server/Map/MapManager.cs
@@ -0,0 +1,47 @@
+namespace FNAF_Server.Map;
+
+public static class MapManager {
+ private static MapTile[,] map = new MapTile[5, 5];
+
+ private static Dictionary<(int x1, int y1), (int x2, int y2, int value)[]> halfConnectors = new(){
+ [(0, 0)] =[(1, 0, 1), (0, 1, 1)],
+ [(1, 0)] =[(2, 0, 1), (1, 1, 1)],
+ [(3, 0)] =[(2, 0, 1), (4, 0, 1), (3, 1, 1)],
+ [(4, 0)] =[(4, 1, 1)],
+ [(0, 1)] =[(1, 1, 1)],
+ [(1, 1)] =[(1, 2, 1)],
+ [(2, 1)] =[(2, 2, 1), (2, 0, 1)],
+ [(3, 1)] =[(3, 2, 1), (4, 1, 1)]
+ };
+
+ private static Dictionary<(int x1, int y1), (int x2, int y2, int value)[]> mainHallwayConnectors = new(){
+ [(0,2)] = [(1,2,1)],
+ [(1,2)] = [(2,2,1)],
+ [(2,2)] = [(3,2,1)],
+ [(3,2)] = [(4,2,1)]
+ };
+
+ public static void InitMap() { // TODO: make map size not hardcoded
+ for (int i = 0; i < 5; i++){
+ for (int j = 0; j < 2; j++){
+ map[i, j] = new MapTile(i * 5 + j, null); // TODO: implement ownership
+ }
+ map[i, 2] = new MapTile(i * 5 + 2, null);
+ for (int j = 3; j < 5; j++){
+ map[i, j] = new MapTile(i * 5 + j, null);
+
+ }
+ }
+
+ foreach (var con in mainHallwayConnectors){
+ map[con.Key.x1, con.Key.y1].AddConnectors(con.Value.Select(c => (map[c.x2, c.y2], TileConnector.ConnectorType.HALL, c.value)).ToArray());
+ }
+
+ foreach (var con in halfConnectors){
+ map[con.Key.x1, con.Key.y1].AddConnectors(con.Value.Select(c => (map[c.x2, c.y2], TileConnector.ConnectorType.HALL, c.value)).ToArray());
+ }
+ foreach (var con in halfConnectors){
+ map[4 - con.Key.x1, 4 - con.Key.y1].AddConnectors(con.Value.Select(c => (map[4 - c.x2, 4 - c.y2], TileConnector.ConnectorType.HALL, c.value)).ToArray());
+ }
+ }
+}
\ No newline at end of file
diff --git a/FNAF_Server/Map/MapTile.cs b/FNAF_Server/Map/MapTile.cs
new file mode 100644
index 0000000..8692bec
--- /dev/null
+++ b/FNAF_Server/Map/MapTile.cs
@@ -0,0 +1,25 @@
+namespace FNAF_Server.Map;
+
+public class MapTile {
+ public int Id { get; private set; }
+ public ServerPlayer Owner { get; private set; }
+ public bool Lit { get; set; } = false;
+
+ private List Connectors { get; set; } = new();
+
+ public MapTile(int id, ServerPlayer owner) {
+ Id = id;
+ Owner = owner;
+ }
+ public void AddConnector(MapTile tile, TileConnector.ConnectorType type, int value) {
+ Connectors.Add(new TileConnector(this, tile, type, value));
+ tile.Connectors.Add(new TileConnector(tile, this, type, value));
+ }
+
+ public void AddConnectors((MapTile tile, TileConnector.ConnectorType type, int value)[] connectors) =>
+ Array.ForEach(connectors, c => AddConnector(c.tile, c.type, c.value));
+
+ public override string ToString() => $"{PositionAsString} -> {string.Join(", ", Connectors.Select(c => c.Tiles.Item2.PositionAsString))}";
+ public string PositionAsString => $"[{Id / 5}, {Id % 5}]"; // for debug purposes
+
+}
\ No newline at end of file
diff --git a/FNAF_Server/Map/TileConnector.cs b/FNAF_Server/Map/TileConnector.cs
new file mode 100644
index 0000000..521eba2
--- /dev/null
+++ b/FNAF_Server/Map/TileConnector.cs
@@ -0,0 +1,18 @@
+namespace FNAF_Server.Map;
+
+public struct TileConnector(MapTile tile1, MapTile tile2, TileConnector.ConnectorType type, int value) {
+ public (MapTile, MapTile) Tiles { get; set; } = (tile1, tile2);
+ public ConnectorType Type { get; set; } = type;
+ public bool Blocked { get; set; } = false;
+ public int Value{ get; set; } = value;
+
+ public MapTile OtherTile(MapTile tile) => Tiles.Item1 == tile ? Tiles.Item2 : Tiles.Item1;
+
+ public override string ToString() => $"Con ({Tiles.Item1.PositionAsString} -> {Tiles.Item2.PositionAsString})";
+ public enum ConnectorType {
+ HALL,
+ DOOR,
+ VENT
+ }
+
+}
\ No newline at end of file
diff --git a/FNAF_Server/Server.cs b/FNAF_Server/Server.cs
index 39c5b86..26ec141 100644
--- a/FNAF_Server/Server.cs
+++ b/FNAF_Server/Server.cs
@@ -61,7 +61,7 @@ public class Server {
};
server.Start(port);
-
+
Run();
}
@@ -115,6 +115,9 @@ public class Server {
else{
P2 = newPlayer;
}
+
+ GameLogic.Init(); // TODO: implement a way to start the game once both players join
+
}
public static void OnNetworkReceive(NetPeer peer, NetPacketReader reader, DeliveryMethod deliveryMethod) {