From 9a07af82126bd25e7f83bc4cc581aad42eab7190 Mon Sep 17 00:00:00 2001 From: MasterGordon Date: Fri, 11 Nov 2022 01:19:24 +0100 Subject: [PATCH] Added moused pressed mining --- .editorconfig | 1 + src/backend/Publisher.cs | 15 ++++++++--- src/backend/data/Packet.cs | 29 +++++++++++++++------ src/backend/interactor/Breaking.cs | 41 ++++++++++++++++++++++-------- src/engine/PacketUtils.cs | 4 --- src/frontend/Frontend.cs | 29 ++++++++------------- 6 files changed, 75 insertions(+), 44 deletions(-) diff --git a/.editorconfig b/.editorconfig index e2c242d..97f1320 100644 --- a/.editorconfig +++ b/.editorconfig @@ -68,4 +68,5 @@ dotnet_style_qualification_for_method = true:warning dotnet_style_qualification_for_property = true:warning dotnet_style_qualification_for_event = true:warning csharp_style_unused_value_expression_statement_preference = false +csharp_style_namespace_declarations=file_scoped:warning dotnet_diagnostic.CA1805.severity = none diff --git a/src/backend/Publisher.cs b/src/backend/Publisher.cs index 3122d7b..0407e96 100644 --- a/src/backend/Publisher.cs +++ b/src/backend/Publisher.cs @@ -42,7 +42,9 @@ class Publisher { continue; } - var del = Delegate.CreateDelegate( + var del = method.GetParameters().Length == 0 ? + Delegate.CreateDelegate(typeof(Action), method) : + Delegate.CreateDelegate( typeof(Action<>).MakeGenericTypeSafely(method.GetParameters()[0].ParameterType), method ); @@ -87,8 +89,15 @@ class Publisher } foreach (var del in this.subscribers[type]) { - del.DynamicInvoke(packet); + if (del.Method.GetParameters().Length == 0) + { + del.DynamicInvoke(); + } + else + { + del.DynamicInvoke(packet); + } } } } -} \ No newline at end of file +} diff --git a/src/backend/data/Packet.cs b/src/backend/data/Packet.cs index c74c1cb..d4487d3 100644 --- a/src/backend/data/Packet.cs +++ b/src/backend/data/Packet.cs @@ -9,8 +9,8 @@ public struct MovePacket : IPacket { public readonly string Type => "move"; - public readonly string PlayerName; - public readonly Vector2 Movement; + public readonly string PlayerName { get; } + public readonly Vector2 Movement { get; } public MovePacket(string playerName, Vector2 movement) { @@ -22,8 +22,8 @@ public struct MovePacket : IPacket public readonly struct ConnectPacket : IPacket { public readonly string Type => "connect"; - public readonly string PlayerName; - public readonly Guid PlayerGuid; + public readonly string PlayerName { get; } + public readonly Guid PlayerGuid { get; } public ConnectPacket(string playerName, Guid playerGuid) { @@ -32,10 +32,10 @@ public readonly struct ConnectPacket : IPacket } } -readonly struct TickPacket : IPacket +public readonly struct TickPacket : IPacket { public readonly string Type => "tick"; - public readonly uint Tick; + public readonly uint Tick { get; } public TickPacket(uint tick) { @@ -43,13 +43,26 @@ readonly struct TickPacket : IPacket } } -readonly struct SelfMovedPacket : IPacket +public readonly struct SelfMovedPacket : IPacket { public readonly string Type => "selfMoved"; - public readonly Vector2 Target; + public readonly Vector2 Target { get; } public SelfMovedPacket(Vector2 target) { this.Target = target; } } + +public readonly struct BreakPacket : IPacket +{ + public readonly string Type => "break"; + public readonly Guid PlayerGuid { get; } + public readonly Vector2 Target { get; } + + public BreakPacket(Guid playerGuid, Vector2 target) + { + this.PlayerGuid = playerGuid; + this.Target = target; + } +} diff --git a/src/backend/interactor/Breaking.cs b/src/backend/interactor/Breaking.cs index 8496f59..5c44f77 100644 --- a/src/backend/interactor/Breaking.cs +++ b/src/backend/interactor/Breaking.cs @@ -1,30 +1,49 @@ using mine2d.backend.data; +using mine2d.core.data; using mine2d.engine.system.annotations; namespace mine2d.backend.interactor; [Interactor] -class Breaking +public class Breaking { [Interaction(InteractorKind.Hybrid, "tick")] - public static void TickHybrid(TickPacket packet) + public static void TickHybrid() { var ctx = Context.Get(); ctx.GameState.Players.ForEach(player => { player.MiningCooldown = Math.Max(0, player.MiningCooldown - 1); - if (player.Mining != Vector2.Zero && player.MiningCooldown == 0) + if (player.Mining != Vector2.Zero && player.MiningCooldown == 0 && ctx.GameState.World.HasChunkAt(player.Mining)) { var chunk = ctx.GameState.World.GetChunkAt(player.Mining); - // chunk.SetTileAt(player.Mining, tile with { Hits = tile.Hits + 1 }); - // var tile = chunk.GetTileAt(amp); - // if (tile.Hits >= hardness) - // { - // chunk.SetTileAt(amp, STile.From(0)); - // } - + var tile = chunk.GetTileAt(player.Mining); + var tileId = tile.Id; + if (tileId != 0) + { + player.MiningCooldown = 10; + var tileRegistry = ctx.TileRegistry; + var hardness = tileRegistry.GetTile(tileId).Hardness; + chunk.SetTileAt(player.Mining, tile with { Hits = tile.Hits + 1 }); + if (tile.Hits >= hardness) + { + chunk.SetTileAt(player.Mining, STile.From(0)); + } + } } } ); } -} \ No newline at end of file + + [Interaction(InteractorKind.Server, "break")] + public static void BreakServer(BreakPacket packet) + { + var ctx = Context.Get(); + var player = ctx.GameState.Players.Find(p => p.Guid == packet.PlayerGuid); + if (player == null) + { + return; + } + player.Mining = packet.Target; + } +} diff --git a/src/engine/PacketUtils.cs b/src/engine/PacketUtils.cs index 378e007..08153d1 100644 --- a/src/engine/PacketUtils.cs +++ b/src/engine/PacketUtils.cs @@ -7,10 +7,6 @@ public static class PacketUtils public static string GetType(ValueType packet) { var t = packet.GetType(); - foreach (var pp in t.GetProperties()) - { - Console.WriteLine(pp.Name); - } var p = t.GetProperty(nameof(IPacket.Type)); if (p == null) { diff --git a/src/frontend/Frontend.cs b/src/frontend/Frontend.cs index 8da2e6e..5341f75 100644 --- a/src/frontend/Frontend.cs +++ b/src/frontend/Frontend.cs @@ -46,28 +46,21 @@ class Frontend : IFrontend if (e.type == SDL_EventType.SDL_MOUSEMOTION) { var mousePos = new Vector2(e.motion.x, e.motion.y); - Console.WriteLine($"Mouse moved to {mousePos}"); ctx.FrontendGameState.MousePosition = mousePos; + if (ctx.GameState.Players.Find(player => player.Guid == ctx.FrontendGameState.PlayerGuid).Mining != Vector2.Zero) + { + var amp = ctx.FrontendGameState.MousePosition / ctx.FrontendGameState.Settings.GameScale + ctx.FrontendGameState.Camera.Position; + ctx.Backend.ProcessPacket(new BreakPacket(ctx.FrontendGameState.PlayerGuid, amp)); + } } if (e.type == SDL_EventType.SDL_MOUSEBUTTONDOWN && e.button.button == SDL_BUTTON_LEFT) { var amp = ctx.FrontendGameState.MousePosition / ctx.FrontendGameState.Settings.GameScale + ctx.FrontendGameState.Camera.Position; - if (ctx.GameState.World.HasChunkAt(amp)) - { - var chunk = ctx.GameState.World.GetChunkAt(amp); - var tile = chunk.GetTileAt(amp); - var tileId = tile.Id; - if (tile.Id != 0) - { - var tileRegistry = ctx.TileRegistry; - var hardness = tileRegistry.GetTile(tileId).Hardness; - chunk.SetTileAt(amp, tile with { Hits = tile.Hits + 1 }); - if (tile.Hits >= hardness) - { - chunk.SetTileAt(amp, STile.From(0)); - } - } - } + ctx.Backend.ProcessPacket(new BreakPacket(ctx.FrontendGameState.PlayerGuid, amp)); + } + if (e.type == SDL_EventType.SDL_MOUSEBUTTONUP && e.button.button == SDL_BUTTON_LEFT) + { + ctx.Backend.ProcessPacket(new BreakPacket(ctx.FrontendGameState.PlayerGuid, Vector2.Zero)); } if (e.type == SDL_EventType.SDL_KEYDOWN && e.key.repeat == 0) { @@ -193,4 +186,4 @@ class Frontend : IFrontend ctx.Renderer.Present(); } -} \ No newline at end of file +}