added inventory toggle
This commit is contained in:
parent
06d8c5bacf
commit
37fed3a624
Binary file not shown.
|
After Width: | Height: | Size: 634 B |
|
|
@ -102,7 +102,7 @@ public class Renderer
|
||||||
|
|
||||||
public void DrawText(string text, int x, int y, bool center = false)
|
public void DrawText(string text, int x, int y, bool center = false)
|
||||||
{
|
{
|
||||||
var (texture, width, height, surfaceMessage) = CreateTextTexture(text);
|
var (texture, width, height, surfaceMessage) = this.CreateTextTexture(text);
|
||||||
|
|
||||||
var rect = new SDL_Rect
|
var rect = new SDL_Rect
|
||||||
{
|
{
|
||||||
|
|
@ -200,9 +200,14 @@ public void DrawTexture(IntPtr texture, int x, int y, int w, int h, int srcX, in
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal (int srcW, int srcH) GetTextureSize(IntPtr src)
|
public (int srcW, int srcH) GetTextureSize(IntPtr src)
|
||||||
{
|
{
|
||||||
ProcessStatus(SDL_QueryTexture(src, out _, out _, out var srcW, out var srcH));
|
ProcessStatus(SDL_QueryTexture(src, out _, out _, out var srcW, out var srcH));
|
||||||
return (srcW, srcH);
|
return (srcW, srcH);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void SetDrawBlendMode(SDL_BlendMode blendMode)
|
||||||
|
{
|
||||||
|
ProcessStatus(SDL_SetRenderDrawBlendMode(this.renderer, blendMode));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ public class TextureFactory
|
||||||
return target;
|
return target;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IntPtr LoadTexture(string path)
|
public IntPtr LoadTexture(string path)
|
||||||
{
|
{
|
||||||
if (this.textureCache.TryGetValue(path, out var value))
|
if (this.textureCache.TryGetValue(path, out var value))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ using Mine2d.engine.networking;
|
||||||
using Mine2d.game.core.items;
|
using Mine2d.game.core.items;
|
||||||
using Mine2d.game.core.tiles;
|
using Mine2d.game.core.tiles;
|
||||||
using Mine2d.game.frontend;
|
using Mine2d.game.frontend;
|
||||||
|
using Mine2d.game.frontend.inventory;
|
||||||
using Mine2d.game.state;
|
using Mine2d.game.state;
|
||||||
|
|
||||||
namespace Mine2d.game;
|
namespace Mine2d.game;
|
||||||
|
|
@ -21,6 +22,7 @@ public class Context
|
||||||
public ResourceLoader ResourceLoader { get; set; }
|
public ResourceLoader ResourceLoader { get; set; }
|
||||||
public TextureFactory TextureFactory { get; set; }
|
public TextureFactory TextureFactory { get; set; }
|
||||||
public GameAudio GameAudio { get; set; }
|
public GameAudio GameAudio { get; set; }
|
||||||
|
public InventoryRegistry InventoryRegistry { get; set; }
|
||||||
public static Context Instance { get; set; }
|
public static Context Instance { get; set; }
|
||||||
|
|
||||||
public Context(
|
public Context(
|
||||||
|
|
@ -45,6 +47,7 @@ public class Context
|
||||||
this.TileRegistry = new TileRegistry();
|
this.TileRegistry = new TileRegistry();
|
||||||
this.ItemRegistry = new ItemRegistry();
|
this.ItemRegistry = new ItemRegistry();
|
||||||
this.GameAudio = new GameAudio();
|
this.GameAudio = new GameAudio();
|
||||||
|
this.InventoryRegistry = new InventoryRegistry();
|
||||||
Instance = this;
|
Instance = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,13 @@
|
||||||
using Mine2d.engine.system;
|
using Mine2d.engine.system;
|
||||||
using Mine2d.engine.system.annotations;
|
using Mine2d.engine.system.annotations;
|
||||||
|
using Mine2d.game.state;
|
||||||
|
|
||||||
namespace Mine2d.game.frontend.events;
|
namespace Mine2d.game.frontend.events;
|
||||||
|
|
||||||
public class InventoryInput
|
public class InventoryInput
|
||||||
{
|
{
|
||||||
[EventListener(EventType.KeyDown)]
|
[EventListener(EventType.KeyDown)]
|
||||||
public static void OnKeyDown(SDL_Event e)
|
public static void OnKeyDownSwitchHotbar(SDL_Event e)
|
||||||
{
|
{
|
||||||
var frontendGameState = Context.Get().FrontendGameState;
|
var frontendGameState = Context.Get().FrontendGameState;
|
||||||
frontendGameState.HotbarIndex = e.key.keysym.sym switch
|
frontendGameState.HotbarIndex = e.key.keysym.sym switch
|
||||||
|
|
@ -38,4 +39,18 @@ public class InventoryInput
|
||||||
frontendGameState.HotbarIndex = 0;
|
frontendGameState.HotbarIndex = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[EventListener(EventType.KeyDown)]
|
||||||
|
public static void OnKeyDownOpenInventory(SDL_Event e)
|
||||||
|
{
|
||||||
|
var frontendGameState = Context.Get().FrontendGameState;
|
||||||
|
if(e.key.keysym.sym == SDL_Keycode.SDLK_TAB)
|
||||||
|
{
|
||||||
|
if(frontendGameState.OpenInventory != Inventory.Player) {
|
||||||
|
frontendGameState.OpenInventory = Inventory.Player;
|
||||||
|
} else {
|
||||||
|
frontendGameState.OpenInventory = Inventory.None;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,6 @@
|
||||||
|
namespace Mine2d.game.frontend.inventory;
|
||||||
|
|
||||||
|
public static class InventoryConstants
|
||||||
|
{
|
||||||
|
public static readonly int ExtraSlotsWidth = 21;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Mine2d.game.state;
|
||||||
|
|
||||||
|
namespace Mine2d.game.frontend.inventory;
|
||||||
|
|
||||||
|
public class InventoryRegistry
|
||||||
|
{
|
||||||
|
private readonly Dictionary<Inventory, IInventoryRenderer> inventoryRenderers = new();
|
||||||
|
|
||||||
|
public InventoryRegistry()
|
||||||
|
{
|
||||||
|
this.inventoryRenderers.Add(Inventory.Player, new PlayerInventoryRenderer());
|
||||||
|
}
|
||||||
|
|
||||||
|
public IInventoryRenderer GetRenderer(Inventory inventory)
|
||||||
|
{
|
||||||
|
return this.inventoryRenderers[inventory];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -14,6 +14,7 @@ public class GameRenderer : IRenderer
|
||||||
this.renderers.Add(new ItemRenderer());
|
this.renderers.Add(new ItemRenderer());
|
||||||
this.renderers.Add(new WorldCursorRenderer());
|
this.renderers.Add(new WorldCursorRenderer());
|
||||||
this.renderers.Add(new HudRenderer());
|
this.renderers.Add(new HudRenderer());
|
||||||
|
this.renderers.Add(new InventoryRenderer());
|
||||||
this.renderers.Add(new TooltipRenderer());
|
this.renderers.Add(new TooltipRenderer());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,6 +2,11 @@ using Mine2d.game.core;
|
||||||
|
|
||||||
namespace Mine2d.game.state;
|
namespace Mine2d.game.state;
|
||||||
|
|
||||||
|
public enum Inventory {
|
||||||
|
None,
|
||||||
|
Player
|
||||||
|
}
|
||||||
|
|
||||||
public class FrontendGameState
|
public class FrontendGameState
|
||||||
{
|
{
|
||||||
public Vector2 MovementInput { get; set; }
|
public Vector2 MovementInput { get; set; }
|
||||||
|
|
@ -15,6 +20,7 @@ public class FrontendGameState
|
||||||
public string PlayerName { get; set; } = "Player";
|
public string PlayerName { get; set; } = "Player";
|
||||||
public int HotbarIndex { get; set; }
|
public int HotbarIndex { get; set; }
|
||||||
public string Tooltip { get; set; } = "Test";
|
public string Tooltip { get; set; } = "Test";
|
||||||
|
public Inventory OpenInventory { get; set; } = Inventory.None;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Settings
|
public class Settings
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue