Na začátku hry se mapa na serveru synchronizuje s mapou u clienta. Rozšířen spritesheet monitoru o remote dveře. Přidána GlobalClassLib pro kód sdílený mezi clientem a serverem. Základ pro implementaci ovládání remote dveří.

This commit is contained in:
Perry 2026-02-14 14:35:29 +01:00
parent 8801a7c919
commit 7e6b3d724b
25 changed files with 374 additions and 67 deletions

View file

@ -1,17 +1,19 @@
using GlobalClassLib;
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, ConnectorType type)[]> halfConnectors = new(){
[(0, 0)] =[(1, 0, 1, ConnectorType.HALL), (0, 1, 1, ConnectorType.DOOR_REMOTE)],
[(1, 0)] =[(2, 0, 1, ConnectorType.DOOR_OFFICE), (1, 1, 1, ConnectorType.DOOR_REMOTE)],
[(3, 0)] =[(2, 0, 1, ConnectorType.DOOR_OFFICE), (4, 0, 1, ConnectorType.HALL), (3, 1, 1, ConnectorType.DOOR_REMOTE)],
[(4, 0)] =[(4, 1, 1, ConnectorType.DOOR_REMOTE)],
[(0, 1)] =[(1, 1, 1, ConnectorType.HALL)],
[(1, 1)] =[(1, 2, 1, ConnectorType.DOOR_REMOTE)],
[(2, 1)] =[(2, 2, 1, ConnectorType.HALL), (2, 0, 1, ConnectorType.DOOR_OFFICE)],
[(3, 1)] =[(3, 2, 1, ConnectorType.DOOR_REMOTE), (4, 1, 1, ConnectorType.HALL)]
};
private static Dictionary<(int x1, int y1), (int x2, int y2, int value)[]> mainHallwayConnectors = new(){
@ -24,24 +26,42 @@ public static class MapManager {
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, j] = new MapTile(MapTile.CoordsToId(i, j), null); // TODO: implement ownership
}
map[i, 2] = new MapTile(i * 5 + 2, null);
map[i, 2] = new MapTile(MapTile.CoordsToId(i, 2), null);
for (int j = 3; j < 5; j++){
map[i, j] = new MapTile(i * 5 + j, null);
map[i, j] = new MapTile(MapTile.CoordsToId(i, 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());
map[con.Key.x1, con.Key.y1].AddConnectors(con.Value.Select(c => new TileConnector(map[c.x2, c.y2], 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());
map[con.Key.x1, con.Key.y1].AddConnectors(con.Value.Select(c => new TileConnector(map[c.x2, c.y2], c.type, 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());
map[4 - con.Key.x1, 4 - con.Key.y1].AddConnectors(con.Value.Select(c => new TileConnector(map[4 - c.x2, 4 - c.y2], c.type, c.value)).ToArray());
}
}
public static TileConnector[] GetAllConnectors() {
List<TileConnector> connectors = new();
for (int i = 0; i < 5; i++){
for (int j = 0; j < 5; j++){
Array.ForEach(map[i, j].GetAllConnectors(), c => {
if(c.Tiles.tile1.Id < c.Tiles.tile2.Id)
connectors.Add(c);
});
}
}
return connectors.ToArray();
}
}