fix: Rerender part after item added to inventory
This commit is contained in:
@@ -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)
|
||||
)));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
Reference in New Issue
Block a user