feat: Multiplayer #3

Merged
jzitnik merged 14 commits from multiplayer into main 2026-02-04 10:37:42 +00:00
5 changed files with 42 additions and 3 deletions
Showing only changes of commit f6de75afd9 - Show all commits

View File

@@ -1,8 +1,22 @@
package cz.jzitnik.common.socket.messages.room; 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.SocketMessage;
import cz.jzitnik.common.socket.messages.player.PlayerRotation;
import java.io.Serializable;
import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors;
public record MovePlayerRoomResponse(Set<Integer> players) implements SocketMessage { public record MovePlayerRoomResponse(Set<Registry> players) implements SocketMessage {
public record Registry(int id, RoomCords cords, PlayerRotation playerRotation) implements Serializable {}
public Optional<Registry> getById(int id) {
return players.stream().filter(registry -> registry.id == id).findFirst();
}
public Set<Integer> getIds() {
return players.stream().map(Registry::id).collect(Collectors.toSet());
}
} }

View File

@@ -10,6 +10,8 @@ import cz.jzitnik.client.socket.AbstractSocketEventHandler;
import cz.jzitnik.client.utils.events.EventManager; import cz.jzitnik.client.utils.events.EventManager;
import cz.jzitnik.common.socket.messages.room.MovePlayerRoomResponse; import cz.jzitnik.common.socket.messages.room.MovePlayerRoomResponse;
import java.util.Set;
@SocketEventHandler(MovePlayerRoomResponse.class) @SocketEventHandler(MovePlayerRoomResponse.class)
public class MovePlayerRoomResponseHandler extends AbstractSocketEventHandler<MovePlayerRoomResponse> { public class MovePlayerRoomResponseHandler extends AbstractSocketEventHandler<MovePlayerRoomResponse> {
@InjectDependency @InjectDependency
@@ -20,8 +22,15 @@ public class MovePlayerRoomResponseHandler extends AbstractSocketEventHandler<Mo
@Override @Override
public void handle(MovePlayerRoomResponse event) { public void handle(MovePlayerRoomResponse event) {
Set<Integer> ids = event.getIds();
for (OtherPlayer player : gameState.getAllOtherPlayers()) { 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()); eventManager.emitEvent(new FullRoomDraw());

View File

@@ -22,7 +22,18 @@ public class MovePlayerRoomHandler extends AbstractEventHandler<MovePlayerRoom>
public void handle(MovePlayerRoom event, Client client) { public void handle(MovePlayerRoom event, Client client) {
String oldRoomId = client.getPlayer().getCurrentRoom(); 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()); client.getPlayer().setCurrentRoom(event.newRoomId());
for (Client player : client.getGame().getPlayers()) { for (Client player : client.getGame().getPlayers()) {

View File

@@ -16,6 +16,7 @@ public class PlayerMoveHandler extends AbstractEventHandler<PlayerMove> {
@Override @Override
public void handle(PlayerMove event, Client client) { public void handle(PlayerMove event, Client client) {
client.getPlayer().getCords().updateCords(event.newCords()); client.getPlayer().getCords().updateCords(event.newCords());
client.getPlayer().setPlayerRotation(event.playerRotation());
for (Client player : client.getGame().getPlayers()) { for (Client player : client.getGame().getPlayers()) {
if (player.getPlayer().getCurrentRoom().equals(client.getPlayer().getCurrentRoom()) && player.getPlayer().getId() != client.getPlayer().getId()) { if (player.getPlayer().getCurrentRoom().equals(client.getPlayer().getCurrentRoom()) && player.getPlayer().getId() != client.getPlayer().getId()) {

View File

@@ -2,6 +2,7 @@ package cz.jzitnik.server.game;
import cz.jzitnik.common.models.coordinates.RoomCords; import cz.jzitnik.common.models.coordinates.RoomCords;
import cz.jzitnik.common.models.player.PlayerCreation; import cz.jzitnik.common.models.player.PlayerCreation;
import cz.jzitnik.common.socket.messages.player.PlayerRotation;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@@ -10,11 +11,14 @@ public class Player {
private final int id; private final int id;
private final RoomCords cords; private final RoomCords cords;
@Setter @Setter
private PlayerRotation playerRotation;
@Setter
private String currentRoom; private String currentRoom;
public Player(PlayerCreation creation) { public Player(PlayerCreation creation) {
id = creation.getId(); id = creation.getId();
cords = creation.getPlayerCords(); cords = creation.getPlayerCords();
playerRotation = PlayerRotation.FRONT;
} }
public PlayerCreation toPlayerCreation() { public PlayerCreation toPlayerCreation() {