PImage backgroundImage, titleImage; Equipe[] equipes; Position[] positions; Scoreboard Scoreboard; int nombreEquipes = 42; int timer; PFont quicksandFont; boolean EDITING=false; Table positionTable; void setup() { size(displayWidth, displayHeight); fullScreen(1); //randomSeed(3); //frameRate(60); colorMode(RGB, 255); rectMode(CENTER); noStroke(); timer = millis(); // modifier les positions des cases du plateau EDITING=false; // initialisation du scoreboard Scoreboard = new Scoreboard(); positionTable = loadTable("data/positionTable.csv", "header"); quicksandFont = loadFont("Quicksand-Bold-40.vlw"); backgroundImage = loadImage("backgroundImage.jpg"); titleImage = loadImage("title.png"); // génération des équipes equipes = new Equipe[nombreEquipes]; for (int i=0; i0 && score!=i) continue; // récupération des pions par score IntList pions = new IntList(); for (TableRow row : Scoreboard.findRows(str(i+1), "score")) { pions.append(row.getInt("equipe")-1); } // positionnement des pions dont le score n'est pas nul if (pions.size()>0) { float angle = PI; // ce bloc est incompréhensible... mais il fait son taf de répartition des pions selon leur nombre for(int j=0; jthreshold && distEquipe>threshold && (p.hovered || p.dragged)) { // cloture des deux états p.dragStop(); p.hoverStop(); break; // si la souris est sous le seuil de collision du pion et qu'il n'est pas déjà dans l'état survolé } else if ((distPion<=threshold || distEquipe<=threshold) && !p.hovered) { if (distEquipe<=threshold && distPion>threshold) p.lazored = true; // activation de l'état survolé p.hoverStart(); break; } } if (!EDITING) return; for (int i = 0 ; i < positions.length; i++) { Position p = positions[i]; float distPosition = dist(p.posX, p.posY, mouseX, mouseY); float threshold = p.radius/2; if (distPosition>threshold && (p.hovered || p.dragged)) { p.dragStop(); p.hoverStop(); break; } else if (distPosition<=threshold && !p.hovered) { p.hoverStart(); break; } } } void mousePressed() { for (int i = 0 ; i < equipes.length; i++) { Pion p = equipes[i].pion; float d = dist(p.posX, p.posY, mouseX, mouseY); if (d20 && radius<120 && !p.animated) p.radius = radius; } } // écrit la position des cases dans un .csv void savePositionTable() { positionTable = new Table(); positionTable.addColumn("id"); positionTable.addColumn("posx"); positionTable.addColumn("posy"); for (int i = 0 ; i < positions.length; i++) { Position p = positions[i]; TableRow position = positionTable.addRow(); position.setInt("id", p.id); position.setFloat("posx", p.posX); position.setFloat("posy", p.posY); } saveTable(positionTable, "data/positionTable.csv", "csv"); } // renvoie la Position la plus proche du Pion fourni en paramètre Position findClosestPositionFrom(Pion pion) { Position closest = positions[0]; for (int i = 0 ; i < positions.length; i++) { Position position = positions[i]; float distPion = dist(pion.posX, pion.posY, position.posX, position.posY); float distClosest = dist(pion.posX, pion.posY, closest.posX, closest.posY); if (distPion<=distClosest) closest = positions[i]; } return closest; } boolean fileExists(String filename) { File f = dataFile(filename); return f.isFile(); } void LAZOR(PVector source, PVector target, int noiseLevel) { stroke(random(0, 255), random(0, 100), random(0, 100)); strokeWeight(random(0,3)); line(source.x, source.y, target.x, target.y); } void LAZOR(PVector source, PVector target) { LAZOR(source, target, 0); } void LAZORECT(float posX, float posY, float width, float height) { stroke(random(0, 255), random(0, 100), random(0, 100)); strokeWeight(random(0,3)); rect(posX, posY, width, height); //LAZOR(new PVector(posX, posY), new PVector(posX+width, posY)); //LAZOR(new PVector(posX+width, posY), new PVector(posX+width, posY+height)); //LAZOR(new PVector(posX+width, posY+height), new PVector(posX, posY+height)); //LAZOR(new PVector(posX, posY+height), new PVector(posX, posY)); } void draw() { image(backgroundImage, 0, 0, displayWidth, displayHeight); if (!Scoreboard.display) image(titleImage, 0, 0, displayWidth, displayHeight); Scoreboard.draw(); for (int i = 0 ; i < equipes.length; i++) { equipes[i].update(); } if (millis() > timer + 2000) { Scoreboard.reloadFromDisk(); timer = millis(); } if (!EDITING) return; for (int i = 0 ; i < positions.length; i++) { positions[i].draw(); } }