feat: Multiplayer player moving between rooms

This commit is contained in:
2026-02-02 21:59:55 +01:00
parent e3f5c12b43
commit 9ca3a8d34c
8 changed files with 163 additions and 14 deletions

View File

@@ -49,8 +49,8 @@ public class ConnectToAGameHandler extends AbstractEventHandler<ConnectToAGame>
cl.getSession().sendMessage(new PlayerJoined(player));
if (cl.getPlayer().getCurrentRoom().equals(defaultRoomId)) {
cl.getSession().sendMessage(new PlayerArrivalChange(client.getPlayer().getId(), true));
client.getSession().sendMessage(new PlayerArrivalChange(cl.getPlayer().getId(), true));
cl.getSession().sendMessage(new PlayerArrivalChange(client.getPlayer().getId(), player.getPlayerCords(), true, true));
client.getSession().sendMessage(new PlayerArrivalChange(cl.getPlayer().getId(), cl.getPlayer().getCords(), true, false));
}
}

View File

@@ -0,0 +1,39 @@
package cz.jzitnik.server.events.handlers;
import cz.jzitnik.common.socket.messages.player.PlayerArrivalChange;
import cz.jzitnik.common.socket.messages.room.MovePlayerRoom;
import cz.jzitnik.common.socket.messages.room.MovePlayerRoomResponse;
import cz.jzitnik.server.annotations.EventHandler;
import cz.jzitnik.server.context.GlobalContext;
import cz.jzitnik.server.events.AbstractEventHandler;
import cz.jzitnik.server.game.Client;
import lombok.extern.slf4j.Slf4j;
import java.util.stream.Collectors;
@Slf4j
@EventHandler(MovePlayerRoom.class)
public class MovePlayerRoomHandler extends AbstractEventHandler<MovePlayerRoom> {
public MovePlayerRoomHandler(GlobalContext globalContext) {
super(globalContext);
}
@Override
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.getPlayer().setCurrentRoom(event.newRoomId());
for (Client player : client.getGame().getPlayers()) {
if (player.getPlayer().getId() != client.getPlayer().getId()) {
if (player.getPlayer().getCurrentRoom().equals(oldRoomId)) {
log.debug("{}", event.oldCords());
player.getSession().sendMessage(new PlayerArrivalChange(client.getPlayer().getId(), event.oldCords(), false, true));
} else if (player.getPlayer().getCurrentRoom().equals(event.newRoomId())) {
player.getSession().sendMessage(new PlayerArrivalChange(client.getPlayer().getId(), event.newCords(), true, true));
}
}
}
}
}