feat: Player movement multiplayer

This commit is contained in:
2026-02-02 21:06:46 +01:00
parent 24f54b8b7a
commit e3f5c12b43
26 changed files with 322 additions and 92 deletions

View File

@@ -3,6 +3,8 @@ package cz.jzitnik.server.events.handlers;
import cz.jzitnik.common.models.player.PlayerCreation;
import cz.jzitnik.common.socket.messages.game.connection.ConnectToAGame;
import cz.jzitnik.common.socket.messages.game.connection.ConnectToAGameResponse;
import cz.jzitnik.common.socket.messages.player.PlayerArrivalChange;
import cz.jzitnik.common.socket.messages.player.PlayerJoined;
import cz.jzitnik.server.annotations.EventHandler;
import cz.jzitnik.server.context.GlobalContext;
import cz.jzitnik.server.events.AbstractEventHandler;
@@ -35,12 +37,23 @@ public class ConnectToAGameHandler extends AbstractEventHandler<ConnectToAGame>
ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());
ObjectReader playerReader = objectMapper.readerFor(PlayerCreation.class);
PlayerCreation player = playerReader.readValue(getClass().getClassLoader().getResourceAsStream("setup/player.yaml"));
client.setPlayer(new Player(game.getPlayers().size(), player.getPlayerCords()));
player.setId(game.getPlayers().size());
client.setPlayer(new Player(player));
client.setGame(game);
client.getPlayer().setCurrentRoom(globalContext.getProperties().getProperty("rooms.default"));
String defaultRoomId = globalContext.getProperties().getProperty("rooms.default");
client.getPlayer().setCurrentRoom(defaultRoomId);
client.getSession().sendMessage(new ConnectToAGameResponse(player, game.getPlayers().stream().map(client1 -> client1.getPlayer().toPlayerCreation()).toList()));
for (Client cl : game.getPlayers()) {
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));
}
}
game.getPlayers().add(client);
client.getSession().sendMessage(new ConnectToAGameResponse(player));
}
}

View File

@@ -35,7 +35,7 @@ public class CreateGameHandler extends AbstractEventHandler<CreateGame> {
PlayerCreation player = playerReader.readValue(getClass().getClassLoader().getResourceAsStream("setup/player.yaml"));
player.setId(id);
client.setPlayer(new Player(id, player.getPlayerCords()));
client.setPlayer(new Player(player));
CreateGameResponse gameResponse = new CreateGameResponse(pass, player);
Game game = new Game(

View File

@@ -19,7 +19,7 @@ public class PlayerMoveHandler extends AbstractEventHandler<PlayerMove> {
for (Client player : client.getGame().getPlayers()) {
if (player.getPlayer().getCurrentRoom().equals(client.getPlayer().getCurrentRoom()) && player.getPlayer().getId() != client.getPlayer().getId()) {
player.getSession().sendMessage(new PlayerMovedInUrRoom(client.getPlayer().getId(), event.newCords()));
player.getSession().sendMessage(new PlayerMovedInUrRoom(client.getPlayer().getId(), event.newCords(), event.playerRotation()));
}
}
}

View File

@@ -1,15 +1,23 @@
package cz.jzitnik.server.game;
import cz.jzitnik.common.models.coordinates.RoomCords;
import cz.jzitnik.common.models.player.PlayerCreation;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
@Getter
@RequiredArgsConstructor
public class Player {
private final int id;
private final RoomCords cords;
@Setter
private String currentRoom;
public Player(PlayerCreation creation) {
id = creation.getId();
cords = creation.getPlayerCords();
}
public PlayerCreation toPlayerCreation() {
return new PlayerCreation(cords, null);
}
}