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;
import com.googlecode.lanterna.TerminalPosition;
import com.googlecode.lanterna.TerminalSize;
import com.googlecode.lanterna.TextColor;
import cz.jzitnik.annotations.EventHandler;
import cz.jzitnik.annotations.injectors.InjectDependency;
import cz.jzitnik.events.InventoryRerender;
import cz.jzitnik.events.RerenderScreen;
import cz.jzitnik.game.GameRoom;
import cz.jzitnik.game.GameState;
import cz.jzitnik.game.ResourceManager;
@@ -17,11 +20,14 @@ import cz.jzitnik.utils.DependencyManager;
import cz.jzitnik.utils.RerenderUtils;
import cz.jzitnik.utils.StateManager;
import cz.jzitnik.utils.events.AbstractEventHandler;
import cz.jzitnik.utils.events.EventManager;
import java.awt.image.BufferedImage;
@EventHandler(InventoryRerender.class)
public class InventoryRerenderHandler extends AbstractEventHandler<InventoryRerender> {
@InjectDependency
private EventManager eventManager;
private static final int ITEMS_X = 3;
private static final int ITEMS_Y = 5;
@@ -49,7 +55,9 @@ public class InventoryRerenderHandler extends AbstractEventHandler<InventoryRere
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);
ResourceManager resourceManager = dm.getDependencyOrThrow(ResourceManager.class);
@@ -91,10 +99,16 @@ public class InventoryRerenderHandler extends AbstractEventHandler<InventoryRere
for (int y = 0; y < grid.getHeight(); y++) {
System.arraycopy(internalBuffer[y], 0, buffer[y + OFFSET_Y], OFFSET_X, grid.getWidth());
}
return new RenderResponse(OFFSET_X, OFFSET_Y);
}
@Override
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.utils.RoomCords;
import cz.jzitnik.utils.DependencyManager;
import cz.jzitnik.utils.events.EventManager;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
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.InjectState;
import cz.jzitnik.config.Debugging;
import cz.jzitnik.events.InventoryRerender;
import cz.jzitnik.events.MouseAction;
import cz.jzitnik.events.RerenderScreen;
import cz.jzitnik.game.GameRoom;
@@ -268,6 +269,8 @@ public final class Chest extends GameObject implements UIClickHandler {
GameItem item = items.get(itemIndex);
gameState.getPlayer().getInventory().add(item);
eventManager.emitEvent(new InventoryRerender());
items.remove(item);
if (items.isEmpty()) {