Projekt přejmenován. Neko nastaven na výchozí pozici
This commit is contained in:
parent
1a27dd6fab
commit
ceac37920b
104 changed files with 873 additions and 208 deletions
187
ONDClient/EventProcessor.cs
Normal file
187
ONDClient/EventProcessor.cs
Normal file
|
|
@ -0,0 +1,187 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using GlobalClassLib;
|
||||
using MonoGameLibrary.Input;
|
||||
using ONDClient.GUI;
|
||||
using ONDClient.Map;
|
||||
using PacketLib;
|
||||
|
||||
namespace ONDClient;
|
||||
|
||||
public class EventProcessor {
|
||||
public static void Evaluate(GameEvent[] events) {
|
||||
foreach (var e in events){
|
||||
switch (e.ID){
|
||||
case 0: // join
|
||||
Console.WriteLine("E: Player joined");
|
||||
break;
|
||||
|
||||
case 1: // leave
|
||||
Console.WriteLine("E: Player left");
|
||||
break;
|
||||
|
||||
case 2: // switch cam
|
||||
if (Client.Player.state.pid != e.Args[0]){
|
||||
UIManager.ChangeCameraOpponent(e.Args[1]);
|
||||
break;
|
||||
}
|
||||
if (Client.Player.state.camera != e.Args[1]) Console.WriteLine("!!! DESYNC: CAMERA STATE");
|
||||
Console.WriteLine($"E: player {e.Args[0]} switched to camera {e.Args[1]}");
|
||||
break;
|
||||
|
||||
case 3: // toggle cam
|
||||
Console.WriteLine($"E: Player {e.Args[0]} toggled monitor {(e.Args[1] == 0 ? "off" : "on")}");
|
||||
|
||||
if (e.Args[0] != Client.Player.state.pid){
|
||||
UIManager.ChangeMonitorStateOpponent(e.Args[1] == 1);
|
||||
break;
|
||||
}
|
||||
|
||||
if (Client.Player.state.monitorUp != (e.Args[1] == 1)) Console.WriteLine("!!! DESYNC: MONITOR STATE");
|
||||
|
||||
// UIManager.ChangeMonitorState(e.Args[1] == 1);
|
||||
break;
|
||||
|
||||
case 4: // toggle door
|
||||
Console.WriteLine($"E: Player {e.Args[0]} {(e.Args[2] == 1 ? "closed" : "opened")} door {e.Args[1]}");
|
||||
|
||||
if (e.Args[0] == Client.Player.state.pid){
|
||||
if (Client.Player.state.doorStates[e.Args[1]] != (e.Args[2] == 1)) Console.WriteLine("!!! DESYNC: DOOR STATE");
|
||||
break;
|
||||
}
|
||||
|
||||
Client.Opponent.state.doorStates[e.Args[1]] = e.Args[2] == 1;
|
||||
UIManager.ChangeDoorStateOpponent((Direction)e.Args[1], e.Args[2] == 1);
|
||||
break;
|
||||
|
||||
case 5: // toggle remote door
|
||||
Console.WriteLine($"E: Player {e.Args[0]} {(e.Args[3] == 1 ? "closed" : "opened")} door {e.Args[1]}-{e.Args[2]}");
|
||||
|
||||
if (e.Args[0] == Client.Player.state.pid){
|
||||
if (ClientMapManager.GetConnector((e.Args[1], e.Args[2])).Blocked != (e.Args[3] == 1)) Console.WriteLine("!!! DESYNC: REMOTE DOOR STATE");
|
||||
break;
|
||||
}
|
||||
|
||||
ClientMapManager.GetConnector((e.Args[1], e.Args[2])).Blocked = e.Args[3] == 1;
|
||||
UIManager.ChangeRemoteDoorState((e.Args[1], e.Args[2]), e.Args[3] == 1);
|
||||
break;
|
||||
|
||||
case 6: // spawn
|
||||
Console.WriteLine($"E: Spawned enemy {e.Args[0]} at {e.Args[3]}");
|
||||
ClientEnemyManager.AddEnemyByTemplate((EnemyType)e.Args[0], e.Args[1], e.Args[2], ClientMapManager.Get(e.Args[3]));
|
||||
UIManager.UpdateCameras([e.Args[3]]);
|
||||
break;
|
||||
|
||||
case 7: // movement
|
||||
Console.WriteLine($"E: Enemy {e.Args[0]} moved to {e.Args[1]}");
|
||||
int oldPos = ClientEnemyManager.Get(e.Args[0]).Location!.Id;
|
||||
ClientEnemyManager.Move(e.Args[0], ClientMapManager.Get(e.Args[1]));
|
||||
UIManager.UpdateCameras([oldPos, e.Args[1]]);
|
||||
SoundManager.PlayEnemyMove(ClientEnemyManager.Get(e.Args[0]));
|
||||
break;
|
||||
|
||||
case 8: // attack
|
||||
Console.WriteLine($"E: Enemy {e.Args[0]} attacked player {e.Args[1]}"); // TODO: add an arg to indicate lethality
|
||||
if (e.Args[1] == Client.Player.state.pid) {
|
||||
UIManager.Jumpscare(ClientEnemyManager.Get(e.Args[0]));
|
||||
SoundManager.PlayJumpscare();
|
||||
}
|
||||
break;
|
||||
|
||||
case 9: // reset
|
||||
Console.WriteLine($"E: Enemy {e.Args[0]} reset to {e.Args[1]}");
|
||||
int preResetPos = ClientEnemyManager.Get(e.Args[0]).Location!.Id;
|
||||
ClientEnemyManager.Move(e.Args[0], ClientMapManager.Get(e.Args[1]));
|
||||
UIManager.UpdateCameras([preResetPos, e.Args[1]]);
|
||||
SoundManager.PlayEnemyReset(ClientEnemyManager.Get(e.Args[0]));
|
||||
break;
|
||||
|
||||
case 10:
|
||||
Console.WriteLine($"E: Spot:{e.Args[0]} turned {(e.Args[1] == 1 ? "on" : " off")}");
|
||||
ClientEnemyManager.Get(e.Args[0]).Sprite.SetTexture(e.Args[1] == 1 ? 0 : 1);
|
||||
SoundManager.PlaySpotActivate();
|
||||
break;
|
||||
|
||||
case 11:
|
||||
Console.WriteLine($"E: Player {e.Args[0]} won");
|
||||
if(Client.Player.state.pid == e.Args[0]) UIManager.ShowVictoryScreen();
|
||||
Client.Disconnect();
|
||||
ClientEnemyManager.ClearEnemies();
|
||||
break;
|
||||
|
||||
case 12: // game start
|
||||
Console.WriteLine("E: Game started");
|
||||
UIManager.DisplayGameUI();
|
||||
UIManager.StartTimer();
|
||||
SoundManager.StartAmbience();
|
||||
break;
|
||||
|
||||
case 13:
|
||||
// Console.WriteLine($"E: power tick {e.Args[0]}: {e.Args[1]}");
|
||||
if (e.Args[0] == Client.Player.state.pid){
|
||||
Client.Player.state.power = e.Args[1];
|
||||
}
|
||||
else{
|
||||
Client.Opponent.state.power = e.Args[1];
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 14: // powerout
|
||||
Console.WriteLine($"E: Player {e.Args[0]} powered out");
|
||||
ClientMapManager.GetAllConnectors().Where(c =>
|
||||
(c.Type == ConnectorType.DOOR_REMOTE || c.Type == ConnectorType.DOOR_OFFICE) &&
|
||||
c.Owner == Client.GetPlayer(e.Args[0])).ToList().ForEach(c =>
|
||||
{
|
||||
c.Blocked = false;
|
||||
if(c.Type == ConnectorType.DOOR_REMOTE)
|
||||
UIManager.ChangeRemoteDoorState(c.Id, false);
|
||||
});
|
||||
foreach (var tile in ClientMapManager.GetAllTiles()){
|
||||
tile.Lit = false;
|
||||
}
|
||||
|
||||
if (e.Args[0] == Client.Player.state.pid){
|
||||
UIManager.ChangeDoorState(Direction.EAST, false);
|
||||
UIManager.ChangeDoorState(Direction.NORTH, false);
|
||||
UIManager.ChangeDoorState(Direction.WEST, false);
|
||||
CommandManager.AllowGameControls(false);
|
||||
UIManager.ChangeMonitorState(false);
|
||||
SoundManager.PlayPowerOut();
|
||||
}
|
||||
else{
|
||||
UIManager.ChangeDoorStateOpponent(Direction.EAST, false);
|
||||
UIManager.ChangeDoorStateOpponent(Direction.NORTH, false);
|
||||
UIManager.ChangeDoorStateOpponent(Direction.WEST, false);
|
||||
UIManager.ChangeMonitorStateOpponent(false);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case 15: // light
|
||||
bool lightState = e.Args[2] == 1;
|
||||
Console.WriteLine($"E: Player {e.Args[0]} {(lightState ? "lit": "unlit")} tile {e.Args[1]}");
|
||||
if (e.Args[0] == Client.Player.state.pid){
|
||||
if (ClientMapManager.Get(e.Args[1]).Lit != lightState) Console.WriteLine("!!! DESYNC: LIGHT STATE");
|
||||
break;
|
||||
}
|
||||
|
||||
ClientMapManager.Get(e.Args[1]).Lit = lightState;
|
||||
UIManager.UpdateCameras([e.Args[1]]);
|
||||
break;
|
||||
|
||||
case 16: // neko anger
|
||||
SoundManager.PlayNekoAnger();
|
||||
break;
|
||||
|
||||
case 17:
|
||||
SoundManager.PlayVentWalk();
|
||||
break;
|
||||
|
||||
case 18:
|
||||
SoundManager.PlayBell();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue