From 8801a7c9194449144d98c4dc081bcd67a0a6222d Mon Sep 17 00:00:00 2001 From: Perry Date: Sun, 1 Feb 2026 14:53:27 +0100 Subject: [PATCH] =?UTF-8?q?P=C5=99id=C3=A1ny=20z=C3=A1klady=20generov?= =?UTF-8?q?=C3=A1n=C3=AD=20mapy=20(zat=C3=ADm=20pouze=20server-side,=20bez?= =?UTF-8?q?=20zrcadlen=C3=AD=20do=20clienta)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FNAF_Clone.sln.DotSettings.user | 2 ++ FNAF_Server/GameLogic.cs | 4 +++ FNAF_Server/Map/MapManager.cs | 47 ++++++++++++++++++++++++++++++++ FNAF_Server/Map/MapTile.cs | 25 +++++++++++++++++ FNAF_Server/Map/TileConnector.cs | 18 ++++++++++++ FNAF_Server/Server.cs | 5 +++- 6 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 FNAF_Server/Map/MapManager.cs create mode 100644 FNAF_Server/Map/MapTile.cs create mode 100644 FNAF_Server/Map/TileConnector.cs 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) {