Lobby sisenemine¶
Töötle ekraanis oleva lobbi vajutamist¶
JoinLobbyClickListener.java
@AllArgsConstructor
public class JoinLobbyClickListener extends ClickListener {
private final int lobbyId;
@Override
public void clicked(InputEvent event, float x, float y) {
ClientLauncher.getInstance().sendUDP(new JoinLobbyPacket(lobbyId));
}
}
Lisame see listener iga lobbile.
LobbiesListScreen.java
public void addLobby(Lobby lobby) {
TextButton lobbyButton = new TextButton(lobby.getName(), skin);
lobbyButton.addListener(new JoinLobbyClickListener(lobby.getId()));
...
}
Päringu töötlemine serveris¶
@Override
public void received(Connection connection, Object object) {
switch (object) {
...
case JoinLobbyPacket packet ->
ServerLauncher.getInstance().getGame().joinLobby(connection.getID(), packet.getLobbyId());
...
}
}
Lisame mängija lobbisse ja saadame kõigidele mängijatele lobbis, et uus mängija sisenes.
Game.java
public void joinLobby(int id, int lobbyId) {
Player player = players.get(id);
Lobby lobby = lobbies.get(lobbyId);
lobby.joinLobby(player);
for (Player currentPlayer : lobby.getPlayers().values()) {
ServerLauncher.getInstance().sendToUDP(currentPlayer.getId(), new PlayerJoinedLobbyPacket(player, lobby));
}
}
PlayerJoinedLobbyPacket.java
@AllArgsConstructor
@NoArgsConstructor
@Getter
public class PlayerJoinedLobbyPacket {
private Player player;
private Lobby lobby;
}
Vastuse töötlemine kliendis¶
Töötle vastust¶
ClientListener.java
@Override
public void received(Connection connection, Object object) {
switch (object) {
....
case PlayerJoinedLobbyPacket packet ->
Main.getInstance().joinLobby(packet.getPlayer(), packet.getLobby());
...
}
}
Koodi värskendamine¶
Main.java
public void joinLobby(Player player, Lobby lobby) {
if (player.getId() == currentPlayer.getId()) {
currentLobby = lobby;
Gdx.app.postRunnable(new SetScreenRunnable(new LobbyScreen(currentLobby)));
} else {
if (getScreen() instanceof LobbyScreen lobbyScreen) {
lobbyScreen.addPlayer(player);
}
}
}
LobbyScreen.java
private final Map<Integer, Actor> players = new HashMap<>();
public void addPlayer(Player player) {
Label playerNameLabel = new Label(player.getName(), skin);
playersTable.add(playerNameLabel).expandX().fillX();
players.put(player.getId(), playerNameLabel);
playersTable.row();
}
Ja kui mängija sisenes lobbisse, siis lisame teda kõigi mängijate ekraanidele.
LobbyScreen.java
@Override
protected void createInterface() {
...
for (Player player : lobby.getPlayers().values()) {
addPlayer(player);
}
}