added ability to parse different competitor types

This commit is contained in:
Joshua Perry 2023-01-31 15:52:29 +00:00
parent fd11f5f5fd
commit a4c55c7cf1
1 changed files with 39 additions and 10 deletions

View File

@ -9,18 +9,20 @@ import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Scanner;
import org.r0r5chach.r6.R6Attacker;
import org.r0r5chach.r6.R6Defender;
import org.r0r5chach.r6.R6Player;
import org.r0r5chach.valorant.ValorantAgent;
import org.r0r5chach.valorant.ValorantPlayer;
public class CompetitorList {
private final ArrayList<Competitor> competitors;
private String reportContents;
public CompetitorList(File list) throws IOException {
public CompetitorList() throws IOException {
competitors = new ArrayList<>();
readCompetitors(list);
reportContents = reportTemplate();
}
@ -32,23 +34,47 @@ public class CompetitorList {
return competitors;
}
private void readCompetitors(File list) throws FileNotFoundException {
public void readCompetitors(File list) throws FileNotFoundException {
Scanner reader = new Scanner(list);
while (reader.hasNextLine()) {
String[] row = reader.nextLine().split("%");
competitors.add(parseRow(row));
switch (list.getName()) {
case "valorantPlayers.txt" -> competitors.add(parseValorantPlayer(row));
case "r6Players.txt" -> competitors.add(parseR6Player(row));
default -> competitors.add(parseRow(row));
}
}
reader.close();
}
private Competitor parseRow(String[] row) { //FIXME: parse row for different amount of stuffs
private Competitor parseRow(String[] row) {
int playerNumber = Integer.parseInt(row[0]);
Name playerName = new Name(row[1]);
Rank playerLevel = Rank.valueOf(row[2]);
int[] scores = parseScores(row[4]);
int[] scores = parseScores(row[3]);
return new Competitor(playerNumber, playerName, playerLevel, scores);
}
private ValorantPlayer parseValorantPlayer(String[] row) {
int playerNumber = Integer.parseInt(row[0]);
Name playerName = new Name(row[1]);
Rank playerLevel = Rank.valueOf(row[2]);
ValorantAgent favoriteAgent = ValorantAgent.valueOf(row[3]);
int[] scores = parseScores(row[4]);
return new ValorantPlayer(playerNumber, playerName, playerLevel, favoriteAgent, scores);
}
private R6Player parseR6Player(String[] row) {
int playerNumber = Integer.parseInt(row[0]);
Name playerName = new Name(row[1]);
Rank playerLevel = Rank.valueOf(row[2]);
R6Attacker favoriteAttacker = R6Attacker.valueOf(row[3]);
R6Defender favoriteDefender = R6Defender.valueOf(row[4]);
int[] scores = parseScores(row[5]);
return new R6Player(playerNumber, playerName, playerLevel, favoriteAttacker, favoriteDefender, scores);
}
private int[] parseScores(String row) {
String[] scores = row.split(",");
int[] parsedScores = new int[scores.length];
@ -59,7 +85,7 @@ public class CompetitorList {
}
private String generateTable() {
StringBuilder table = new StringBuilder("Competitor Level Agent Scores Overall");
StringBuilder table = new StringBuilder("Competitor Level Scores Overall Favorite Character(s)");
for (Competitor player: getCompetitors()) {
table.append("\n");
for (String detail: player.getFullDetails().split("\n")) {
@ -67,6 +93,9 @@ public class CompetitorList {
if (detailParts[0].equals("Player Number")) {
table.append(detailParts[1]).append(" ");
}
else if (detailParts[0].equals("Favorite Agent") || detailParts[0].equals("Favorite Attacker") || detailParts[0].equals("Favorite Defender")) {
table.append(detailParts[0] + ": " + detailParts[1]).append(" ");
}
else {
table.append(detailParts[1]).append(" ");
}