Added moused pressed mining
This commit is contained in:
parent
f9fc871390
commit
9a07af8212
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,7 +89,14 @@ class Publisher
|
|||
}
|
||||
foreach (var del in this.subscribers[type])
|
||||
{
|
||||
del.DynamicInvoke(packet);
|
||||
if (del.Method.GetParameters().Length == 0)
|
||||
{
|
||||
del.DynamicInvoke();
|
||||
}
|
||||
else
|
||||
{
|
||||
del.DynamicInvoke(packet);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
[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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue