From 37fed3a624deef0c521e8e7d6f8245f07df019cc Mon Sep 17 00:00:00 2001 From: MasterGordon Date: Tue, 20 Dec 2022 02:52:38 +0100 Subject: [PATCH] added inventory toggle --- Mine2d/assets/hud/player-inventory.png | Bin 0 -> 634 bytes Mine2d/engine/Renderer.cs | 11 ++++++--- Mine2d/engine/TextureFactory.cs | 2 +- Mine2d/game/Context.cs | 3 +++ Mine2d/game/frontend/events/InventoryInput.cs | 17 ++++++++++++- .../frontend/inventory/InventoryConstants.cs | 6 +++++ .../frontend/inventory/InventoryRegistry.cs | 22 +++++++++++++++++ .../frontend/inventory/InventoryRenderer.cs | 11 +++++++++ .../inventory/PlayerInventoryRenderer.cs | 23 ++++++++++++++++++ Mine2d/game/frontend/renderer/GameRenderer.cs | 1 + .../frontend/renderer/InventoryRenderer.cs | 19 +++++++++++++++ Mine2d/game/state/FrontendGameState.cs | 6 +++++ 12 files changed, 116 insertions(+), 5 deletions(-) create mode 100644 Mine2d/assets/hud/player-inventory.png create mode 100644 Mine2d/game/frontend/inventory/InventoryConstants.cs create mode 100644 Mine2d/game/frontend/inventory/InventoryRegistry.cs create mode 100644 Mine2d/game/frontend/inventory/InventoryRenderer.cs create mode 100644 Mine2d/game/frontend/inventory/PlayerInventoryRenderer.cs create mode 100644 Mine2d/game/frontend/renderer/InventoryRenderer.cs diff --git a/Mine2d/assets/hud/player-inventory.png b/Mine2d/assets/hud/player-inventory.png new file mode 100644 index 0000000000000000000000000000000000000000..a42212ea1c7ae424726ea31c4e1cc1cf906807f6 GIT binary patch literal 634 zcmeAS@N?(olHy`uVBq!ia0vp^SAn>ZgAGWA$Nx_PQjEnx?oJHr&dI!FU|=%wba4!+ znDh3IZ`SPq2Dgjq$x$sQxJ-1HN`LsbJu_sg0*WJudU9rHmuI8Kv=QD4$>B~Fs zo8;B}{`Iu*0Q>j9$IoY;{+roj$oJZ+@3fA_yJOQ5-yV}_dh{;mXPDXDzWRC7Q@&jP zSyH<#^RsS#USZPPSB^W%7d6dTp`fPK(aDuWkU9Bu+>Z3q;Edj{6>?2-6vv&X*b zL^%lV;+Q{7h7c{{`)_QK%(q%eY*2y25@>0MC0NVOA4iv+t+?z-I56OLyRdG2xnbSo z9cT3F8xI_QY4cW(fBoO{2dc|oW_ inventoryRenderers = new(); + + public InventoryRegistry() + { + this.inventoryRenderers.Add(Inventory.Player, new PlayerInventoryRenderer()); + } + + public IInventoryRenderer GetRenderer(Inventory inventory) + { + return this.inventoryRenderers[inventory]; + } +} diff --git a/Mine2d/game/frontend/inventory/InventoryRenderer.cs b/Mine2d/game/frontend/inventory/InventoryRenderer.cs new file mode 100644 index 0000000..27df789 --- /dev/null +++ b/Mine2d/game/frontend/inventory/InventoryRenderer.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Mine2d.engine; + +namespace Mine2d.game.frontend.inventory; + +public interface IInventoryRenderer : IRenderer +{ +} \ No newline at end of file diff --git a/Mine2d/game/frontend/inventory/PlayerInventoryRenderer.cs b/Mine2d/game/frontend/inventory/PlayerInventoryRenderer.cs new file mode 100644 index 0000000..4f4a487 --- /dev/null +++ b/Mine2d/game/frontend/inventory/PlayerInventoryRenderer.cs @@ -0,0 +1,23 @@ +namespace Mine2d.game.frontend.inventory +{ + public class PlayerInventoryRenderer : IInventoryRenderer + { + private IntPtr texture = IntPtr.Zero; + + public void Render() + { + var ctx = Context.Get(); + if(this.texture == IntPtr.Zero) { + this.texture = ctx.TextureFactory.LoadTexture("hud.player-inventory"); + } + var (width, height) = ctx.Renderer.GetTextureSize(this.texture); + width *= ctx.FrontendGameState.Settings.UiScale; + height *= ctx.FrontendGameState.Settings.UiScale; + var extraSlotsWidth = InventoryConstants.ExtraSlotsWidth * ctx.FrontendGameState.Settings.UiScale; + var (windowWidth, windowHeight) = (ctx.FrontendGameState.WindowWidth, ctx.FrontendGameState.WindowHeight); + var x = (windowWidth - (width - extraSlotsWidth)) / 2; + var y = (windowHeight - height) / 2; + ctx.Renderer.DrawTexture(this.texture, x, y, width, height); + } + } +} \ No newline at end of file diff --git a/Mine2d/game/frontend/renderer/GameRenderer.cs b/Mine2d/game/frontend/renderer/GameRenderer.cs index c607db4..cb60643 100644 --- a/Mine2d/game/frontend/renderer/GameRenderer.cs +++ b/Mine2d/game/frontend/renderer/GameRenderer.cs @@ -14,6 +14,7 @@ public class GameRenderer : IRenderer this.renderers.Add(new ItemRenderer()); this.renderers.Add(new WorldCursorRenderer()); this.renderers.Add(new HudRenderer()); + this.renderers.Add(new InventoryRenderer()); this.renderers.Add(new TooltipRenderer()); } diff --git a/Mine2d/game/frontend/renderer/InventoryRenderer.cs b/Mine2d/game/frontend/renderer/InventoryRenderer.cs new file mode 100644 index 0000000..789cb95 --- /dev/null +++ b/Mine2d/game/frontend/renderer/InventoryRenderer.cs @@ -0,0 +1,19 @@ +using Mine2d.engine; +using Mine2d.game.state; + +namespace Mine2d.game.frontend.renderer +{ + public class InventoryRenderer : IRenderer + { + public void Render() { + var ctx = Context.Get(); + var inventory = ctx.FrontendGameState.OpenInventory; + if(inventory == Inventory.None) return; + ctx.Renderer.SetColor(0, 0, 0, 200); + ctx.Renderer.SetDrawBlendMode(SDL_BlendMode.SDL_BLENDMODE_BLEND); + ctx.Renderer.DrawRect(0, 0, ctx.FrontendGameState.WindowWidth, ctx.FrontendGameState.WindowHeight); + var inventoryRenderer = ctx.InventoryRegistry.GetRenderer(inventory); + inventoryRenderer.Render(); + } + } +} \ No newline at end of file diff --git a/Mine2d/game/state/FrontendGameState.cs b/Mine2d/game/state/FrontendGameState.cs index 966ca42..07fa2f6 100644 --- a/Mine2d/game/state/FrontendGameState.cs +++ b/Mine2d/game/state/FrontendGameState.cs @@ -2,6 +2,11 @@ using Mine2d.game.core; namespace Mine2d.game.state; +public enum Inventory { + None, + Player +} + public class FrontendGameState { public Vector2 MovementInput { get; set; } @@ -15,6 +20,7 @@ public class FrontendGameState public string PlayerName { get; set; } = "Player"; public int HotbarIndex { get; set; } public string Tooltip { get; set; } = "Test"; + public Inventory OpenInventory { get; set; } = Inventory.None; } public class Settings