43 lines
1.2 KiB
C#
43 lines
1.2 KiB
C#
using Mine2d.game.core.data;
|
|
using Mine2d.game.state;
|
|
|
|
namespace Mine2d.game.core.items;
|
|
|
|
public class BlockItem : Item
|
|
{
|
|
public BlockItem(ItemId id, string name, string[] textureName) : base(id, name, textureName)
|
|
{
|
|
}
|
|
|
|
public BlockItem(ItemId id, string name, string textureName) : base(id, name, textureName)
|
|
{
|
|
}
|
|
|
|
public override void Interact(ItemStack stack, Vector2 target, Player player)
|
|
{
|
|
var ctx = Context.Get();
|
|
if ((player.GetCenter() - target).LengthSquared() > Constants.BreakDistance * Constants.BreakDistance)
|
|
{
|
|
return;
|
|
}
|
|
if (PlayerEntity.HasCollisionWithAnyPlayer(target))
|
|
{
|
|
return;
|
|
}
|
|
if (ctx.GameState.World.HasChunkAt(target))
|
|
{
|
|
var chunk = ctx.GameState.World.GetChunkAt(target);
|
|
var tile = chunk.GetTileAt(target);
|
|
|
|
var tileId = tile.Id;
|
|
if (tileId != 0)
|
|
{
|
|
return;
|
|
}
|
|
stack.Count--;
|
|
var itemId = stack.Id;
|
|
var itemTileId = ctx.TileRegistry.GetTileIdByItemId(itemId);
|
|
chunk.SetTileAt(target, STile.From(itemTileId));
|
|
}
|
|
}
|
|
} |