HungerGames/src/main/java/com/alttd/hunger_games/services/RoundService.java

57 lines
1.6 KiB
Java
Raw Normal View History

package com.alttd.hunger_games.services;
import com.alttd.hunger_games.data_objects.PLAYER_STATE;
import com.alttd.hunger_games.data_objects.ROUND_STATE;
import lombok.Getter;
import java.util.*;
import java.util.stream.Collectors;
public class RoundService implements RoundListener {
private static RoundService instance = null;
@Getter
private ROUND_STATE roundState;
private final HashMap<UUID, PLAYER_STATE> players = new HashMap<>();
public static RoundService createSingletonInstance(Round round) {
if (instance != null) {
throw new IllegalStateException("RoundService is already initialized.");
}
instance = new RoundService(round);
return instance;
}
private RoundService(Round round) {
this.roundState = round.register(this);
}
public Set<UUID> getPlayers(PLAYER_STATE playerState) {
return players.entrySet().stream()
.filter(entry -> entry.getValue().equals(playerState))
.map(Map.Entry::getKey)
.collect(Collectors.toSet());
}
protected void setPlayerState(UUID uuid, PLAYER_STATE playerState) {
players.put(uuid, playerState);
}
protected void clear() {
players.clear();
}
public Optional<PLAYER_STATE> getPlayerState(UUID uuid) {
return Optional.ofNullable(players.get(uuid));
}
@Override
public void stateChange(ROUND_STATE roundState) {
this.roundState = roundState;
if (roundState.equals(ROUND_STATE.PLAYER_REGISTRATION)) {
clear();
}
}
}