Přidaný command a event pro otevírání a zavírání dveří

This commit is contained in:
Perry 2026-01-25 11:16:54 +01:00
parent b968b12090
commit 952aae10de
7 changed files with 87 additions and 30 deletions

View file

@ -11,6 +11,7 @@ namespace FNAF_Server;
public class Server {
public static ServerPlayer P1;
public static ServerPlayer P2;
public static readonly Dictionary<int, ServerPlayer> Players = new();
private static EventBasedNetListener listener;
private static NetManager server;
@ -21,7 +22,6 @@ public class Server {
private static NetDataWriter writer;
private static NetPacketProcessor processor;
private static Dictionary<uint, ServerPlayer> players = new();
private static bool isRunning;
@ -45,7 +45,7 @@ public class Server {
listener.ConnectionRequestEvent += request => {
Console.WriteLine($"Connection Request from {request.RemoteEndPoint}");
if (players.Count >= 2){
if (Players.Count >= 2){
Console.WriteLine($"{request.RemoteEndPoint} denied, server full");
return;
}
@ -72,16 +72,16 @@ public class Server {
peer.Send(writer, deliveryMethod);
}
}
public static void SendPacket<T>(T packet, uint pid, DeliveryMethod deliveryMethod = DeliveryMethod.ReliableOrdered) where T : class, new() {
SendPacket(packet, players[pid].peer, deliveryMethod);
public static void SendPacket<T>(T packet, int pid, DeliveryMethod deliveryMethod = DeliveryMethod.ReliableOrdered) where T : class, new() {
SendPacket(packet, Players[pid].peer, deliveryMethod);
}
public static void SendPacketToAll<T>(T packet, DeliveryMethod deliveryMethod = DeliveryMethod.ReliableOrdered) where T : class, new() {
foreach (var player in players.Values){
foreach (var player in Players.Values){
SendPacket(packet, player.peer, deliveryMethod);
}
}
public static void SendUpdate(GameEvent[] gevents, uint pid) {
public static void SendUpdate(GameEvent[] gevents, int pid) {
// SendPacket(new UpdatePlayerPacket{eventQueue = new EventQueue{Events = events}}, pid);
SendPacket(new UpdatePlayerPacket{events = gevents}, pid);
@ -97,18 +97,19 @@ public class Server {
public static void OnJoinReceived(JoinPacket packet, NetPeer peer) {
Console.WriteLine($"Received join from {packet.username} (pid: {(uint)peer.Id})");
ServerPlayer newPlayer = (players[(uint)peer.Id] = new ServerPlayer {
ServerPlayer newPlayer = (Players[peer.Id] = new ServerPlayer {
peer = peer,
state = new PlayerState {
pid = (uint)peer.Id,
camera = 0
pid = peer.Id,
camera = 0,
doorStates = [false, false, false]
},
username = packet.username
});
SendPacket(new JoinAcceptPacket { state = newPlayer.state }, peer);
if (players.Count == 1){
if (Players.Count == 1){
P1 = newPlayer;
}
else{
@ -122,27 +123,29 @@ public class Server {
public static void OnPeerDisconnected(NetPeer peer, DisconnectInfo disconnectInfo) {
if (peer.Tag != null) {
players.Remove((uint)peer.Id);
Players.Remove(peer.Id);
}
}
public static void OnCommandReceived(PlayerCommandPacket packet, NetPeer peer) {
PlayerCommand[] commands = packet.commands;
CommandProcessor.Evaluate(packet.commands, peer.Id);
// PlayerCommand[] commands = packet.commands;
foreach (var playerCommand in commands){
switch (playerCommand.ID){
case 0:
Console.WriteLine($"C: Player {peer.Id} switched to camera {playerCommand.Args[0]}");
SendUpdateToAll([GameEvent.SWITCH_CAM(peer.Id, playerCommand.Args[0])]);
break;
case 1:
bool newState = !players[(uint)peer.Id].state.monitorUp;
players[(uint)peer.Id].state.monitorUp = newState;
Console.WriteLine($"C: Player {peer.Id} toggled camera {(newState ? "on" : "off")}");
SendUpdateToAll([GameEvent.TOGGLE_MONITOR(peer.Id, newState)]);
break;
}
}
// foreach (var playerCommand in commands){
// switch (playerCommand.ID){
// case 0:
// Console.WriteLine($"C: Player {peer.Id} switched to camera {playerCommand.Args[0]}");
// SendUpdateToAll([GameEvent.SWITCH_CAM(peer.Id, playerCommand.Args[0])]);
// break;
// case 1:
// bool newState = !Players[(uint)peer.Id].state.monitorUp;
// Players[(uint)peer.Id].state.monitorUp = newState;
// Console.WriteLine($"C: Player {peer.Id} toggled camera {(newState ? "on" : "off")}");
// SendUpdateToAll([GameEvent.TOGGLE_MONITOR(peer.Id, newState)]);
// break;
// }
// }
}
public static void Update() {