added hotbar selection
This commit is contained in:
parent
0c1cfe8d1a
commit
8edad6846b
Binary file not shown.
|
After Width: | Height: | Size: 185 B |
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,4 +9,5 @@ public enum EventType
|
||||||
KeyDown,
|
KeyDown,
|
||||||
KeyUp,
|
KeyUp,
|
||||||
WindowResize,
|
WindowResize,
|
||||||
|
MouseWheel,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue