From 9cbee25346f845a9a0e3aceb86d889804eca64ea Mon Sep 17 00:00:00 2001 From: Adrien W Date: Fri, 15 Sep 2023 12:43:28 +0200 Subject: [PATCH] ajout de l'afficheur du tableau des scores --- Equipe.pde | 4 +-- Plateau.pde | 10 ++++-- Scoreboard.pde | 82 ++++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 89 insertions(+), 7 deletions(-) diff --git a/Equipe.pde b/Equipe.pde index 6902fdf..0d61be8 100644 --- a/Equipe.pde +++ b/Equipe.pde @@ -44,7 +44,7 @@ class Equipe { this.score = score; this.update(); Scoreboard.applyScore(this.id, this.score); - drawPionsAround(oldScore); - drawPionsAround(this.score); + drawAround(oldScore); + drawAround(this.score); } } diff --git a/Plateau.pde b/Plateau.pde index 62daad3..c95dc78 100644 --- a/Plateau.pde +++ b/Plateau.pde @@ -47,8 +47,8 @@ void setup() { Scoreboard.applyScores(); } -void drawPionsAround(int score) { - println("draw around", score); +void drawAround(int score) { + //println("draw around", score); for (int i=0; i0 && score!=i) continue; // récupération des pions par score @@ -127,6 +127,10 @@ void mousePressed() { } } + if (Scoreboard.mouseHover()) { + Scoreboard.toggleDisplay(); + } + if (!EDITING) return; for (int i = 0 ; i < positions.length; i++) { Position p = positions[i]; @@ -252,6 +256,8 @@ void draw() { timer = millis(); } + Scoreboard.draw(); + if (!EDITING) return; for (int i = 0 ; i < positions.length; i++) { positions[i].draw(); diff --git a/Scoreboard.pde b/Scoreboard.pde index 33c78da..21c271f 100644 --- a/Scoreboard.pde +++ b/Scoreboard.pde @@ -1,16 +1,26 @@ class Scoreboard { - String dataSource; + String dataSource; // nom du fichier csv Table table; - boolean autoload = true; + boolean autoload = true; // chargement et rechargement automatique + boolean display = true; + float posX, posY, width, height; // position et dimensions de l'afficheur Scoreboard() { this.dataSource = "scoreboard.csv"; - if (autoload) this.load(); + this.setup(); } Scoreboard(String dataSource) { this.dataSource = dataSource; + this.setup(); + } + + void setup() { if (autoload) this.load(); + this.posX = 348; + this.posY = 59; + this.width = 1239; + this.height = 158; } // charge ou génère le tableau des scores @@ -28,6 +38,9 @@ class Scoreboard { scoreEquipe.setInt("score", 0); } } + + // typage forcé pour que .sort() fonctionne sur la colonne score + this.table.setColumnType("score", "int"); } // écrit le tableau des scores dans un .csv @@ -71,4 +84,67 @@ class Scoreboard { Iterable findRows(String value, String name) { return this.table.findRows(value, name); } + + Iterable findEquipesByScore(int value) { + return this.table.findRows(str(value), "score"); + } + + boolean mouseHover() { + if (mouseX > this.posX && mouseX < this.posX + this.width && mouseY > this.posY && mouseY < this.posY + height) return true; + return false; + } + + void toggleDisplay() { + this.display = !this.display; + } + + void draw() { + if (!this.display) return; + //int count = 1; + int podium = 3; + int margin = 60; + float offsetX = this.posX+this.width; + float offsetY = this.posY; + rectMode(CORNER); + noStroke(); + fill(color(250, 150, 50)); + rect(this.posX, this.posY, this.width, this.height); + + // pour chaque score de 50 à 1 + for (int i=50; i>0; i--) { + // récupération des équipes à ce score + Iterable rowsIterable = this.findEquipesByScore(i); + ArrayList teams = new ArrayList(); + for (TableRow row : rowsIterable) { teams.add(row.getString("equipe")); } + + // arrêter la boucle si on est hors du cadre d'affichage + if (offsetX<=this.posX-margin) break; + // passer cette itération si aucune équipe à afficher + if (teams.size()==0) continue; + + //println(i, teams); + + // affichage du score + fill(color(0, 0, 0)); + stroke(color(0, 0, 0)); + strokeWeight(1); + textFont(quicksandFont, 40); + text(i, offsetX-margin, offsetY+margin); + + + // affichage des équipes + for(int j=0; j