2023-01-31 17:19:32 +00:00
|
|
|
package com.r0r5chach;
|
|
|
|
|
|
2023-01-31 18:14:21 +00:00
|
|
|
import java.net.URL;
|
|
|
|
|
import java.util.ArrayList;
|
2023-02-01 14:28:41 +00:00
|
|
|
import java.util.Arrays;
|
2023-01-31 18:14:21 +00:00
|
|
|
import java.util.ResourceBundle;
|
|
|
|
|
|
2023-02-01 14:28:41 +00:00
|
|
|
import com.r0r5chach.r6.R6Attacker;
|
|
|
|
|
import com.r0r5chach.r6.R6Defender;
|
2023-01-31 18:14:21 +00:00
|
|
|
import com.r0r5chach.r6.R6Player;
|
2023-02-01 14:28:41 +00:00
|
|
|
import com.r0r5chach.valorant.ValorantAgent;
|
2023-01-31 18:14:21 +00:00
|
|
|
import com.r0r5chach.valorant.ValorantPlayer;
|
|
|
|
|
|
2023-02-01 15:33:30 +00:00
|
|
|
import javafx.application.Platform;
|
2023-01-31 17:19:32 +00:00
|
|
|
import javafx.collections.FXCollections;
|
2023-02-01 19:26:01 +00:00
|
|
|
import javafx.collections.ObservableList;
|
2023-01-31 17:19:32 +00:00
|
|
|
import javafx.fxml.FXML;
|
2023-01-31 18:14:21 +00:00
|
|
|
import javafx.fxml.Initializable;
|
2023-02-01 14:28:41 +00:00
|
|
|
import javafx.scene.control.Button;
|
|
|
|
|
import javafx.scene.control.ChoiceBox;
|
2023-01-31 17:19:32 +00:00
|
|
|
import javafx.scene.control.ListView;
|
2023-02-01 19:26:01 +00:00
|
|
|
import javafx.scene.control.TableColumn;
|
|
|
|
|
import javafx.scene.control.TableView;
|
2023-01-31 18:14:21 +00:00
|
|
|
import javafx.scene.control.TextField;
|
2023-02-01 19:26:01 +00:00
|
|
|
import javafx.scene.control.cell.PropertyValueFactory;
|
2023-01-31 18:14:21 +00:00
|
|
|
import javafx.scene.text.Text;
|
2023-01-31 17:19:32 +00:00
|
|
|
|
2023-01-31 18:14:21 +00:00
|
|
|
public class MainController implements Initializable {
|
2023-01-31 17:19:32 +00:00
|
|
|
private CompetitorList competitors;
|
2023-01-31 18:14:21 +00:00
|
|
|
private ArrayList<Integer> competitorIds;
|
|
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
|
ListView<Integer> competitorsList;
|
|
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
|
TextField playerNumber;
|
|
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
|
TextField playerName;
|
|
|
|
|
|
|
|
|
|
@FXML
|
2023-02-01 14:28:41 +00:00
|
|
|
ChoiceBox<Rank> playerLevel;
|
2023-01-31 18:14:21 +00:00
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
|
Text favoriteCharacters;
|
|
|
|
|
|
|
|
|
|
@FXML
|
2023-02-01 14:28:41 +00:00
|
|
|
ChoiceBox<R6Attacker> favoriteAttacker;
|
2023-01-31 17:19:32 +00:00
|
|
|
|
|
|
|
|
@FXML
|
2023-02-01 14:28:41 +00:00
|
|
|
ChoiceBox<ValorantAgent> favoriteAgent;
|
|
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
|
ChoiceBox<R6Defender> favoriteDefender;
|
2023-01-31 18:14:21 +00:00
|
|
|
|
2023-02-01 13:51:13 +00:00
|
|
|
@FXML
|
|
|
|
|
TextField scores0;
|
|
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
|
TextField scores1;
|
|
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
|
TextField scores2;
|
|
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
|
TextField scores3;
|
|
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
|
TextField scores4;
|
|
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
|
TextField scores5;
|
|
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
|
TextField overallScore;
|
|
|
|
|
|
|
|
|
|
TextField[] scores;
|
|
|
|
|
|
2023-02-01 14:28:41 +00:00
|
|
|
@FXML
|
|
|
|
|
Button updateButton;
|
|
|
|
|
|
2023-02-01 19:26:01 +00:00
|
|
|
@FXML
|
|
|
|
|
TableView<CompetitorRow> competitorTable;
|
2023-02-01 15:33:30 +00:00
|
|
|
|
2023-01-31 18:14:21 +00:00
|
|
|
@Override
|
|
|
|
|
public void initialize(URL url, ResourceBundle rb) {
|
2023-02-01 15:33:30 +00:00
|
|
|
Platform.runLater(() -> {
|
|
|
|
|
this.scores = new TextField[]{scores0, scores1, scores2, scores3, scores4, scores5};
|
|
|
|
|
loadCompetitors();
|
2023-02-01 19:27:50 +00:00
|
|
|
loadTable();
|
2023-02-01 15:33:30 +00:00
|
|
|
loadEdit();
|
|
|
|
|
});
|
|
|
|
|
|
2023-02-01 14:28:41 +00:00
|
|
|
}
|
2023-02-01 14:45:52 +00:00
|
|
|
|
|
|
|
|
public void setCompetitors(CompetitorList list) {
|
|
|
|
|
this.competitors = list;
|
|
|
|
|
}
|
2023-02-01 14:28:41 +00:00
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
|
private void getCompetitor() {
|
|
|
|
|
Competitor player = this.competitors.getCompetitors().get(this.competitorIds.indexOf(this.competitorsList.getSelectionModel().getSelectedItem()));
|
|
|
|
|
loadPlayer(player);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
|
private void updateCompetitor() {
|
|
|
|
|
int playerIndex = this.competitorIds.indexOf(this.competitorsList.getSelectionModel().getSelectedItem());
|
|
|
|
|
Competitor player = this.competitors.getCompetitors().get(playerIndex);
|
|
|
|
|
updatePlayer(player);
|
|
|
|
|
competitorIds.set(playerIndex, player.getPlayerNumber());
|
2023-02-01 15:33:30 +00:00
|
|
|
loadEdit();
|
2023-02-01 14:28:41 +00:00
|
|
|
loadPlayer(player);
|
|
|
|
|
}
|
2023-01-31 17:19:32 +00:00
|
|
|
|
|
|
|
|
private void loadCompetitors(){
|
2023-01-31 18:14:21 +00:00
|
|
|
this.competitorIds = new ArrayList<Integer>();
|
|
|
|
|
for (Competitor player : this.competitors.getCompetitors()) {
|
|
|
|
|
this.competitorIds.add(player.getPlayerNumber());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-02-01 15:33:30 +00:00
|
|
|
@FXML
|
|
|
|
|
private void loadEdit() {
|
|
|
|
|
competitorsList.setItems(FXCollections.observableList(this.competitorIds));
|
2023-02-01 14:28:41 +00:00
|
|
|
playerLevel.setItems(FXCollections.observableList(Arrays.asList(Rank.values())));
|
|
|
|
|
favoriteAttacker.setItems(FXCollections.observableList(Arrays.asList(R6Attacker.values())));
|
|
|
|
|
favoriteDefender.setItems(FXCollections.observableList(Arrays.asList(R6Defender.values())));
|
|
|
|
|
favoriteAgent.setItems(FXCollections.observableList(Arrays.asList(ValorantAgent.values())));
|
2023-01-31 18:14:21 +00:00
|
|
|
}
|
|
|
|
|
|
2023-02-01 19:27:50 +00:00
|
|
|
private void loadTable() {
|
2023-02-01 19:26:01 +00:00
|
|
|
TableColumn<CompetitorRow,Integer> playerNumCol = new TableColumn<CompetitorRow,Integer>("Player Number");
|
|
|
|
|
TableColumn<CompetitorRow,String> playerNameCol = new TableColumn<CompetitorRow,String>("Player Name");
|
|
|
|
|
TableColumn<CompetitorRow,Rank> playerLevelCol = new TableColumn<CompetitorRow,Rank>("Player Level");
|
|
|
|
|
TableColumn<CompetitorRow,int[]> scoresCol = new TableColumn<CompetitorRow,int[]>("Player Scores");
|
|
|
|
|
playerNumCol.setCellValueFactory(new PropertyValueFactory<CompetitorRow,Integer>("playerNumber"));
|
|
|
|
|
playerNameCol.setCellValueFactory(new PropertyValueFactory<CompetitorRow,String>("playerName"));
|
|
|
|
|
playerLevelCol.setCellValueFactory(new PropertyValueFactory<CompetitorRow,Rank>("playerLevel"));
|
|
|
|
|
scoresCol.setCellValueFactory(new PropertyValueFactory<CompetitorRow,int[]>("scores"));
|
|
|
|
|
competitorTable.getColumns().add(playerNumCol);
|
|
|
|
|
competitorTable.getColumns().add(playerNameCol);
|
|
|
|
|
competitorTable.getColumns().add(playerLevelCol);
|
|
|
|
|
competitorTable.getColumns().add(scoresCol);
|
2023-02-01 19:27:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
|
private void loadView() {
|
2023-02-01 19:26:01 +00:00
|
|
|
competitorTable.setItems(generateTable());
|
|
|
|
|
//TODO: Add favorite characters
|
2023-02-01 15:33:30 +00:00
|
|
|
}
|
|
|
|
|
|
2023-01-31 18:14:21 +00:00
|
|
|
private void loadPlayer(Competitor player) {
|
|
|
|
|
this.playerNumber.setText(String.valueOf(player.getPlayerNumber()));
|
|
|
|
|
this.playerName.setText(player.getPlayerName().getFullName());
|
2023-02-01 14:28:41 +00:00
|
|
|
this.playerLevel.getSelectionModel().select(player.getPlayerLevel());;
|
2023-02-01 13:51:13 +00:00
|
|
|
loadFavoriteCharacters(player);
|
|
|
|
|
loadScores(player);
|
|
|
|
|
this.overallScore.setText(String.valueOf(player.getOverallScore()));
|
|
|
|
|
}
|
2023-01-31 18:14:21 +00:00
|
|
|
|
2023-02-01 13:51:13 +00:00
|
|
|
private void loadFavoriteCharacters(Competitor player) {
|
2023-01-31 18:14:21 +00:00
|
|
|
if (player instanceof R6Player) {
|
2023-02-01 14:28:41 +00:00
|
|
|
this.favoriteAttacker.getSelectionModel().select(((R6Player) player).getFavoriteAttacker());
|
|
|
|
|
this.favoriteDefender.getSelectionModel().select((((R6Player) player).getFavoriteDefender()));
|
|
|
|
|
this.favoriteAgent.visibleProperty().set(false);
|
|
|
|
|
this.favoriteAttacker.visibleProperty().set(true);
|
2023-01-31 18:14:21 +00:00
|
|
|
this.favoriteDefender.visibleProperty().set(true);
|
|
|
|
|
this.favoriteCharacters.setText("Favorite Operators");
|
|
|
|
|
}
|
|
|
|
|
else if (player instanceof ValorantPlayer) {
|
2023-02-01 14:28:41 +00:00
|
|
|
this.favoriteAgent.getSelectionModel().select(((ValorantPlayer) player).getFavoriteAgent());
|
|
|
|
|
this.favoriteAgent.visibleProperty().set(true);
|
|
|
|
|
this.favoriteAttacker.visibleProperty().set(false);
|
2023-01-31 18:14:21 +00:00
|
|
|
this.favoriteDefender.visibleProperty().set(false);
|
|
|
|
|
this.favoriteCharacters.setText("Favorite Agent");
|
|
|
|
|
}
|
2023-02-01 13:51:13 +00:00
|
|
|
}
|
2023-01-31 18:14:21 +00:00
|
|
|
|
2023-02-01 13:51:13 +00:00
|
|
|
private void loadScores(Competitor player) {
|
|
|
|
|
int[] playerScores = player.getScores();
|
|
|
|
|
for (int i = 0; i < playerScores.length; i++) {
|
|
|
|
|
this.scores[i].setText(String.valueOf(playerScores[i]));
|
|
|
|
|
}
|
2023-01-31 17:19:32 +00:00
|
|
|
}
|
2023-02-01 14:28:41 +00:00
|
|
|
|
|
|
|
|
private void updatePlayer(Competitor player) {
|
|
|
|
|
player.setPlayerNumber(Integer.parseInt(this.playerNumber.getText()));
|
|
|
|
|
player.setPlayerName(new Name(this.playerName.getText()));
|
|
|
|
|
player.setPlayerLevel(this.playerLevel.getValue());
|
|
|
|
|
updateFavoriteCharacters(player);
|
|
|
|
|
updateScores(player);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void updateFavoriteCharacters(Competitor player) {
|
|
|
|
|
if (player instanceof R6Player) {
|
|
|
|
|
((R6Player) player).setFavoriteAttacker(this.favoriteAttacker.getValue());
|
|
|
|
|
((R6Player) player).setFavoriteDefender(this.favoriteDefender.getValue());
|
|
|
|
|
}
|
|
|
|
|
else if (player instanceof ValorantPlayer) {
|
|
|
|
|
((ValorantPlayer) player).setFavoriteAgent(this.favoriteAgent.getValue());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void updateScores(Competitor player) {
|
|
|
|
|
int[] newScores = new int[6];
|
|
|
|
|
for (int i = 0; i < newScores.length; i++) {
|
|
|
|
|
newScores[i] = Integer.parseInt(this.scores[i].getText());
|
|
|
|
|
}
|
|
|
|
|
player.setScores(newScores);
|
|
|
|
|
}
|
2023-02-01 19:26:01 +00:00
|
|
|
|
|
|
|
|
private ObservableList<CompetitorRow> generateTable() {
|
|
|
|
|
ArrayList<CompetitorRow> list = new ArrayList<>();
|
|
|
|
|
for(Competitor player: this.competitors.getCompetitors()) {
|
|
|
|
|
if (player instanceof ValorantPlayer) {
|
|
|
|
|
list.add(new CompetitorRow(player.getPlayerNumber(), player.getPlayerName(), player.getPlayerLevel(), player.getScores(), ((ValorantPlayer) player).getFavoriteAgent()));
|
|
|
|
|
}
|
|
|
|
|
else if (player instanceof R6Player) {
|
|
|
|
|
list.add(new CompetitorRow(player.getPlayerNumber(), player.getPlayerName(), player.getPlayerLevel(), player.getScores(), ((R6Player) player).getFavoriteAttacker(), ((R6Player) player).getFavoriteDefender()));
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
list.add(new CompetitorRow(player.getPlayerNumber(), player.getPlayerName(), player.getPlayerLevel(), player.getScores()));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return FXCollections.observableArrayList(list);
|
|
|
|
|
}
|
2023-01-31 18:25:23 +00:00
|
|
|
}
|