diff --git a/multiplayer-game/src/Context.cs b/multiplayer-game/src/Context.cs index 1998ffd..6f5f2c5 100644 --- a/multiplayer-game/src/Context.cs +++ b/multiplayer-game/src/Context.cs @@ -10,13 +10,13 @@ class Context public static Context? instance { get; set; } public Context( - bool isHost, - IBackend backend, - IFrontend frontend, - GameState gameState, - FrontendGameState frontendGameState, - Renderer renderer, - Window window + bool isHost, + IBackend backend, + IFrontend frontend, + GameState gameState, + FrontendGameState frontendGameState, + Renderer renderer, + Window window ) { this.IsHost = isHost; diff --git a/multiplayer-game/src/MultiPlayerGame.cs b/multiplayer-game/src/MultiPlayerGame.cs index f9aac14..e2b76fa 100644 --- a/multiplayer-game/src/MultiPlayerGame.cs +++ b/multiplayer-game/src/MultiPlayerGame.cs @@ -4,30 +4,30 @@ class MultiPlayerGame : Game public MultiPlayerGame(bool isHost) { - var window = new Window("MultiPlayerGame", 1200, 800); + var window = new Window("MultiPlayerGame" + (isHost ? " - host" : ""), 1200, 800); if (isHost) { this.ctx = new Context( - isHost, - new Backend(), - new Frontend(), - new GameState(), - new FrontendGameState(), - new Renderer(window), - window - ); + isHost, + new Backend(), + new Frontend(), + new GameState(), + new FrontendGameState(), + new Renderer(window), + window + ); } else { this.ctx = new Context( - isHost, - new RemoteBackend(), - new Frontend(), - new GameState(), - new FrontendGameState(), - new Renderer(window), - window - ); + isHost, + new RemoteBackend(), + new Frontend(), + new GameState(), + new FrontendGameState(), + new Renderer(window), + window + ); } ctx.Backend.Init(); ctx.Frontend.Init(); diff --git a/multiplayer-game/src/backend/Backend.cs b/multiplayer-game/src/backend/Backend.cs index f5c46ff..253a54a 100644 --- a/multiplayer-game/src/backend/Backend.cs +++ b/multiplayer-game/src/backend/Backend.cs @@ -6,11 +6,9 @@ using WatsonTcp; class Backend : IBackend { private WatsonTcpServer server; - private int nextId = 0; public void Process(double dt) { - nextId++; var ctx = Context.Get(); ctx.GameState.PlayerPositions.ForEach(player => { @@ -24,20 +22,25 @@ class Backend : IBackend var gameState = Context.Get().GameState; if (packet is MovePacket movePacket) { - if (gameState.PlayerPositions.Find(player => player.name == movePacket.playerName) is Player player) + if ( + gameState.PlayerPositions.Find(player => player.name == movePacket.playerName) + is Player player + ) { - player.movement = movePacket.movement; + player.movement = movePacket.movement * 4; } } if (packet is ConnectPacket connectPacket) { Console.WriteLine($"Player {connectPacket.playerName} connected"); - gameState.PlayerPositions.Add(new Player - { - name = connectPacket.playerName, - position = new Vector2(50, 50), - movement = new Vector2(0, 0) - }); + gameState.PlayerPositions.Add( + new Player + { + name = connectPacket.playerName, + position = new Vector2(50, 50), + movement = new Vector2(0, 0) + } + ); } this.sendGameState(); } @@ -74,6 +77,7 @@ class Backend : IBackend private void messageReceived(object? sender, MessageReceivedEventArgs args) { + var time = DateTime.Now; Console.WriteLine("Message Received: " + args.IpPort); var packet = Converter.ParsePacket(args.Data); Console.WriteLine("Received packet: " + packet); @@ -81,13 +85,16 @@ class Backend : IBackend { this.ProcessPacket(packet); } + Console.WriteLine(DateTime.Now - time); } private void sendGameState() { - if (server == null) return; + if (server == null) + return; var clients = server.ListClients(); - if (clients.Count() == 0) return; + if (clients.Count() == 0) + return; var gameState = Context.Get().GameState; var json = JsonConvert.SerializeObject(gameState); var bytes = Encoding.UTF8.GetBytes(json); diff --git a/multiplayer-game/src/backend/RemoteBackend.cs b/multiplayer-game/src/backend/RemoteBackend.cs index 2a00ba8..7da56f6 100644 --- a/multiplayer-game/src/backend/RemoteBackend.cs +++ b/multiplayer-game/src/backend/RemoteBackend.cs @@ -8,7 +8,11 @@ class RemoteBackend : IBackend public void Process(double dt) { - + // var ctx = Context.Get(); + // ctx.GameState.PlayerPositions.ForEach(player => + // { + // player.position += player.movement; + // }); } public void ProcessPacket(ValueType packet) @@ -19,6 +23,11 @@ class RemoteBackend : IBackend } public void Init() + { + Task.Run(this.Run); + } + + public void Run() { client = new WatsonTcpClient("127.0.0.1", 42069); client.Events.MessageReceived += (sender, args) => diff --git a/multiplayer-game/src/engine/AudioPlayer.cs b/multiplayer-game/src/engine/AudioPlayer.cs index dec199e..252191c 100644 --- a/multiplayer-game/src/engine/AudioPlayer.cs +++ b/multiplayer-game/src/engine/AudioPlayer.cs @@ -1,6 +1,4 @@ -enum Sound -{ -} +enum Sound { } class AudioPlayer { diff --git a/multiplayer-game/src/engine/FontManager.cs b/multiplayer-game/src/engine/FontManager.cs index ffcbbb1..ec94791 100644 --- a/multiplayer-game/src/engine/FontManager.cs +++ b/multiplayer-game/src/engine/FontManager.cs @@ -17,7 +17,8 @@ class FontManager public void RegisterFont(string name, string path, int fontSize) { - if (fonts.ContainsKey(name)) return; + if (fonts.ContainsKey(name)) + return; var res = resourceLoader.LoadToIntPtr(path); var sdlBuffer = SDL_RWFromConstMem(res.ptr, res.size); var font = TTF_OpenFontRW(sdlBuffer, 1, fontSize); diff --git a/multiplayer-game/src/engine/Game.cs b/multiplayer-game/src/engine/Game.cs index 83d57b1..73963d5 100644 --- a/multiplayer-game/src/engine/Game.cs +++ b/multiplayer-game/src/engine/Game.cs @@ -1,6 +1,6 @@ abstract class Game { - public const int TPS = 64; + public const int TPS = 128; private Queue fpsQueue = new Queue(); protected abstract void update(double dt); protected abstract void draw(); diff --git a/multiplayer-game/src/engine/Renderer.cs b/multiplayer-game/src/engine/Renderer.cs index dc19ddd..a47574c 100644 --- a/multiplayer-game/src/engine/Renderer.cs +++ b/multiplayer-game/src/engine/Renderer.cs @@ -9,7 +9,11 @@ class Renderer public Renderer(Window window) { - this.renderer = SDL_CreateRenderer(window.GetWindow(), -1, SDL_RendererFlags.SDL_RENDERER_ACCELERATED); + this.renderer = SDL_CreateRenderer( + window.GetWindow(), + -1, + SDL_RendererFlags.SDL_RENDERER_ACCELERATED + ); } public void Clear() diff --git a/multiplayer-game/src/engine/ResourceLoader.cs b/multiplayer-game/src/engine/ResourceLoader.cs index 0352418..d17a3ad 100644 --- a/multiplayer-game/src/engine/ResourceLoader.cs +++ b/multiplayer-game/src/engine/ResourceLoader.cs @@ -15,14 +15,16 @@ class ResourceLoader Console.WriteLine("Loading resource: " + resourceName); return File.ReadAllText(ToPath(resourceName)); #endif - using var stream = this.GetType().Assembly.GetManifestResourceStream($"{this.assemblyName}.{resourceName}"); + using var stream = this.GetType() + .Assembly.GetManifestResourceStream($"{this.assemblyName}.{resourceName}"); using var reader = new StreamReader(stream!); return reader.ReadToEnd(); } public byte[] LoadBytes(string resourceName) { - using var stream = this.GetType().Assembly.GetManifestResourceStream($"{this.assemblyName}.{resourceName}"); + using var stream = this.GetType() + .Assembly.GetManifestResourceStream($"{this.assemblyName}.{resourceName}"); using var memoryStream = new MemoryStream(); stream!.CopyTo(memoryStream); return memoryStream.ToArray(); diff --git a/multiplayer-game/src/engine/Window.cs b/multiplayer-game/src/engine/Window.cs index 1f6c79c..671a375 100644 --- a/multiplayer-game/src/engine/Window.cs +++ b/multiplayer-game/src/engine/Window.cs @@ -6,7 +6,14 @@ class Window public Window(string title, int w, int h) { - window = SDL_CreateWindow(title, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, w, h, SDL_WindowFlags.SDL_WINDOW_VULKAN | SDL_WindowFlags.SDL_WINDOW_RESIZABLE); + window = SDL_CreateWindow( + title, + SDL_WINDOWPOS_CENTERED, + SDL_WINDOWPOS_CENTERED, + w, + h, + SDL_WindowFlags.SDL_WINDOW_VULKAN | SDL_WindowFlags.SDL_WINDOW_RESIZABLE + ); } public Window(string title, int x, int y, int w, int h, SDL_WindowFlags flags) @@ -26,7 +33,8 @@ class Window public (int width, int height) GetSize() { - int w, h; + int w, + h; SDL_GetWindowSize(this.window, out w, out h); return (w, h); } diff --git a/multiplayer-game/src/engine/system/Events.cs b/multiplayer-game/src/engine/system/Events.cs index 8086cb9..59089d2 100644 --- a/multiplayer-game/src/engine/system/Events.cs +++ b/multiplayer-game/src/engine/system/Events.cs @@ -4,9 +4,7 @@ class OnECSEvent : Attribute public EventPriority Priority = EventPriority.Normal; } -class OnTickEvent : OnECSEvent -{ -} +class OnTickEvent : OnECSEvent { } struct TickEvent { diff --git a/multiplayer-game/src/engine/utils/Color.cs b/multiplayer-game/src/engine/utils/Color.cs index 7d82521..0020df4 100644 --- a/multiplayer-game/src/engine/utils/Color.cs +++ b/multiplayer-game/src/engine/utils/Color.cs @@ -2,7 +2,10 @@ using static SDL2.SDL; class Color { - int r, g, b, a; + int r, + g, + b, + a; public Color(int r, int g, int b, int a) { diff --git a/multiplayer-game/src/frontend/Frontend.cs b/multiplayer-game/src/frontend/Frontend.cs index 00e581d..0deda32 100644 --- a/multiplayer-game/src/frontend/Frontend.cs +++ b/multiplayer-game/src/frontend/Frontend.cs @@ -21,6 +21,12 @@ class Frontend : IFrontend { System.Environment.Exit(0); } + // Console.WriteLine("new key event"); + // Console.WriteLine(e.key.repeat); + // Console.WriteLine(e.key.keysym.scancode); + // Console.WriteLine(e.key.keysym.sym); + // Console.WriteLine(e.key.keysym.unicode); + // Console.WriteLine(e.type); if (e.type == SDL_EventType.SDL_KEYDOWN && e.key.repeat == 0) { var movementInput = ctx.FrontendGameState.movementInput; @@ -63,9 +69,18 @@ class Frontend : IFrontend } ctx.FrontendGameState.movementInput = movementInput; } - if (e.key.keysym.scancode is - SDL_Scancode.SDL_SCANCODE_A or SDL_Scancode.SDL_SCANCODE_D or SDL_Scancode.SDL_SCANCODE_W or SDL_Scancode.SDL_SCANCODE_S) + if ( + e.key.keysym.scancode + is SDL_Scancode.SDL_SCANCODE_A + or SDL_Scancode.SDL_SCANCODE_D + or SDL_Scancode.SDL_SCANCODE_W + or SDL_Scancode.SDL_SCANCODE_S + && e.key.repeat == 0 + && e.type is SDL_EventType.SDL_KEYDOWN or SDL_EventType.SDL_KEYUP + ) { + if (e.key.repeat == 1) + continue; var movement = ctx.FrontendGameState.movementInput; if (movement.Length() > 0) movement = Vector2.Normalize(movement);