2026-02-21 18:42:44 +01:00
|
|
|
using FNAF_Server.Map;
|
2026-01-25 11:16:54 +01:00
|
|
|
using PacketLib;
|
|
|
|
|
|
|
|
|
|
namespace FNAF_Server;
|
|
|
|
|
|
|
|
|
|
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:
|
2026-02-21 18:42:44 +01:00
|
|
|
Console.WriteLine($"C: Player {pid} switched to camera {playerCommand.Args[0]}");
|
2026-03-08 16:55:49 +01:00
|
|
|
currentPlayer.state.camera = playerCommand.Args[0];
|
2026-02-21 18:42:44 +01:00
|
|
|
Server.SendUpdateToAll([GameEvent.SWITCH_CAM(pid, playerCommand.Args[0])]);
|
2026-01-25 11:16:54 +01:00
|
|
|
break;
|
|
|
|
|
case 1:
|
2026-02-21 18:42:44 +01:00
|
|
|
bool monitorState = playerCommand.Args[0] == 1;
|
2026-01-25 11:16:54 +01:00
|
|
|
currentPlayer.state.monitorUp = monitorState;
|
|
|
|
|
Console.WriteLine($"C: Player {pid} toggled camera {(monitorState ? "on" : "off")}");
|
|
|
|
|
Server.SendUpdateToAll([GameEvent.TOGGLE_MONITOR(pid, monitorState)]);
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
2026-03-12 22:33:35 +01:00
|
|
|
bool doorState = playerCommand.Args[1] == 1;
|
2026-01-25 11:16:54 +01:00
|
|
|
currentPlayer.state.doorStates[playerCommand.Args[0]] = doorState;
|
2026-03-12 22:33:35 +01:00
|
|
|
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);
|
|
|
|
|
}
|
2026-03-08 16:55:49 +01:00
|
|
|
|
2026-02-21 18:42:44 +01:00
|
|
|
Console.WriteLine($"C: Player {pid} {(doorState ? "closed" : "opened")} door {playerCommand.Args[0]}");
|
2026-01-25 11:16:54 +01:00
|
|
|
Server.SendUpdateToAll([GameEvent.TOGGLE_DOOR_OFFICE(pid,playerCommand.Args[0] ,doorState)]);
|
|
|
|
|
break;
|
2026-02-21 18:42:44 +01:00
|
|
|
case 3:
|
|
|
|
|
TileConnector? door = MapManager.Get(playerCommand.Args[0]).GetConnector(playerCommand.Args[1]);
|
|
|
|
|
if(door == null) return;
|
2026-03-12 22:33:35 +01:00
|
|
|
|
2026-02-21 18:42:44 +01:00
|
|
|
door.Blocked = playerCommand.Args[2] == 1;
|
2026-03-12 22:33:35 +01:00
|
|
|
if (door.Blocked){
|
|
|
|
|
GameLogic.PowerConsumers[door] = (GameLogic.RemoteDoorUsage, pid);
|
|
|
|
|
}
|
|
|
|
|
else{
|
|
|
|
|
GameLogic.PowerConsumers.Remove(door);
|
|
|
|
|
}
|
|
|
|
|
|
2026-02-21 18:42:44 +01:00
|
|
|
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;
|
2026-01-25 11:16:54 +01:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|