|
|
|
@ -1,10 +1,12 @@
|
|
|
|
PImage backgroundImage;
|
|
|
|
PImage backgroundImage;
|
|
|
|
Equipe[] equipes;
|
|
|
|
Equipe[] equipes;
|
|
|
|
Position[] positions;
|
|
|
|
Position[] positions;
|
|
|
|
|
|
|
|
Scoreboard Scoreboard;
|
|
|
|
int nombreEquipes = 42;
|
|
|
|
int nombreEquipes = 42;
|
|
|
|
|
|
|
|
int timer;
|
|
|
|
PFont quicksandFont;
|
|
|
|
PFont quicksandFont;
|
|
|
|
boolean EDITING=false;
|
|
|
|
boolean EDITING=false;
|
|
|
|
Table positionTable, scoreboard;
|
|
|
|
Table positionTable;
|
|
|
|
|
|
|
|
|
|
|
|
void setup() {
|
|
|
|
void setup() {
|
|
|
|
|
|
|
|
|
|
|
|
@ -15,11 +17,12 @@ void setup() {
|
|
|
|
colorMode(RGB, 255);
|
|
|
|
colorMode(RGB, 255);
|
|
|
|
rectMode(CENTER);
|
|
|
|
rectMode(CENTER);
|
|
|
|
noStroke();
|
|
|
|
noStroke();
|
|
|
|
|
|
|
|
timer = millis();
|
|
|
|
// modifier les positions des cases du plateau
|
|
|
|
// modifier les positions des cases du plateau
|
|
|
|
//EDITING=true;
|
|
|
|
//EDITING=true;
|
|
|
|
|
|
|
|
|
|
|
|
// chargement du scoreboard ou génération du scoreboard vide
|
|
|
|
// chargement du scoreboard ou génération du scoreboard vide
|
|
|
|
loadScoreboard();
|
|
|
|
Scoreboard = new Scoreboard();
|
|
|
|
|
|
|
|
|
|
|
|
positionTable = loadTable("data/positionTable.csv", "header");
|
|
|
|
positionTable = loadTable("data/positionTable.csv", "header");
|
|
|
|
quicksandFont = loadFont("Quicksand-Bold-40.vlw");
|
|
|
|
quicksandFont = loadFont("Quicksand-Bold-40.vlw");
|
|
|
|
@ -29,7 +32,6 @@ void setup() {
|
|
|
|
equipes = new Equipe[nombreEquipes];
|
|
|
|
equipes = new Equipe[nombreEquipes];
|
|
|
|
for (int i=0; i<equipes.length; i++) {
|
|
|
|
for (int i=0; i<equipes.length; i++) {
|
|
|
|
Equipe e = new Equipe(i);
|
|
|
|
Equipe e = new Equipe(i);
|
|
|
|
e.setScore(scoreboard.getInt(i, "score"));
|
|
|
|
|
|
|
|
equipes[i] = e;
|
|
|
|
equipes[i] = e;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -40,25 +42,32 @@ void setup() {
|
|
|
|
positions[i].radius = (i==0 || i==positionTable.getRowCount()-1)? 145: 60;
|
|
|
|
positions[i].radius = (i==0 || i==positionTable.getRowCount()-1)? 145: 60;
|
|
|
|
positions[i].posX = positionTable.getFloat(i, "posx");
|
|
|
|
positions[i].posX = positionTable.getFloat(i, "posx");
|
|
|
|
positions[i].posY = positionTable.getFloat(i, "posy");
|
|
|
|
positions[i].posY = positionTable.getFloat(i, "posy");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Scoreboard.applyScores();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void drawPionsAround(int score) {
|
|
|
|
|
|
|
|
println("draw around", score);
|
|
|
|
|
|
|
|
for (int i=0; i<positionTable.getRowCount(); i++) {
|
|
|
|
|
|
|
|
if (score>0 && score!=i) continue;
|
|
|
|
// récupération des pions par score
|
|
|
|
// récupération des pions par score
|
|
|
|
IntList pionsInPosition = new IntList();
|
|
|
|
IntList pions = new IntList();
|
|
|
|
for (TableRow row : scoreboard.findRows(str(i+1), "score")) {
|
|
|
|
for (TableRow row : Scoreboard.findRows(str(i+1), "score")) {
|
|
|
|
pionsInPosition.append(int(row.getString("equipe"))-1);
|
|
|
|
pions.append(row.getInt("equipe")-1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// positionnement des pions dont le score n'est pas nul
|
|
|
|
// positionnement des pions dont le score n'est pas nul
|
|
|
|
if (pionsInPosition.size()>0) {
|
|
|
|
if (pions.size()>0) {
|
|
|
|
float angle = PI;
|
|
|
|
float angle = PI;
|
|
|
|
// ce bloc est incompréhensible... mais il fait son taf
|
|
|
|
// ce bloc est incompréhensible... mais il fait son taf
|
|
|
|
for(int j=0; j<pionsInPosition.size(); j++) {
|
|
|
|
for(int j=0; j<pions.size(); j++) {
|
|
|
|
angle += TWO_PI / pionsInPosition.size();
|
|
|
|
angle += TWO_PI / pions.size();
|
|
|
|
equipes[pionsInPosition.get(j)].pion.posX = pionsInPosition.size() * 5.5 * cos(angle) + positions[i].posX;
|
|
|
|
equipes[pions.get(j)].pion.posX = pions.size() * 5.5 * cos(angle) + positions[i].posX;
|
|
|
|
equipes[pionsInPosition.get(j)].pion.posY = pionsInPosition.size() * 5.5 * sin(angle) + positions[i].posY;
|
|
|
|
equipes[pions.get(j)].pion.posY = pions.size() * 5.5 * sin(angle) + positions[i].posY;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void mouseMoved() {
|
|
|
|
void mouseMoved() {
|
|
|
|
@ -69,7 +78,7 @@ void mouseMoved() {
|
|
|
|
// calcul de distance entre la souris et le pion
|
|
|
|
// calcul de distance entre la souris et le pion
|
|
|
|
float distPion = dist(p.posX, p.posY, mouseX, mouseY);
|
|
|
|
float distPion = dist(p.posX, p.posY, mouseX, mouseY);
|
|
|
|
// calcul de distance entre la souris et l'emplacement d'équipe
|
|
|
|
// calcul de distance entre la souris et l'emplacement d'équipe
|
|
|
|
float distEquipe = dist(e.pos_x, e.pos_y, mouseX, mouseY);
|
|
|
|
float distEquipe = dist(e.posX, e.posY, mouseX, mouseY);
|
|
|
|
// seuil de collision
|
|
|
|
// seuil de collision
|
|
|
|
float threshold = p.radius/2;
|
|
|
|
float threshold = p.radius/2;
|
|
|
|
|
|
|
|
|
|
|
|
@ -84,7 +93,7 @@ void mouseMoved() {
|
|
|
|
} else if ((distPion<=threshold || distEquipe<=threshold) && !p.hovered) {
|
|
|
|
} else if ((distPion<=threshold || distEquipe<=threshold) && !p.hovered) {
|
|
|
|
// activation de l'état survolé
|
|
|
|
// activation de l'état survolé
|
|
|
|
p.hoverStart();
|
|
|
|
p.hoverStart();
|
|
|
|
if (distEquipe<=threshold) {
|
|
|
|
if (distEquipe<=threshold && distPion>threshold) {
|
|
|
|
p.lazored = true;
|
|
|
|
p.lazored = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
break;
|
|
|
|
@ -152,14 +161,13 @@ void mouseDragged() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void mouseReleased() {
|
|
|
|
void mouseReleased() {
|
|
|
|
for (int i = 0 ; i < equipes.length; i++) {
|
|
|
|
for (int i = 0 ; i < equipes.length; i++) {
|
|
|
|
Pion p = equipes[i].pion;
|
|
|
|
Pion p = equipes[i].pion;
|
|
|
|
if (p.dragged) {
|
|
|
|
if (p.dragged) {
|
|
|
|
p.dragStop();
|
|
|
|
p.dragStop();
|
|
|
|
equipes[i].setScore(findClosestPositionFrom(p).getScore());
|
|
|
|
equipes[i].setScore(findClosestPositionFrom(p).getScore());
|
|
|
|
saveScoreboard();
|
|
|
|
Scoreboard.save();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -173,13 +181,13 @@ void mouseReleased() {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void mouseWheel(MouseEvent event) {
|
|
|
|
void mouseWheel(MouseEvent event) {
|
|
|
|
for (int i = 0 ; i < equipes.length; i++) {
|
|
|
|
for (int i = 0 ; i < equipes.length; i++) {
|
|
|
|
Equipe e = equipes[i];
|
|
|
|
Equipe e = equipes[i];
|
|
|
|
Pion p = e.pion;
|
|
|
|
Pion p = e.pion;
|
|
|
|
|
|
|
|
|
|
|
|
// calcul de distance entre la souris et l'emplacement d'équipe
|
|
|
|
// calcul de distance entre la souris et l'emplacement d'équipe
|
|
|
|
float distEquipe = dist(e.pos_x, e.pos_y, mouseX, mouseY);
|
|
|
|
float distEquipe = dist(e.posX, e.posY, mouseX, mouseY);
|
|
|
|
// seuil de collision
|
|
|
|
// seuil de collision
|
|
|
|
float threshold = p.radius/2;
|
|
|
|
float threshold = p.radius/2;
|
|
|
|
// nouveau rayon
|
|
|
|
// nouveau rayon
|
|
|
|
@ -212,40 +220,6 @@ void savePositionTable() {
|
|
|
|
saveTable(positionTable, "data/positionTable.csv", "csv");
|
|
|
|
saveTable(positionTable, "data/positionTable.csv", "csv");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// écrit le tableau des score dans un .csv
|
|
|
|
|
|
|
|
void saveScoreboard() {
|
|
|
|
|
|
|
|
scoreboard = new Table();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
scoreboard.addColumn("equipe");
|
|
|
|
|
|
|
|
scoreboard.addColumn("score");
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (int i = 0 ; i < equipes.length; i++) {
|
|
|
|
|
|
|
|
Equipe e = equipes[i];
|
|
|
|
|
|
|
|
TableRow scoreEquipe = scoreboard.addRow();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
scoreEquipe.setInt("equipe", e.id+1);
|
|
|
|
|
|
|
|
scoreEquipe.setInt("score", e.score);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
saveTable(scoreboard, "data/scoreboard.csv", "csv");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void loadScoreboard() {
|
|
|
|
|
|
|
|
if (fileExists("scoreboard.csv")) {
|
|
|
|
|
|
|
|
scoreboard = loadTable("data/scoreboard.csv", "header");
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
scoreboard = new Table();
|
|
|
|
|
|
|
|
scoreboard.addColumn("equipe");
|
|
|
|
|
|
|
|
scoreboard.addColumn("score");
|
|
|
|
|
|
|
|
for (int i = 0 ; i < nombreEquipes; i++) {
|
|
|
|
|
|
|
|
TableRow scoreEquipe = scoreboard.addRow();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
scoreEquipe.setInt("equipe", i+1);
|
|
|
|
|
|
|
|
scoreEquipe.setInt("score", 0);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// renvoie la Position la plus proche du Pion fourni en paramètre
|
|
|
|
// renvoie la Position la plus proche du Pion fourni en paramètre
|
|
|
|
Position findClosestPositionFrom(Pion pion) {
|
|
|
|
Position findClosestPositionFrom(Pion pion) {
|
|
|
|
Position closest = positions[0];
|
|
|
|
Position closest = positions[0];
|
|
|
|
@ -273,6 +247,11 @@ void draw() {
|
|
|
|
equipes[i].update();
|
|
|
|
equipes[i].update();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (millis() > timer + 2000) {
|
|
|
|
|
|
|
|
Scoreboard.reloadFromDisk();
|
|
|
|
|
|
|
|
timer = millis();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (!EDITING) return;
|
|
|
|
if (!EDITING) return;
|
|
|
|
for (int i = 0 ; i < positions.length; i++) {
|
|
|
|
for (int i = 0 ; i < positions.length; i++) {
|
|
|
|
positions[i].draw();
|
|
|
|
positions[i].draw();
|
|
|
|
|