fix: Rerender part after item added to inventory

This commit is contained in:
2026-01-02 00:40:38 +01:00
parent 41b7ac2a37
commit 1eea0a701e
3 changed files with 21 additions and 2 deletions

View File

@@ -1,9 +1,12 @@
package cz.jzitnik.events.handlers; package cz.jzitnik.events.handlers;
import com.googlecode.lanterna.TerminalPosition;
import com.googlecode.lanterna.TerminalSize; import com.googlecode.lanterna.TerminalSize;
import com.googlecode.lanterna.TextColor; import com.googlecode.lanterna.TextColor;
import cz.jzitnik.annotations.EventHandler; import cz.jzitnik.annotations.EventHandler;
import cz.jzitnik.annotations.injectors.InjectDependency;
import cz.jzitnik.events.InventoryRerender; import cz.jzitnik.events.InventoryRerender;
import cz.jzitnik.events.RerenderScreen;
import cz.jzitnik.game.GameRoom; import cz.jzitnik.game.GameRoom;
import cz.jzitnik.game.GameState; import cz.jzitnik.game.GameState;
import cz.jzitnik.game.ResourceManager; import cz.jzitnik.game.ResourceManager;
@@ -17,11 +20,14 @@ import cz.jzitnik.utils.DependencyManager;
import cz.jzitnik.utils.RerenderUtils; import cz.jzitnik.utils.RerenderUtils;
import cz.jzitnik.utils.StateManager; import cz.jzitnik.utils.StateManager;
import cz.jzitnik.utils.events.AbstractEventHandler; import cz.jzitnik.utils.events.AbstractEventHandler;
import cz.jzitnik.utils.events.EventManager;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
@EventHandler(InventoryRerender.class) @EventHandler(InventoryRerender.class)
public class InventoryRerenderHandler extends AbstractEventHandler<InventoryRerender> { public class InventoryRerenderHandler extends AbstractEventHandler<InventoryRerender> {
@InjectDependency
private EventManager eventManager;
private static final int ITEMS_X = 3; private static final int ITEMS_X = 3;
private static final int ITEMS_Y = 5; private static final int ITEMS_Y = 5;
@@ -49,7 +55,9 @@ public class InventoryRerenderHandler extends AbstractEventHandler<InventoryRere
super(dm); super(dm);
} }
public static void renderInventoryRerender(DependencyManager dm) { public record RenderResponse(int offsetX, int offsetY) {}
public static RenderResponse renderInventoryRerender(DependencyManager dm) {
StateManager stateManager = dm.getDependencyOrThrow(StateManager.class); StateManager stateManager = dm.getDependencyOrThrow(StateManager.class);
ResourceManager resourceManager = dm.getDependencyOrThrow(ResourceManager.class); ResourceManager resourceManager = dm.getDependencyOrThrow(ResourceManager.class);
@@ -91,10 +99,16 @@ public class InventoryRerenderHandler extends AbstractEventHandler<InventoryRere
for (int y = 0; y < grid.getHeight(); y++) { for (int y = 0; y < grid.getHeight(); y++) {
System.arraycopy(internalBuffer[y], 0, buffer[y + OFFSET_Y], OFFSET_X, grid.getWidth()); System.arraycopy(internalBuffer[y], 0, buffer[y + OFFSET_Y], OFFSET_X, grid.getWidth());
} }
return new RenderResponse(OFFSET_X, OFFSET_Y);
} }
@Override @Override
public void handle(InventoryRerender event) { public void handle(InventoryRerender event) {
renderInventoryRerender(dm); RenderResponse renderResponse = renderInventoryRerender(dm);
eventManager.emitEvent(new RerenderScreen(new RerenderScreen.ScreenPart(
new TerminalPosition(renderResponse.offsetX, renderResponse.offsetY),
new TerminalPosition(renderResponse.offsetX + INVENTORY_WIDTH, renderResponse.offsetY + INVENTORY_HEIGHT)
)));
} }
} }

View File

@@ -2,6 +2,8 @@ package cz.jzitnik.game;
import cz.jzitnik.game.items.GameItem; import cz.jzitnik.game.items.GameItem;
import cz.jzitnik.game.utils.RoomCords; import cz.jzitnik.game.utils.RoomCords;
import cz.jzitnik.utils.DependencyManager;
import cz.jzitnik.utils.events.EventManager;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.Setter; import lombok.Setter;

View File

@@ -7,6 +7,7 @@ import cz.jzitnik.annotations.injectors.InjectConfig;
import cz.jzitnik.annotations.injectors.InjectDependency; import cz.jzitnik.annotations.injectors.InjectDependency;
import cz.jzitnik.annotations.injectors.InjectState; import cz.jzitnik.annotations.injectors.InjectState;
import cz.jzitnik.config.Debugging; import cz.jzitnik.config.Debugging;
import cz.jzitnik.events.InventoryRerender;
import cz.jzitnik.events.MouseAction; import cz.jzitnik.events.MouseAction;
import cz.jzitnik.events.RerenderScreen; import cz.jzitnik.events.RerenderScreen;
import cz.jzitnik.game.GameRoom; import cz.jzitnik.game.GameRoom;
@@ -268,6 +269,8 @@ public final class Chest extends GameObject implements UIClickHandler {
GameItem item = items.get(itemIndex); GameItem item = items.get(itemIndex);
gameState.getPlayer().getInventory().add(item); gameState.getPlayer().getInventory().add(item);
eventManager.emitEvent(new InventoryRerender());
items.remove(item); items.remove(item);
if (items.isEmpty()) { if (items.isEmpty()) {