refactor(events): Small event manager refactoring

This commit is contained in:
2026-01-21 08:05:32 +01:00
parent cb488f9853
commit 46981937ce
21 changed files with 6 additions and 144 deletions

View File

@@ -1,9 +0,0 @@
package cz.jzitnik.events;
import cz.jzitnik.utils.events.Event;
import lombok.Getter;
@Getter
public class QuestionAnswerEvent implements Event {
private int questionIndex;
}

View File

@@ -13,7 +13,6 @@ import cz.jzitnik.ui.pixels.AlphaPixel;
import cz.jzitnik.ui.pixels.ColoredPixel;
import cz.jzitnik.ui.pixels.Empty;
import cz.jzitnik.ui.pixels.Pixel;
import cz.jzitnik.utils.DependencyManager;
import cz.jzitnik.utils.events.AbstractEventHandler;
import lombok.extern.slf4j.Slf4j;
@@ -31,10 +30,6 @@ public class CliHandler extends AbstractEventHandler<RerenderScreen> {
@InjectState
private RenderState renderState;
public CliHandler(DependencyManager dm) {
super(dm);
}
@Override
public void handle(RerenderScreen event) {
if (renderState.isTerminalTooSmall()) {

View File

@@ -15,7 +15,6 @@ import cz.jzitnik.states.TerminalState;
import cz.jzitnik.ui.pixels.AlphaPixel;
import cz.jzitnik.ui.pixels.ColoredPixel;
import cz.jzitnik.ui.pixels.Empty;
import cz.jzitnik.utils.DependencyManager;
import cz.jzitnik.utils.TextRenderer;
import cz.jzitnik.utils.events.AbstractEventHandler;
import cz.jzitnik.utils.events.EventManager;
@@ -28,9 +27,6 @@ import java.util.ArrayList;
@Slf4j
@EventHandler(Dialog.class)
public class DialogEventHandler extends AbstractEventHandler<Dialog> {
public DialogEventHandler(DependencyManager dm) {
super(dm);
}
@InjectState
private DialogState dialogState;

View File

@@ -5,7 +5,6 @@ import cz.jzitnik.annotations.injectors.InjectDependency;
import cz.jzitnik.events.DroppedItemRerender;
import cz.jzitnik.events.RerenderPart;
import cz.jzitnik.game.utils.RoomCords;
import cz.jzitnik.utils.DependencyManager;
import cz.jzitnik.utils.events.AbstractEventHandler;
import cz.jzitnik.utils.events.EventManager;
@@ -13,10 +12,6 @@ import java.awt.image.BufferedImage;
@EventHandler(DroppedItemRerender.class)
public class DroppedItemRerenderHandler extends AbstractEventHandler<DroppedItemRerender> {
public DroppedItemRerenderHandler(DependencyManager dm) {
super(dm);
}
@InjectDependency
private EventManager eventManager;

View File

@@ -5,9 +5,7 @@ import cz.jzitnik.annotations.injectors.InjectDependency;
import cz.jzitnik.annotations.injectors.InjectState;
import cz.jzitnik.events.ExitEvent;
import cz.jzitnik.states.RunningState;
import cz.jzitnik.utils.DependencyManager;
import cz.jzitnik.utils.ScheduledTaskManager;
import cz.jzitnik.utils.StateManager;
import cz.jzitnik.utils.ThreadManager;
import cz.jzitnik.utils.events.AbstractEventHandler;
import cz.jzitnik.utils.roomtasks.RoomTaskScheduler;
@@ -26,10 +24,6 @@ public class ExitEventHandler extends AbstractEventHandler<ExitEvent> {
@InjectDependency
private ScheduledTaskManager scheduledTaskManager;
public ExitEventHandler(DependencyManager dm) {
super(dm);
}
@Override
public void handle(ExitEvent event) {
threadManager.shutdownAll();

View File

@@ -7,7 +7,6 @@ import cz.jzitnik.annotations.injectors.InjectState;
import cz.jzitnik.events.FullRedrawEvent;
import cz.jzitnik.events.FullRoomDraw;
import cz.jzitnik.states.TerminalState;
import cz.jzitnik.utils.DependencyManager;
import cz.jzitnik.utils.events.AbstractEventHandler;
import cz.jzitnik.utils.events.EventManager;
@@ -21,10 +20,6 @@ public class FullRedrawEventHandler extends AbstractEventHandler<FullRedrawEvent
@InjectState
private TerminalState terminalState;
public FullRedrawEventHandler(DependencyManager dm) {
super(dm);
}
@Override
public void handle(FullRedrawEvent event) {
terminalState.getTerminalScreen().clear();

View File

@@ -18,12 +18,8 @@ import cz.jzitnik.game.ResourceManager;
import cz.jzitnik.states.RenderState;
import cz.jzitnik.states.ScreenBuffer;
import cz.jzitnik.states.TerminalState;
import cz.jzitnik.ui.Inventory;
import cz.jzitnik.ui.Stats;
import cz.jzitnik.utils.DependencyManager;
import cz.jzitnik.utils.GlobalIOHandlerRepository;
import cz.jzitnik.utils.RerenderUtils;
import cz.jzitnik.utils.UIRoomClickHandlerRepository;
import cz.jzitnik.utils.events.AbstractEventHandler;
import cz.jzitnik.utils.events.EventManager;
import cz.jzitnik.utils.roomtasks.RoomTaskScheduler;
@@ -59,10 +55,6 @@ public class FullRoomDrawHandler extends AbstractEventHandler<FullRoomDraw> {
@InjectDependency
private GlobalIOHandlerRepository globalIOHandlerRepository;
public FullRoomDrawHandler(DependencyManager dm) {
super(dm);
}
@Override
public void handle(FullRoomDraw event) {
try {
@@ -96,9 +88,7 @@ public class FullRoomDrawHandler extends AbstractEventHandler<FullRoomDraw> {
if (renderState.isFirstRender() || event.isFullRerender()) {
eventManager.emitEvent(RerenderScreen.full(terminalSize));
renderState.setFirstRender(false);
scheduler.schedule(() -> {
roomTaskScheduler.setupNewSchedulers(currentRoom);
}, 200, TimeUnit.MILLISECONDS);
scheduler.schedule(() -> roomTaskScheduler.setupNewSchedulers(currentRoom), 200, TimeUnit.MILLISECONDS);
} else {
eventManager.emitEvent(new RerenderScreen(partsToRerender.toArray(RerenderScreen.ScreenPart[]::new)));
}

View File

@@ -6,7 +6,6 @@ import cz.jzitnik.annotations.injectors.InjectDependency;
import cz.jzitnik.events.InventoryRerender;
import cz.jzitnik.events.RerenderScreen;
import cz.jzitnik.ui.Inventory;
import cz.jzitnik.utils.DependencyManager;
import cz.jzitnik.utils.events.AbstractEventHandler;
import cz.jzitnik.utils.events.EventManager;
@@ -18,10 +17,6 @@ public class InventoryRerenderHandler extends AbstractEventHandler<InventoryRere
@InjectDependency
private Inventory inventory;
public InventoryRerenderHandler(DependencyManager dm) {
super(dm);
}
@Override
public void handle(InventoryRerender event) {
inventory.renderInventoryRerender();

View File

@@ -5,16 +5,11 @@ import cz.jzitnik.annotations.injectors.InjectDependency;
import cz.jzitnik.annotations.injectors.InjectState;
import cz.jzitnik.events.*;
import cz.jzitnik.game.GameState;
import cz.jzitnik.utils.DependencyManager;
import cz.jzitnik.utils.GlobalIOHandlerRepository;
import cz.jzitnik.utils.events.AbstractEventHandler;
@EventHandler(KeyboardPressEvent.class)
public class KeyboardPressEventHandler extends AbstractEventHandler<KeyboardPressEvent> {
public KeyboardPressEventHandler(DependencyManager dm) {
super(dm);
}
@InjectState
private GameState gameState;

View File

@@ -20,10 +20,6 @@ import java.util.stream.Stream;
@EventHandler(MouseAction.class)
public class MouseActionEventHandler extends AbstractEventHandler<MouseAction> {
public MouseActionEventHandler(DependencyManager dm) {
super(dm);
}
@InjectDependency
private EventManager eventManager;
@@ -39,6 +35,9 @@ public class MouseActionEventHandler extends AbstractEventHandler<MouseAction> {
@InjectConfig
private PlayerConfig playerConfig;
@InjectDependency
private DependencyManager dependencyManager;
@Override
public void handle(MouseAction event) {
if (gameState.getScreen() != null) {
@@ -77,7 +76,7 @@ public class MouseActionEventHandler extends AbstractEventHandler<MouseAction> {
gameState.getPlayer().swing(playerConfig.getSwingTimeMs());
object.ifPresent(selectable -> {
dm.inject(selectable);
dependencyManager.inject(selectable);
selectable.interact();
});
}

View File

@@ -19,7 +19,6 @@ import cz.jzitnik.game.utils.RoomCords;
import cz.jzitnik.game.utils.Selectable;
import cz.jzitnik.states.ScreenBuffer;
import cz.jzitnik.states.TerminalState;
import cz.jzitnik.utils.DependencyManager;
import cz.jzitnik.utils.RerenderUtils;
import cz.jzitnik.utils.events.AbstractEventHandler;
import cz.jzitnik.utils.events.EventManager;
@@ -36,10 +35,6 @@ import java.util.stream.Stream;
@Slf4j
@EventHandler(MouseMoveEvent.class)
public class MouseMoveEventHandler extends AbstractEventHandler<MouseMoveEvent> {
public MouseMoveEventHandler(DependencyManager dm) {
super(dm);
}
private MouseMoveEvent lastEvent = new MouseMoveEvent(new MouseAction(MouseActionType.MOVE, 1, new TerminalPosition(0, 0)));
@InjectState

View File

@@ -23,7 +23,6 @@ import cz.jzitnik.states.ScreenBuffer;
import cz.jzitnik.states.PlayerMovementState;
import cz.jzitnik.states.TerminalState;
import cz.jzitnik.ui.Stats;
import cz.jzitnik.utils.DependencyManager;
import cz.jzitnik.utils.RerenderUtils;
import cz.jzitnik.utils.events.AbstractEventHandler;
import cz.jzitnik.utils.events.Event;
@@ -58,10 +57,6 @@ public class PlayerMoveEventHandler extends AbstractEventHandler<PlayerMoveEvent
@InjectDependency
private Stats stats;
public PlayerMoveEventHandler(DependencyManager dm) {
super(dm);
}
@Override
public void handle(PlayerMoveEvent event) {
if (renderState.isTerminalTooSmall()) {

View File

@@ -1,35 +0,0 @@
package cz.jzitnik.events.handlers;
import cz.jzitnik.annotations.EventHandler;
import cz.jzitnik.annotations.injectors.InjectDependency;
import cz.jzitnik.annotations.injectors.InjectState;
import cz.jzitnik.events.QuestionAnswerEvent;
import cz.jzitnik.game.dialog.Dialog;
import cz.jzitnik.game.dialog.OnEnd;
import cz.jzitnik.states.DialogState;
import cz.jzitnik.utils.DependencyManager;
import cz.jzitnik.utils.events.AbstractEventHandler;
import cz.jzitnik.utils.events.EventManager;
@EventHandler(QuestionAnswerEvent.class)
public class QuestionAnswerEventHandler extends AbstractEventHandler<QuestionAnswerEvent> {
public QuestionAnswerEventHandler(DependencyManager dm) {
super(dm);
}
@InjectState
private DialogState dialogState;
@InjectDependency
private EventManager eventManager;
@Override
public void handle(QuestionAnswerEvent event) {
OnEnd dialogOnEnd = dialogState.getCurrentDialog().getOnEnd();
if (dialogOnEnd instanceof OnEnd.AskQuestion dialog) {
OnEnd.AskQuestion.Answer answer = dialog.answers()[event.getQuestionIndex()];
Dialog switchTo = answer.dialog();
}
}
}

View File

@@ -6,7 +6,6 @@ import cz.jzitnik.annotations.injectors.InjectDependency;
import cz.jzitnik.events.RenderStats;
import cz.jzitnik.events.RerenderScreen;
import cz.jzitnik.ui.Stats;
import cz.jzitnik.utils.DependencyManager;
import cz.jzitnik.utils.events.AbstractEventHandler;
import cz.jzitnik.utils.events.EventManager;
@@ -18,10 +17,6 @@ public class RenderStatsHandler extends AbstractEventHandler<RenderStats> {
@InjectDependency
private Stats stats;
public RenderStatsHandler(DependencyManager dm) {
super(dm);
}
@Override
public void handle(RenderStats event) {
stats.rerender();

View File

@@ -14,7 +14,6 @@ import cz.jzitnik.game.ResourceManager;
import cz.jzitnik.game.utils.RoomCords;
import cz.jzitnik.states.ScreenBuffer;
import cz.jzitnik.states.TerminalState;
import cz.jzitnik.utils.DependencyManager;
import cz.jzitnik.utils.RerenderUtils;
import cz.jzitnik.utils.events.AbstractEventHandler;
import cz.jzitnik.utils.events.EventManager;
@@ -23,10 +22,6 @@ import java.awt.image.BufferedImage;
@EventHandler(RerenderPart.class)
public class RerenderPartHandler extends AbstractEventHandler<RerenderPart> {
public RerenderPartHandler(DependencyManager dm) {
super(dm);
}
@InjectState
private TerminalState terminalState;

View File

@@ -8,7 +8,6 @@ import cz.jzitnik.events.RoomChangeEvent;
import cz.jzitnik.game.GameRoom;
import cz.jzitnik.game.GameState;
import cz.jzitnik.game.utils.RoomCords;
import cz.jzitnik.utils.DependencyManager;
import cz.jzitnik.utils.events.AbstractEventHandler;
import cz.jzitnik.utils.events.EventManager;
import cz.jzitnik.utils.roomtasks.RoomTaskScheduler;
@@ -29,10 +28,6 @@ public class RoomChangeEventHandler extends AbstractEventHandler<RoomChangeEvent
@InjectDependency
private RoomTaskScheduler roomTaskScheduler;
public RoomChangeEventHandler(DependencyManager dm) {
super(dm);
}
@Override
public void handle(RoomChangeEvent event) {
RoomCords playerCords = gameState.getPlayer().getPlayerCords();

View File

@@ -11,7 +11,6 @@ import cz.jzitnik.states.ScreenBuffer;
import cz.jzitnik.ui.pixels.AlphaPixel;
import cz.jzitnik.ui.pixels.Empty;
import cz.jzitnik.ui.pixels.Pixel;
import cz.jzitnik.utils.DependencyManager;
import cz.jzitnik.utils.events.AbstractEventHandler;
import cz.jzitnik.utils.events.EventManager;
import lombok.extern.slf4j.Slf4j;
@@ -19,10 +18,6 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
@EventHandler(TerminalResizeEvent.class)
public class TerminalResizeEventHandler extends AbstractEventHandler<TerminalResizeEvent> {
public TerminalResizeEventHandler(DependencyManager dm) {
super(dm);
}
@InjectDependency
private EventManager eventManager;

View File

@@ -2,7 +2,6 @@ package cz.jzitnik.events.handlers;
import com.googlecode.lanterna.SGR;
import com.googlecode.lanterna.TerminalSize;
import com.googlecode.lanterna.TextCharacter;
import com.googlecode.lanterna.TextColor;
import com.googlecode.lanterna.screen.Screen;
import com.googlecode.lanterna.screen.TerminalScreen;
@@ -10,19 +9,13 @@ import cz.jzitnik.annotations.EventHandler;
import cz.jzitnik.annotations.injectors.InjectState;
import cz.jzitnik.events.TerminalTooSmallEvent;
import cz.jzitnik.states.TerminalState;
import cz.jzitnik.utils.DependencyManager;
import cz.jzitnik.utils.events.AbstractEventHandler;
import java.io.IOException;
import java.util.EnumSet;
import java.util.HashSet;
@EventHandler(TerminalTooSmallEvent.class)
public class TerminalTooSmallEventHandler extends AbstractEventHandler<TerminalTooSmallEvent> {
public TerminalTooSmallEventHandler(DependencyManager dm) {
super(dm);
}
@InjectState
private TerminalState terminalState;

View File

@@ -39,11 +39,9 @@ public class BasicImageScene extends Screen {
int imgWidth = image.getWidth();
int imgHeight = image.getHeight();
// Terminal pixel space (because 1 cell = 2 vertical pixels)
int termPixelWidth = termWidth;
int termPixelHeight = termHeight * 2;
// Scale while preserving aspect ratio
double scale = Math.min(
(double) termPixelWidth / imgWidth,
(double) termPixelHeight / imgHeight
@@ -52,7 +50,6 @@ public class BasicImageScene extends Screen {
int scaledWidth = (int) (imgWidth * scale);
int scaledHeight = (int) (imgHeight * scale);
// Centering offsets (in pixel space)
int xOffset = (termPixelWidth - scaledWidth) / 2;
int yOffset = (termPixelHeight - scaledHeight) / 2;

View File

@@ -1,13 +1,5 @@
package cz.jzitnik.utils.events;
import cz.jzitnik.utils.DependencyManager;
public abstract class AbstractEventHandler<T> {
protected final DependencyManager dm;
public AbstractEventHandler(DependencyManager dm) {
this.dm = dm;
}
public abstract void handle(T event);
}

View File

@@ -74,7 +74,7 @@ public class EventManager extends Thread {
for (var clazz : classes) {
EventHandler eventHandler = clazz.getAnnotation(EventHandler.class);
try {
var instance = (AbstractEventHandler<? extends Event>) clazz.getDeclaredConstructor(DependencyManager.class).newInstance(dependencyManager);
var instance = (AbstractEventHandler<? extends Event>) clazz.getDeclaredConstructor().newInstance();
handlers.put(eventHandler.value(), instance);
} catch (InstantiationException | IllegalAccessException | InvocationTargetException |
NoSuchMethodException e) {