codice:
int k, rows, cols;
Seat[] seats;
void setup()
{
size(1420,400); //dimensione del riquadro mappa locale
frameRate(30);
quanti = mappa.length;
seats = new Seat[quanti];
k = 0;
// STALLS
rows = 3;
cols = 10;
Xoff = 80;
Yoff = 120; //distanza dal bordo superiore
for(i=0; i<rows; i++)
{
for(j=0; j<cols; j++)
{
seats[k] = new Seat(Xoff+j*33, Yoff+i*33, mappa[k]); //distanza tra i tavoli
k++;
}
}
// GALLERY
rows = 3;
cols = 5;
Xoff = 135;
Yoff = 240; //distanza dal bordo superiore
for(i=0; i<rows; i++)
{
for(j=0; j<cols; j++)
{
seats[k] = new Seat(Xoff+j*33, Yoff+i*33, mappa[k]); //distanza tra i tavoli
k++;
}
}
}
void draw()
{
background(#F2FAFB);
// Disegno pianta locale
stroke(255);
fill(0);
rect(80, 20, 630, 40);
background(#F2FAFB);
fill(#000000);
// fill(255,0,0);
PFont fontA = loadFont("verdana");
textFont(fontA, 16);
string palco = '~ PIANTA DEL LOCALE ~';
float cw = textWidth(palco);
text(palco, 80+((730-cw)/1), 45);
// display seats
for(i=0; i<quanti; i++)
{
seats[i].display();
}
boolean atLeastOne = false;
// loop che individua dove si trova il puntatore del mouse
for(i=0; i<quanti; i++)
{
if(seats[i].over())
{
seats[i].update();
atLeastOne = true;
}
}
if(atLeastOne)
cursor(HAND);
else
cursor(ARROW);
}
void mouseClicked()
{
// loop per individuare l'elemento cliccato
for(i=0; i<quanti; i++)
{
if(seats[i].over())
{
seats[i].press(i);
}
}
}
class Seat
{
int x, y;
int size;
color clrFree, clrSelected, clrTaken, currentcolor;
boolean isOver = false;
boolean isSelected = false;
boolean isTaken = false;
HashMap config;
Seat(int ix, int iy, HashMap iconfig)
{
x = ix;
y = iy;
size = 30; //dimensione tavolo
clrFree = color(0,255,0);
clrSelected = color(255,255,0);
clrTaken = color(255,0,0);
config = iconfig;
switch(config.status)
{
case "L":
currentcolor = clrFree;
break;
case "O":
currentcolor = clrTaken;
isTaken = true;
break;
}
if(config.selected==1)
{
currentcolor = clrSelected;
isSelected = true;
}
}
void display()
{
stroke(currentcolor);
fill(currentcolor);
rect(x, y, size, size);
}
void update()
{
over();
// imposta il colore degli elementi selezionabili
if(isSelected)
{
currentcolor = clrSelected;
}
else if(isTaken)
{
currentcolor = clrTaken;
}
else
{
currentcolor = clrFree;
}
}
/**
* imposta lo stato dell'elemento selezionato
*/
boolean over()
{
if(isTaken)
{
isOver = false;
return false;
}
if (mouseX >= x && mouseX <= x+size &&
mouseY >= y && mouseY <= y+size)
{
showDetails();
isOver = true;
return true;
}
else
{
isOver = false;
return false;
}
}
/**
* Box informazioni che si apre sull'elemento nel quale viene posizionato il puntatore del mouse
*/
void showDetails()
{
stroke(255);
fill(#ffffff); //colore del box informazioni elemento
// fill(0);
rect(x-size-45, y-size-70, 185, 80); //dimensione del box informazioni elemento
fill(#000000); //colore del triangolo puntatore del box informazioni
triangle(x+(size/2), y, x+(size/2)+15, y-10, x+(size/2)-15, y-10);
// stroke(0);
line(x+(size/2)+14, y-10, x+(size/2)-14, y-10);
line(x+(size/2)+14, y-11, x+(size/2)-14, y-11);
int x1 = x-40;
int y1 = y+size+10;
int x2 = x+100;
int y2 = y+size+90;
PFont fontA = loadFont("verdana");
textFont(fontA, 14);
int xtxt = x-size-35;
int ytxt = y-size-45;
fill(#000000);
// fill(255,0,0);
text(config.settore+" ~ Num. "+config.fila+" ~ "+config.numero, xtxt, ytxt);
fill(#000000);
// fill(255);
text("Prezzo ~ "+config.intero+" ~ €", xtxt, ytxt+25);
text("Tavolo da ~ "+config.ridotto+" ~ Posti", xtxt, ytxt+40);
}
/**
* Al cllck su un elemento viene controllata l'azione da effettuare
*/
void press(int id)
{
int risp;
if(isOver)
{
if(isSelected)
{
risp = check("D", id);
if(risp==1)
{
isSelected = false;
currentcolor = clrSelected;
}
}
else
{
risp = check("S", id);
if(risp==1)
{
isSelected = true;
currentcolor = clrFree;
}
}
}
}
}