feat: Player reach and some player configs

This commit is contained in:
2025-12-24 11:53:03 +01:00
parent 5b0e026480
commit 7ae808a23c
3 changed files with 64 additions and 7 deletions

View File

@@ -0,0 +1,11 @@
package cz.jzitnik.config;
import cz.jzitnik.annotations.Config;
import lombok.Getter;
@Getter
@Config
public class PlayerConfig {
private final double playerReach = 20;
private final int playerMoveDistance = 3;
}

View File

@@ -6,6 +6,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.config.PlayerConfig;
import cz.jzitnik.events.MouseAction; import cz.jzitnik.events.MouseAction;
import cz.jzitnik.events.MouseMoveEvent; import cz.jzitnik.events.MouseMoveEvent;
import cz.jzitnik.events.RerenderScreen; import cz.jzitnik.events.RerenderScreen;
@@ -55,6 +56,24 @@ public class MouseMoveEventHandler extends AbstractEventHandler<MouseMoveEvent>
@InjectConfig @InjectConfig
private Debugging debugging; private Debugging debugging;
@InjectConfig
private PlayerConfig playerConfig;
private double distancePointToRect(
double px, double py,
double left, double top,
double right, double bottom) {
// Clamp point to rectangle
double closestX = Math.max(left, Math.min(px, right));
double closestY = Math.max(top, Math.min(py, bottom));
double dx = px - closestX;
double dy = py - closestY;
return Math.sqrt(dx * dx + dy * dy);
}
@Override @Override
public void handle(MouseMoveEvent event) { public void handle(MouseMoveEvent event) {
MouseAction mouseAction = event.getMouseAction(); MouseAction mouseAction = event.getMouseAction();
@@ -63,6 +82,10 @@ public class MouseMoveEventHandler extends AbstractEventHandler<MouseMoveEvent>
GameRoom currentRoom = gameState.getCurrentRoom(); GameRoom currentRoom = gameState.getCurrentRoom();
BufferedImage room = resourceManager.getResource(currentRoom.getTexture()); BufferedImage room = resourceManager.getResource(currentRoom.getTexture());
Player player = gameState.getPlayer();
RoomCords playerCords = player.getPlayerCords();
BufferedImage playerTexture = RerenderUtils.getPlayer(resourceManager, player);
var start = RerenderUtils.getStart(room, terminalState.getTerminalScreen().getTerminalSize()); var start = RerenderUtils.getStart(room, terminalState.getTerminalScreen().getTerminalSize());
int startX = start.getX(); int startX = start.getX();
int startY = start.getY(); int startY = start.getY();
@@ -71,11 +94,32 @@ public class MouseMoveEventHandler extends AbstractEventHandler<MouseMoveEvent>
if (!gameObject.isSelectable()) return false; if (!gameObject.isSelectable()) return false;
BufferedImage texture = gameObject.getTexture(); BufferedImage texture = gameObject.getTexture();
RoomCords cords = gameObject.getCords(); RoomCords cords = gameObject.getCords();
int relativeMouseX = mouseX - startX;
int relativeMouseY = (mouseY * 2 - startY);
int objXStart = cords.getX();
int objYStart = cords.getY();
int objXEnd = cords.getX() + texture.getWidth();
int objYEnd = cords.getY() + texture.getHeight();
int playerMiddleX = playerCords.getX() + (playerTexture.getWidth() / 2);
int playerMiddleY = playerCords.getY() + (playerTexture.getHeight() / 3); // This is not middle but whatever
double distance = distancePointToRect(
playerMiddleX, playerMiddleY,
objXStart, objYStart,
objXEnd, objYEnd
);
if (distance > playerConfig.getPlayerReach()) {
return false;
}
return return
mouseX - startX >= cords.getX() && relativeMouseX >= cords.getX() &&
mouseX - startX < cords.getX() + texture.getWidth() && relativeMouseX < cords.getX() + texture.getWidth() &&
(mouseY * 2 - startY) >= cords.getY() && relativeMouseY >= cords.getY() &&
(mouseY * 2 - startY) < cords.getY() + texture.getHeight(); relativeMouseY < cords.getY() + texture.getHeight();
}).collect(Collectors.toSet()); }).collect(Collectors.toSet());
Set<GameObject> changedObjects = new HashSet<>(); Set<GameObject> changedObjects = new HashSet<>();
@@ -95,8 +139,6 @@ public class MouseMoveEventHandler extends AbstractEventHandler<MouseMoveEvent>
for (GameObject object : changedObjects) { for (GameObject object : changedObjects) {
RoomCords cords = object.getCords(); RoomCords cords = object.getCords();
BufferedImage objectTexture = object.getTexture(); BufferedImage objectTexture = object.getTexture();
Player player = gameState.getPlayer();
BufferedImage playerTexture = RerenderUtils.getPlayer(resourceManager, player);
int forStartX = cords.getX(); int forStartX = cords.getX();
int forStartY = cords.getY(); int forStartY = cords.getY();

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.config.PlayerConfig;
import cz.jzitnik.events.PlayerMoveEvent; import cz.jzitnik.events.PlayerMoveEvent;
import cz.jzitnik.events.RerenderScreen; import cz.jzitnik.events.RerenderScreen;
import cz.jzitnik.events.RoomChangeEvent; import cz.jzitnik.events.RoomChangeEvent;
@@ -50,6 +51,9 @@ public class PlayerMoveEventHandler extends AbstractEventHandler<PlayerMoveEvent
@InjectConfig @InjectConfig
private Debugging debugging; private Debugging debugging;
@InjectConfig
private PlayerConfig playerConfig;
@Override @Override
public void handle(PlayerMoveEvent event) { public void handle(PlayerMoveEvent event) {
if (gameState.isTerminalTooSmall()) { if (gameState.isTerminalTooSmall()) {
@@ -61,7 +65,7 @@ public class PlayerMoveEventHandler extends AbstractEventHandler<PlayerMoveEvent
RoomCords playerCords = player.getPlayerCords(); RoomCords playerCords = player.getPlayerCords();
GameRoom currentRoom = gameState.getCurrentRoom(); GameRoom currentRoom = gameState.getCurrentRoom();
int moveStep = 3; int moveStep = playerConfig.getPlayerMoveDistance();
int originalPlayerX = playerCords.getX(); int originalPlayerX = playerCords.getX();
int originalPlayerY = playerCords.getY(); int originalPlayerY = playerCords.getY();