From f6de75afd97db3ee2e22d6db3686a1e357fc36a4 Mon Sep 17 00:00:00 2001 From: jzitnik-dev Date: Tue, 3 Feb 2026 09:54:23 +0100 Subject: [PATCH] feat: Store player rotation --- .../messages/room/MovePlayerRoomResponse.java | 16 +++++++++++++++- .../events/MovePlayerRoomResponseHandler.java | 11 ++++++++++- .../events/handlers/MovePlayerRoomHandler.java | 13 ++++++++++++- .../events/handlers/PlayerMoveHandler.java | 1 + .../main/java/cz/jzitnik/server/game/Player.java | 4 ++++ 5 files changed, 42 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/cz/jzitnik/common/socket/messages/room/MovePlayerRoomResponse.java b/common/src/main/java/cz/jzitnik/common/socket/messages/room/MovePlayerRoomResponse.java index 789cb1f..1d283d2 100644 --- a/common/src/main/java/cz/jzitnik/common/socket/messages/room/MovePlayerRoomResponse.java +++ b/common/src/main/java/cz/jzitnik/common/socket/messages/room/MovePlayerRoomResponse.java @@ -1,8 +1,22 @@ package cz.jzitnik.common.socket.messages.room; +import cz.jzitnik.common.models.coordinates.RoomCords; import cz.jzitnik.common.socket.SocketMessage; +import cz.jzitnik.common.socket.messages.player.PlayerRotation; +import java.io.Serializable; +import java.util.Optional; import java.util.Set; +import java.util.stream.Collectors; -public record MovePlayerRoomResponse(Set players) implements SocketMessage { +public record MovePlayerRoomResponse(Set players) implements SocketMessage { + public record Registry(int id, RoomCords cords, PlayerRotation playerRotation) implements Serializable {} + + public Optional getById(int id) { + return players.stream().filter(registry -> registry.id == id).findFirst(); + } + + public Set getIds() { + return players.stream().map(Registry::id).collect(Collectors.toSet()); + } } diff --git a/game/src/main/java/cz/jzitnik/client/socket/events/MovePlayerRoomResponseHandler.java b/game/src/main/java/cz/jzitnik/client/socket/events/MovePlayerRoomResponseHandler.java index dff01dc..2b9f166 100644 --- a/game/src/main/java/cz/jzitnik/client/socket/events/MovePlayerRoomResponseHandler.java +++ b/game/src/main/java/cz/jzitnik/client/socket/events/MovePlayerRoomResponseHandler.java @@ -10,6 +10,8 @@ import cz.jzitnik.client.socket.AbstractSocketEventHandler; import cz.jzitnik.client.utils.events.EventManager; import cz.jzitnik.common.socket.messages.room.MovePlayerRoomResponse; +import java.util.Set; + @SocketEventHandler(MovePlayerRoomResponse.class) public class MovePlayerRoomResponseHandler extends AbstractSocketEventHandler { @InjectDependency @@ -20,8 +22,15 @@ public class MovePlayerRoomResponseHandler extends AbstractSocketEventHandler ids = event.getIds(); + for (OtherPlayer player : gameState.getAllOtherPlayers()) { - player.setVisible(event.players().contains(player.getId())); + player.setVisible(ids.contains(player.getId())); + var playerRegistryOptional = event.getById(player.getId()); + if (player.isVisible() && playerRegistryOptional.isPresent()) { + player.getPlayerCords().updateCords(playerRegistryOptional.get().cords()); + player.setPlayerRotation(playerRegistryOptional.get().playerRotation()); + } } eventManager.emitEvent(new FullRoomDraw()); diff --git a/server/src/main/java/cz/jzitnik/server/events/handlers/MovePlayerRoomHandler.java b/server/src/main/java/cz/jzitnik/server/events/handlers/MovePlayerRoomHandler.java index 604854e..3dc6117 100644 --- a/server/src/main/java/cz/jzitnik/server/events/handlers/MovePlayerRoomHandler.java +++ b/server/src/main/java/cz/jzitnik/server/events/handlers/MovePlayerRoomHandler.java @@ -22,7 +22,18 @@ public class MovePlayerRoomHandler extends AbstractEventHandler public void handle(MovePlayerRoom event, Client client) { String oldRoomId = client.getPlayer().getCurrentRoom(); - client.getSession().sendMessage(new MovePlayerRoomResponse(client.getGame().getPlayers().stream().filter(player -> player.getPlayer().getCurrentRoom().equals(event.newRoomId())).map(client1 -> client1.getPlayer().getId()).collect(Collectors.toSet()))); + client.getSession().sendMessage(new MovePlayerRoomResponse( + client.getGame().getPlayers().stream().filter(player -> + player.getPlayer().getCurrentRoom().equals(event.newRoomId()) + ).map(client1 -> + new MovePlayerRoomResponse.Registry( + client1.getPlayer().getId(), + client1.getPlayer().getCords(), + client1.getPlayer().getPlayerRotation() + ) + ).collect(Collectors.toSet()) + )); + client.getPlayer().setCurrentRoom(event.newRoomId()); for (Client player : client.getGame().getPlayers()) { diff --git a/server/src/main/java/cz/jzitnik/server/events/handlers/PlayerMoveHandler.java b/server/src/main/java/cz/jzitnik/server/events/handlers/PlayerMoveHandler.java index 4c8868b..91ad4fc 100644 --- a/server/src/main/java/cz/jzitnik/server/events/handlers/PlayerMoveHandler.java +++ b/server/src/main/java/cz/jzitnik/server/events/handlers/PlayerMoveHandler.java @@ -16,6 +16,7 @@ public class PlayerMoveHandler extends AbstractEventHandler { @Override public void handle(PlayerMove event, Client client) { client.getPlayer().getCords().updateCords(event.newCords()); + client.getPlayer().setPlayerRotation(event.playerRotation()); for (Client player : client.getGame().getPlayers()) { if (player.getPlayer().getCurrentRoom().equals(client.getPlayer().getCurrentRoom()) && player.getPlayer().getId() != client.getPlayer().getId()) { diff --git a/server/src/main/java/cz/jzitnik/server/game/Player.java b/server/src/main/java/cz/jzitnik/server/game/Player.java index 88b932e..33dff31 100644 --- a/server/src/main/java/cz/jzitnik/server/game/Player.java +++ b/server/src/main/java/cz/jzitnik/server/game/Player.java @@ -2,6 +2,7 @@ package cz.jzitnik.server.game; import cz.jzitnik.common.models.coordinates.RoomCords; import cz.jzitnik.common.models.player.PlayerCreation; +import cz.jzitnik.common.socket.messages.player.PlayerRotation; import lombok.Getter; import lombok.Setter; @@ -10,11 +11,14 @@ public class Player { private final int id; private final RoomCords cords; @Setter + private PlayerRotation playerRotation; + @Setter private String currentRoom; public Player(PlayerCreation creation) { id = creation.getId(); cords = creation.getPlayerCords(); + playerRotation = PlayerRotation.FRONT; } public PlayerCreation toPlayerCreation() {