package de.towerdefence.server.match; import de.towerdefence.server.match.callbacks.PlayerHitpointsCallback; import de.towerdefence.server.match.callbacks.PlayerMoneyCallback; import de.towerdefence.server.player.Player; import lombok.Getter; import java.util.Optional; @Getter public class Match { private final String matchId; private final Player player1; private final Player player2; private GameSession player1Session; private GameSession player2Session; public Match(String matchId, Player player1, Player player2) { this.matchId = matchId; this.player1 = player1; this.player2 = player2; } public Optional getOpponent(Player player) { boolean isPlayer1 = player1.equals(player); boolean isPlayer2 = player2.equals(player); if (!isPlayer1 && !isPlayer2) { return Optional.empty(); } if (isPlayer1) { return Optional.of(player2); } return Optional.of(player1); } public Optional getPlayerGameSession(Player player) { boolean isPlayer1 = player1.equals(player); boolean isPlayer2 = player2.equals(player); if (!isPlayer1 && !isPlayer2) { return Optional.empty(); } if (isPlayer1) { return Optional.of(player1Session); } return Optional.of(player2Session); } public void connectPlayer( Player player, PlayerMoneyCallback moneyCallback, PlayerHitpointsCallback hitpointsCallback ) { boolean isPlayer1 = player1.equals(player); boolean isPlayer2 = player2.equals(player); if (!isPlayer1 && !isPlayer2) { return; } if (isPlayer1 && player1Session == null) { this.player1Session = new GameSession(player, moneyCallback); return; } if (isPlayer2 && player2Session == null) { this.player2Session = new GameSession(player, moneyCallback); return; } } public boolean hasMatchStarted() { return player1Session != null && player2Session != null; } }