package fr.lyrgard.hexScape.model.game;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import fr.lyrgard.hexScape.model.card.CardInstance;
import fr.lyrgard.hexScape.model.map.Map;
import fr.lyrgard.hexScape.model.piece.PieceInstance;
import fr.lyrgard.hexScape.model.player.Player;
public class Game {
private String id;
private String name;
private Map map;
private int playerNumber;
private boolean started;
private Collection<Player> players;
private Collection<String> observersIds;
@JsonIgnore
private static ObjectMapper mapper = new ObjectMapper();
public static Game fromJson(String string) throws JsonParseException, JsonMappingException, IOException {
return mapper.readValue(string, Game.class);
}
public String toJson() throws JsonProcessingException {
return mapper.writeValueAsString(this);
}
public Collection<Player> getPlayers() {
if (players == null) {
players = new ArrayList<>();
}
return players;
}
public Player getPlayer(String playerId) {
for (Player player : getPlayers()) {
if (player.getId().equals(playerId)) {
return player;
}
}
return null;
}
public Player getPlayerByUserId(String userId) {
for (Player player : getPlayers()) {
if (player.getUserId() != null && player.getUserId().equals(userId)) {
return player;
}
}
return null;
}
public CardInstance getCard(String cardInstanceId) {
for (Player player : getPlayers()) {
if (player.getArmy() != null) {
CardInstance card = player.getArmy().getCard(cardInstanceId);
if (card != null) {
return card;
}
}
}
return null;
}
public PieceInstance getPiece(String pieceId) {
for (Player player : getPlayers()) {
if (player.getArmy() != null) {
for (CardInstance card : player.getArmy().getCards()) {
PieceInstance piece = card.getPiece(pieceId);
if (piece != null) {
return piece;
}
}
}
}
return null;
}
public Collection<Player> getFreePlayers() {
Collection<Player> freePlayers = new ArrayList<>();
for (Player player : players) {
if (player.getUserId() == null) {
freePlayers.add(player);
}
}
return freePlayers;
}
public Collection<String> getObserversIds() {
if (observersIds == null) {
observersIds = new ArrayList<>();
}
return observersIds;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Map getMap() {
return map;
}
public void setMap(Map map) {
this.map = map;
}
public int getPlayerNumber() {
return playerNumber;
}
public void setPlayerNumber(int playerNumber) {
this.playerNumber = playerNumber;
}
public boolean isStarted() {
return started;
}
public void setStarted(boolean started) {
this.started = started;
}
}