package nl.joshuaslik.tudelft.UFMGame.gui.game;
import java.io.IOException;
import java.util.ArrayList;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.util.Callback;
import javafx.util.StringConverter;
import nl.joshuaslik.tudelft.UFMGame.backend.Player;
import nl.joshuaslik.tudelft.UFMGame.backend.Team;
import nl.joshuaslik.tudelft.UFMGame.gui.Main;
/**
* @author Bryan van Wijk
* @author Sander Benoist
*/
public class OtherTeams {
private Team otherteam;
private Player selectedplayer;
private ObservableList<Player> observablelistplayers;
@FXML
private ComboBox<Team> teams;
@FXML
private TableView<Player> playertable;
@FXML
private TableColumn<Player, String> active, name, country, position;
@FXML
private Label showTotalWins, showTotalLosses, showTotalDraws, showTotalGoals, showTotalGamesPlayed, coach, formationlabel, attack, defence, stamina;
@FXML
private ImageView otherteamlogo, staminaImg, defPwrImg, atkPwrImg;
/**
* Initializes the controller class. This method is automatically called
* after the fxml file has been loaded.
*/
@FXML
private void initialize() {
ObservableList<Team> teamslist = FXCollections.observableArrayList(getteamList());
teams.setItems(teamslist);
teams.setConverter(new StringConverter<Team>() {
@Override
public String toString(Team team) {
return team.getTeamName();
}
@Override
public Team fromString(String nr) {
return null;
}
});
teams.valueProperty().addListener(new ChangeListener<Team>() {
@Override
public void changed(ObservableValue<? extends Team> observable, Team oldValue, Team newValue) {
otherteam = newValue;
ArrayList<Player> playerslist = otherteam.getAllPlayers();
observablelistplayers = FXCollections.observableArrayList(playerslist);
playertable.setItems(observablelistplayers);
Image image = new Image("/data/base/teams/pictures/" + otherteam.getid() + ".png");
otherteamlogo.setImage(image);
int totalGamesPlayed = otherteam.getTotalWins() + otherteam.getTotalLosses() + otherteam.getTotalDraws();
showTotalGamesPlayed.setText("Total Games Played: " + totalGamesPlayed);
showTotalWins.setText("Total Wins: " + otherteam.getTotalWins());
showTotalLosses.setText("Total Losses: " + otherteam.getTotalLosses());
showTotalDraws.setText("Total Draws: " + otherteam.getTotalDraws());
showTotalGoals.setText("Total goals: " + otherteam.getTotalGoals());
// AttackPower bar inladen
atkPwrImg.setFitWidth(otherteam.getAttackPower() / 3);
attack.setText(((int) (otherteam.getAttackPower() * 0.1)) + "");
// Defence bar inladen
defPwrImg.setFitWidth(otherteam.getDefencePower() / 3);
defence.setText(((int) (otherteam.getDefencePower() * 0.1)) + "");
// Stamina bar inladen
staminaImg.setFitWidth(otherteam.getStamina() / 3);
stamina.setText(((int) (otherteam.getStamina() * 0.1)) + "");
coach.setText("Coach: " + otherteam.getCoachName());
formationlabel.setText("Formation: " + otherteam.getFormation().getName());
}
});
ArrayList<Team> teamarraylist = MainGame.game.getTeams();
teamarraylist.remove(MainGame.game.getUser().getTeam());
teams.setValue(teamarraylist.get(0));
ArrayList<Player> playerslist = otherteam.getAllPlayers();
observablelistplayers = FXCollections.observableArrayList(playerslist);
playertable.setItems(observablelistplayers);
active.setCellValueFactory(new PropertyValueFactory<Player, String>("ID"));
active.setCellFactory(new Callback<TableColumn<Player, String>, TableCell<Player, String>>() {
@Override
public TableCell<Player, String> call(TableColumn<Player, String> param) {
TableCell<Player, String> cell = new TableCell<Player, String>() {
@Override
public void updateItem(String item, boolean empty) {
if (item != null) {
boolean active = false;
for (int i = 0; i < otherteam.getActivePlayers().size(); i++) {
if (otherteam.getActivePlayers().get(i).getID().equals(item)) {
setText("✓");
active = true;
}
}
if (!active) {
setText("✗");
}
}
}
};
return cell;
}
});
name.setCellValueFactory(new PropertyValueFactory<Player, String>("fullName"));
country.setCellValueFactory(new PropertyValueFactory<Player, String>("country"));
position.setCellValueFactory(new PropertyValueFactory<Player, String>("position"));
playertable.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> selectedPlayer(newValue));
Image image = new Image("/data/base/teams/pictures/" + otherteam.getid() + ".png");
otherteamlogo.setImage(image);
int totalGamesPlayed = otherteam.getTotalWins() + otherteam.getTotalLosses() + otherteam.getTotalDraws();
showTotalGamesPlayed.setText("Total Games Played: " + totalGamesPlayed);
showTotalWins.setText("Total Wins: " + otherteam.getTotalWins());
showTotalLosses.setText("Total Losses: " + otherteam.getTotalLosses());
showTotalDraws.setText("Total Draws: " + otherteam.getTotalDraws());
showTotalGoals.setText("Total goals: " + otherteam.getTotalGoals());
// AttackPower bar inladen
atkPwrImg.setFitWidth(otherteam.getAttackPower() / 3);
// Defence bar inladen
defPwrImg.setFitWidth(otherteam.getDefencePower() / 3);
// Stamina bar inladen
staminaImg.setFitWidth(otherteam.getStamina() / 3);
coach.setText("Coach: " + otherteam.getCoachName());
formationlabel.setText("Formation: " + otherteam.getFormation().getName());
}
/**
* Method to get a observable list of all the teams except the users his
* team
*
* @return observable list of teams
*/
private ObservableList<Team> getteamList() {
ArrayList<Team> teamarraylist = MainGame.game.getTeams();
teamarraylist.remove(MainGame.game.getUser().getTeam());
ObservableList<Team> res = FXCollections.observableArrayList(teamarraylist);
return res;
}
/**
* Selects a player from a team
*
* @param player
* is the Player to select
*/
public void selectedPlayer(Player player) {
selectedplayer = player;
}
/**
* Handles when the key to view the selected player is pressed
*
* @throws IOException
* is thrown if the FXML file cannot be parsed.
*/
@FXML
protected void handleViewPlayer() throws IOException {
ViewPlayer.start(selectedplayer);
}
/**
* Creates the page that shows the other teams
*
* @throws IOException
* is thrown when the fxml cannot be read.
*/
public static void start() throws IOException {
AnchorPane scene = (AnchorPane) FXMLLoader.load(Class.class.getResource("/data/gui/pages-game/OtherTeams.fxml"));
Main.setCenter(scene);
AnchorPane bottom = (AnchorPane) FXMLLoader.load(Class.class.getResource("/data/gui/pages-game/GameBottomMenuBar.fxml"));
Main.setBottom(bottom);
}
}