removed placement inside player

This commit is contained in:
MasterGordon 2022-12-14 19:23:51 +01:00
parent 73daa75c5f
commit fe5706e65f
5 changed files with 49 additions and 4 deletions

View File

@ -43,5 +43,6 @@ public class EventService
EventPublisher.Publish(EventType.MouseWheel, e); EventPublisher.Publish(EventType.MouseWheel, e);
} }
} }
EventPublisher.Publish(EventType.Tick, new SDL_Event());
} }
} }

View File

@ -10,4 +10,5 @@ public enum EventType
KeyUp, KeyUp,
WindowResize, WindowResize,
MouseWheel, MouseWheel,
Tick,
} }

View File

@ -21,12 +21,16 @@ public class Place
{ {
return; return;
} }
if (PlayerEntity.HasCollisionWithAnyPlayer(packet.Target))
{
return;
}
if (ctx.GameState.World.HasChunkAt(packet.Target)) if (ctx.GameState.World.HasChunkAt(packet.Target))
{ {
var chunk = ctx.GameState.World.GetChunkAt(packet.Target); var chunk = ctx.GameState.World.GetChunkAt(packet.Target);
var tile = chunk.GetTileAt(packet.Target); var tile = chunk.GetTileAt(packet.Target);
var tileId = tile.Id; var tileId = tile.Id;
if (tileId != 0 || player.Inventory.Hotbar[packet.Slot]?.Count <= 0) if (tileId != 0 || player.Inventory.Hotbar[packet.Slot] == null || player.Inventory.Hotbar[packet.Slot]?.Count <= 0)
{ {
return; return;
} }

View File

@ -90,4 +90,35 @@ public class PlayerEntity
} }
} while (hasCollision); } while (hasCollision);
} }
public static bool HasCollisionWithAnyPlayer(Vector2 pos)
{
var ctx = Context.Get();
var ts = Constants.TileSize;
var tilePos = new Vector2(pos.X - pos.X % ts, pos.Y - pos.Y % ts);
return ctx.GameState.Players.Any(
player =>
{
var playerPos = player.Position;
var playerSize = new Vector2(14, 28);
var playerRect = new SDL_Rect
{
x = (int)playerPos.X,
y = (int)playerPos.Y - 5,
w = (int)playerSize.X,
h = (int)playerSize.Y
};
var tileRect = new SDL_Rect
{
x = (int)tilePos.X,
y = 24 + (int)tilePos.Y,
w = 16,
h = 16
};
Console.WriteLine("playerRect: " + playerRect.x + ", " + playerRect.y + ", " + playerRect.w + ", " + playerRect.h);
Console.WriteLine("tileRect: " + tileRect.x + ", " + tileRect.y + ", " + tileRect.w + ", " + tileRect.h);
return SDL_HasIntersection(ref playerRect, ref tileRect) == SDL_bool.SDL_TRUE;
}
);
}
} }

View File

@ -6,11 +6,12 @@ namespace Mine2d.game.frontend.events;
public class PlayerBreakInput public class PlayerBreakInput
{ {
[EventListener(EventType.MouseMotion)] private static Vector2 mousePos;
public static void OnBreak(SDL_Event e)
[EventListener(EventType.Tick)]
public static void OnTick()
{ {
var ctx = Context.Get(); var ctx = Context.Get();
var mousePos = new Vector2(e.motion.x, e.motion.y);
ctx.FrontendGameState.MousePosition = mousePos; ctx.FrontendGameState.MousePosition = mousePos;
if (ctx.GameState.Players.Find(player => player.Id == ctx.FrontendGameState.PlayerGuid)?.Mining if (ctx.GameState.Players.Find(player => player.Id == ctx.FrontendGameState.PlayerGuid)?.Mining
!= Vector2.Zero) != Vector2.Zero)
@ -26,6 +27,13 @@ public class PlayerBreakInput
Source = BreakSource.Move Source = BreakSource.Move
}); });
} }
}
[EventListener(EventType.MouseMotion)]
public static void OnBreak(SDL_Event e)
{
mousePos = new Vector2(e.motion.x, e.motion.y);
} }
[EventListener(EventType.MouseButtonDown)] [EventListener(EventType.MouseButtonDown)]