wip hotbar
This commit is contained in:
parent
cc08ce8f2a
commit
c545fb6933
|
|
@ -18,8 +18,7 @@
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<EmbeddedResource Include="assets/*" />
|
<EmbeddedResource Include="assets/**/*" />
|
||||||
<EmbeddedResource Include="assets/audio/*" />
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
using Mine2d.engine;
|
using Mine2d.engine;
|
||||||
using Mine2d.engine.system.annotations;
|
using Mine2d.engine.system.annotations;
|
||||||
|
using Mine2d.game.backend.data;
|
||||||
using Mine2d.game.core.data;
|
using Mine2d.game.core.data;
|
||||||
using Mine2d.game.core.data.entities;
|
using Mine2d.game.core.data.entities;
|
||||||
|
|
||||||
|
|
@ -36,7 +37,7 @@ public class ItemPhysics
|
||||||
}
|
}
|
||||||
|
|
||||||
[Interaction(InteractorKind.Hybrid, "tick")]
|
[Interaction(InteractorKind.Hybrid, "tick")]
|
||||||
public static void Pickup()
|
public static void Pickup(TickPacket tickPacket)
|
||||||
{
|
{
|
||||||
var gameState = Context.Get().GameState;
|
var gameState = Context.Get().GameState;
|
||||||
var world = gameState.World;
|
var world = gameState.World;
|
||||||
|
|
@ -47,6 +48,7 @@ public class ItemPhysics
|
||||||
|
|
||||||
var items = chunk.Value.Entities.Where(e =>
|
var items = chunk.Value.Entities.Where(e =>
|
||||||
{
|
{
|
||||||
|
Console.WriteLine("Where");
|
||||||
return e is ItemEntity itemEntity &&
|
return e is ItemEntity itemEntity &&
|
||||||
(player.Position + new Vector2(7, 3) - itemEntity.Position).LengthSquared() < 8 * 8 &&
|
(player.Position + new Vector2(7, 3) - itemEntity.Position).LengthSquared() < 8 * 8 &&
|
||||||
player.inventory.PickupItemStack(new ItemStack { Id = itemEntity.ItemId, Count = 1 });
|
player.inventory.PickupItemStack(new ItemStack { Id = itemEntity.ItemId, Count = 1 });
|
||||||
|
|
@ -54,6 +56,7 @@ public class ItemPhysics
|
||||||
if (items.Any())
|
if (items.Any())
|
||||||
{
|
{
|
||||||
Context.Get().GameAudio.Play(Sound.ItemPickup);
|
Context.Get().GameAudio.Play(Sound.ItemPickup);
|
||||||
|
Console.WriteLine(tickPacket.Tick + " " + items.Count());
|
||||||
}
|
}
|
||||||
_ = chunk.Value.Entities.RemoveAll(e => items.Contains(e));
|
_ = chunk.Value.Entities.RemoveAll(e => items.Contains(e));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,4 +4,14 @@ public class ItemStack
|
||||||
{
|
{
|
||||||
public ItemId Id { get; set; }
|
public ItemId Id { get; set; }
|
||||||
public int Count { get; set; }
|
public int Count { get; set; }
|
||||||
|
|
||||||
|
public IntPtr GetTexture()
|
||||||
|
{
|
||||||
|
return Context.Get().ItemRegistry.GetItem(this.Id).GetTexture();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetName()
|
||||||
|
{
|
||||||
|
return Context.Get().ItemRegistry.GetItem(this.Id).Name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,4 +25,9 @@ public class Item
|
||||||
new Vector2(4 * scale, 6 * scale);
|
new Vector2(4 * scale, 6 * scale);
|
||||||
renderer.DrawTexture(this.texture, (int)targetPos.X, (int)targetPos.Y, 8 * scale, 8 * scale);
|
renderer.DrawTexture(this.texture, (int)targetPos.X, (int)targetPos.Y, 8 * scale, 8 * scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IntPtr GetTexture()
|
||||||
|
{
|
||||||
|
return this.texture;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,9 @@ public class GameRenderer : IRenderer
|
||||||
this.renderers.Add(new BackgroundRenderer());
|
this.renderers.Add(new BackgroundRenderer());
|
||||||
this.renderers.Add(new WorldRenderer());
|
this.renderers.Add(new WorldRenderer());
|
||||||
this.renderers.Add(new PlayerRenderer());
|
this.renderers.Add(new PlayerRenderer());
|
||||||
this.renderers.Add(new WorldCursorRenderer());
|
|
||||||
this.renderers.Add(new ItemRenderer());
|
this.renderers.Add(new ItemRenderer());
|
||||||
|
this.renderers.Add(new WorldCursorRenderer());
|
||||||
|
this.renderers.Add(new HudRenderer());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Render()
|
public void Render()
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
using Mine2d.engine;
|
||||||
|
using Mine2d.engine.utils;
|
||||||
|
using Mine2d.game.core;
|
||||||
|
|
||||||
|
namespace Mine2d.game.frontend.renderer;
|
||||||
|
|
||||||
|
public class HudRenderer : IRenderer
|
||||||
|
{
|
||||||
|
private readonly IntPtr hotbarTexture;
|
||||||
|
|
||||||
|
public HudRenderer()
|
||||||
|
{
|
||||||
|
var fontManager = new FontManager(Context.Get().ResourceLoader);
|
||||||
|
fontManager.RegisterFont("font", "assets.font.ttf", 12);
|
||||||
|
Context.Get().Renderer.SetFont(fontManager.GetFont("font"), new Color(255, 255, 255));
|
||||||
|
var rl = Context.Get().ResourceLoader;
|
||||||
|
var (ptr, size) = rl.LoadToIntPtr("assets.hud.hotbar.png");
|
||||||
|
var sdlBuffer = SDL_RWFromMem(ptr, size);
|
||||||
|
var surface = IMG_Load_RW(sdlBuffer, 1);
|
||||||
|
this.hotbarTexture = Context.Get().Renderer.CreateTextureFromSurface(surface);
|
||||||
|
SDL_FreeSurface(surface);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Render()
|
||||||
|
{
|
||||||
|
var renderer = Context.Get().Renderer;
|
||||||
|
var uiScale = Context.Get().FrontendGameState.Settings.UiScale;
|
||||||
|
// var window = Context.Get().Window;
|
||||||
|
// var (width, height) = window.GetSize();
|
||||||
|
var (hotbarWidth, hotbarHeight) = renderer.GetTextureSize(this.hotbarTexture);
|
||||||
|
var player = PlayerEntity.GetSelf();
|
||||||
|
renderer.DrawTexture(this.hotbarTexture, 0, 0, hotbarWidth * uiScale, hotbarHeight * uiScale);
|
||||||
|
for (var i = 0; i < player?.inventory.Hotbar.Length; i++)
|
||||||
|
{
|
||||||
|
var stack = player.inventory.Hotbar[i];
|
||||||
|
if (stack == null)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
var texture = stack.GetTexture();
|
||||||
|
renderer.DrawTexture(texture, (4 + i * 20) * uiScale, 4 * uiScale, 16 * uiScale, 16 * uiScale);
|
||||||
|
renderer.DrawText(stack.Count.ToString(), (4 + i * 20) * uiScale, 20 * uiScale);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -9,6 +9,7 @@ public class PlayerInventory
|
||||||
|
|
||||||
public bool PickupItemStack(ItemStack itemStack)
|
public bool PickupItemStack(ItemStack itemStack)
|
||||||
{
|
{
|
||||||
|
Console.WriteLine("Picking up" + itemStack.Id + " " + itemStack.Count);
|
||||||
var slot = InventoryUtils.GetFirstMatchingSlot(this.Hotbar, itemStack.Id);
|
var slot = InventoryUtils.GetFirstMatchingSlot(this.Hotbar, itemStack.Id);
|
||||||
if (slot == -1)
|
if (slot == -1)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue