added hotbar selection

This commit is contained in:
MasterGordon 2022-12-14 17:20:35 +01:00
parent 0c1cfe8d1a
commit 8edad6846b
6 changed files with 56 additions and 1 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 185 B

View File

@ -38,6 +38,10 @@ public class EventService
{ {
EventPublisher.Publish(EventType.KeyUp, e); EventPublisher.Publish(EventType.KeyUp, e);
} }
if (e.type == SDL_EventType.SDL_MOUSEWHEEL)
{
EventPublisher.Publish(EventType.MouseWheel, e);
}
} }
} }
} }

View File

@ -9,4 +9,5 @@ public enum EventType
KeyDown, KeyDown,
KeyUp, KeyUp,
WindowResize, WindowResize,
MouseWheel,
} }

View File

@ -0,0 +1,41 @@
using Mine2d.engine.system;
using Mine2d.engine.system.annotations;
namespace Mine2d.game.frontend.events;
public class InventoryInput
{
[EventListener(EventType.KeyDown)]
public static void OnKeyDown(SDL_Event e)
{
var frontendGameState = Context.Get().FrontendGameState;
frontendGameState.HotbarIndex = e.key.keysym.sym switch
{
SDL_Keycode.SDLK_1 => 0,
SDL_Keycode.SDLK_2 => 1,
SDL_Keycode.SDLK_3 => 2,
SDL_Keycode.SDLK_4 => 3,
SDL_Keycode.SDLK_5 => 4,
SDL_Keycode.SDLK_6 => 5,
SDL_Keycode.SDLK_7 => 6,
SDL_Keycode.SDLK_8 => 7,
SDL_Keycode.SDLK_9 => 8,
_ => frontendGameState.HotbarIndex
};
}
[EventListener(EventType.MouseWheel)]
public static void OnMouseWheel(SDL_Event e)
{
var frontendGameState = Context.Get().FrontendGameState;
frontendGameState.HotbarIndex -= e.wheel.y;
if (frontendGameState.HotbarIndex < 0)
{
frontendGameState.HotbarIndex = 8;
}
if (frontendGameState.HotbarIndex > 8)
{
frontendGameState.HotbarIndex = 0;
}
}
}

View File

@ -7,6 +7,7 @@ namespace Mine2d.game.frontend.renderer;
public class HudRenderer : IRenderer public class HudRenderer : IRenderer
{ {
private readonly IntPtr hotbarTexture; private readonly IntPtr hotbarTexture;
private readonly IntPtr hotbarActiveTexture;
public HudRenderer() public HudRenderer()
{ {
@ -19,17 +20,24 @@ public class HudRenderer : IRenderer
var surface = IMG_Load_RW(sdlBuffer, 1); var surface = IMG_Load_RW(sdlBuffer, 1);
this.hotbarTexture = Context.Get().Renderer.CreateTextureFromSurface(surface); this.hotbarTexture = Context.Get().Renderer.CreateTextureFromSurface(surface);
SDL_FreeSurface(surface); SDL_FreeSurface(surface);
(ptr, size) = rl.LoadToIntPtr("assets.hud.hotbar-active.png");
sdlBuffer = SDL_RWFromMem(ptr, size);
surface = IMG_Load_RW(sdlBuffer, 1);
this.hotbarActiveTexture = Context.Get().Renderer.CreateTextureFromSurface(surface);
SDL_FreeSurface(surface);
} }
public void Render() public void Render()
{ {
var renderer = Context.Get().Renderer; var renderer = Context.Get().Renderer;
var uiScale = Context.Get().FrontendGameState.Settings.UiScale; var uiScale = Context.Get().FrontendGameState.Settings.UiScale;
var activeSlot = Context.Get().FrontendGameState.HotbarIndex;
// var window = Context.Get().Window; // var window = Context.Get().Window;
// var (width, height) = window.GetSize(); // var (width, height) = window.GetSize();
var (hotbarWidth, hotbarHeight) = renderer.GetTextureSize(this.hotbarTexture); var (hotbarWidth, hotbarHeight) = renderer.GetTextureSize(this.hotbarTexture);
var player = PlayerEntity.GetSelf(); var player = PlayerEntity.GetSelf();
renderer.DrawTexture(this.hotbarTexture, 0, 0, hotbarWidth * uiScale, hotbarHeight * uiScale); renderer.DrawTexture(this.hotbarTexture, 0, 0, hotbarWidth * uiScale, hotbarHeight * uiScale);
renderer.DrawTexture(this.hotbarActiveTexture, activeSlot * 24 * uiScale, 0, 24 * uiScale, 24 * uiScale);
for (var i = 0; i < player?.Inventory.Hotbar.Length; i++) for (var i = 0; i < player?.Inventory.Hotbar.Length; i++)
{ {
var stack = player.Inventory.Hotbar[i]; var stack = player.Inventory.Hotbar[i];
@ -40,7 +48,7 @@ public class HudRenderer : IRenderer
var texture = stack.GetTexture(); var texture = stack.GetTexture();
renderer.DrawTexture(texture, (4 + i * 20) * uiScale, 4 * uiScale, 16 * uiScale, 16 * uiScale); renderer.DrawTexture(texture, (4 + i * 20) * uiScale, 4 * uiScale, 16 * uiScale, 16 * uiScale);
renderer.DrawText(stack.Count.ToString(), (4 + i * 20) * uiScale, 20 * uiScale); renderer.DrawText("" + stack.Count, (4 + i * 20) * uiScale, 20 * uiScale);
} }
} }
} }

View File

@ -14,6 +14,7 @@ public class FrontendGameState
public Vector2 MousePosition { get; set; } public Vector2 MousePosition { get; set; }
public Settings Settings { get; set; } = new Settings(); public Settings Settings { get; set; } = new Settings();
public string PlayerName { get; set; } = "Player"; public string PlayerName { get; set; } = "Player";
public int HotbarIndex { get; set; }
} }
public class Settings public class Settings