feat: Multiplayer #2
@@ -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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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());
|
||||||
|
|||||||
@@ -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()) {
|
||||||
|
|||||||
@@ -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()) {
|
||||||
|
|||||||
@@ -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() {
|
||||||
|
|||||||
Reference in New Issue
Block a user