using ONDServer.Map; using PacketLib; namespace ONDServer; public class CommandProcessor { public static void Evaluate(PlayerCommand[] commands, int pid) { ServerPlayer currentPlayer = Server.Players[pid]; foreach (var playerCommand in commands){ switch (playerCommand.ID){ case 0: Console.WriteLine($"C: Player {pid} switched to camera {playerCommand.Args[0]}"); currentPlayer.state.camera = playerCommand.Args[0]; Server.SendUpdateToAll([GameEvent.SWITCH_CAM(pid, playerCommand.Args[0])]); break; case 1: bool monitorState = playerCommand.Args[0] == 1; currentPlayer.state.monitorUp = monitorState; Console.WriteLine($"C: Player {pid} toggled camera {(monitorState ? "on" : "off")}"); Server.SendUpdateToAll([GameEvent.TOGGLE_MONITOR(pid, monitorState)]); break; case 2: bool doorState = playerCommand.Args[1] == 1; currentPlayer.state.doorStates[playerCommand.Args[0]] = doorState; TileConnector? officeDoor = MapManager.Get(currentPlayer.state.officeTileId).GetConnector(currentPlayer.state.neighbouringTiles[playerCommand.Args[0]]); officeDoor.Blocked = doorState; if (doorState){ GameLogic.PowerConsumers[officeDoor] = (GameLogic.OfficeDoorUsage, pid); } else{ GameLogic.PowerConsumers.Remove(officeDoor); } Console.WriteLine($"C: Player {pid} {(doorState ? "closed" : "opened")} door {playerCommand.Args[0]}"); Server.SendUpdateToAll([GameEvent.TOGGLE_DOOR_OFFICE(pid,playerCommand.Args[0] ,doorState)]); break; case 3: TileConnector? door = MapManager.Get(playerCommand.Args[0]).GetConnector(playerCommand.Args[1]); if(door == null) return; door.Blocked = playerCommand.Args[2] == 1; if (door.Blocked){ GameLogic.PowerConsumers[door] = (GameLogic.RemoteDoorUsage, pid); } else{ GameLogic.PowerConsumers.Remove(door); } Console.WriteLine($"C: Player {pid} {(door.Blocked ? "closed" : "opened")} door {(playerCommand.Args[0], playerCommand.Args[1])}"); Server.SendUpdateToAll([GameEvent.TOGGLE_DOOR_REMOTE(pid, (playerCommand.Args[0], playerCommand.Args[1]), door.Blocked)]); break; case 4: bool lit = playerCommand.Args[1] == 1; MapTile lightTile = MapManager.Get(playerCommand.Args[0]); lightTile.Lit = lit; if (lit){ GameLogic.PowerConsumers[lightTile] = (GameLogic.LightUsage, pid); } else{ GameLogic.PowerConsumers.Remove(lightTile); } Server.SendUpdateToAll([GameEvent.TOGGLE_LIGHT(pid, playerCommand.Args[0], lit)]); break; } } } }