feat: Multiplayer #2
@@ -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<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());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<MovePlayerRoomResponse> {
|
||||
@InjectDependency
|
||||
@@ -20,8 +22,15 @@ public class MovePlayerRoomResponseHandler extends AbstractSocketEventHandler<Mo
|
||||
|
||||
@Override
|
||||
public void handle(MovePlayerRoomResponse event) {
|
||||
Set<Integer> 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());
|
||||
|
||||
@@ -22,7 +22,18 @@ public class MovePlayerRoomHandler extends AbstractEventHandler<MovePlayerRoom>
|
||||
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()) {
|
||||
|
||||
@@ -16,6 +16,7 @@ public class PlayerMoveHandler extends AbstractEventHandler<PlayerMove> {
|
||||
@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()) {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user