first commit
This commit is contained in:
commit
b827bb4ce6
14 changed files with 673 additions and 0 deletions
155
GoL3D1/GoL3D1.pde
Normal file
155
GoL3D1/GoL3D1.pde
Normal file
|
@ -0,0 +1,155 @@
|
|||
import com.shigeodayo.pframe.*;
|
||||
import g4p_controls.*;
|
||||
|
||||
//gestione mouse e rotazione assi
|
||||
float spostX, spostY, spostZ; //spostamento degli oggeto nel sistema di assi
|
||||
int mousePressedX, mousePressedY;
|
||||
float vRot; //velocità di rotazione al pixel
|
||||
|
||||
float rotX, rotY; //variabili rotazione assi
|
||||
float tempRotX, tempRotY; //variabili temporanee per la somma della rotazione con il drag del mouse
|
||||
float vSpost; // spostamento negli assi
|
||||
|
||||
float tempSpostX, tempSpostY; //spostamento temporaneo nel sistema
|
||||
float zoom; //variabile per la gesione della quantità di zoom
|
||||
|
||||
float scalatura; //indica la grandezza di scale()
|
||||
float scaleIndex; //indica di quanto diminuire scalatura es: 0.1 --> ogni pressione dei tasti su/giu scalatura cambia di 0.1
|
||||
|
||||
float explode;
|
||||
int opacita;
|
||||
|
||||
int ogniTot;
|
||||
|
||||
int loneliness;
|
||||
int overcrowding;
|
||||
int minNeight, maxNeight;
|
||||
thVita thv;;
|
||||
|
||||
//istanzio l'array tridimensionale di cellule
|
||||
Cellula[][][] brodo;
|
||||
|
||||
//lato cubo
|
||||
int L = 300;
|
||||
//num Cellule per lato
|
||||
int numCell = 50;
|
||||
|
||||
public void setup(){
|
||||
size(800, 600, P3D);
|
||||
|
||||
//istanzio le alter finestre
|
||||
createGUI();
|
||||
|
||||
zoom = 2;
|
||||
spostX = 0;
|
||||
spostY = 0;
|
||||
spostZ = 0;
|
||||
vSpost = 1;
|
||||
|
||||
explode = 0;
|
||||
opacita = 51;
|
||||
|
||||
brodo = new Cellula[numCell][numCell][numCell];
|
||||
|
||||
ogniTot = 2;
|
||||
|
||||
istanziaBrodo();
|
||||
|
||||
loneliness = 3;
|
||||
overcrowding = 20;
|
||||
minNeight = 4;
|
||||
maxNeight = 15;
|
||||
|
||||
thv = new thVita();
|
||||
}
|
||||
|
||||
public void draw(){
|
||||
background(255);//cancella tutto
|
||||
|
||||
pushMatrix();
|
||||
translate(width/2 + spostX + tempSpostX - (explode/2)*brodo.length, height/2 + spostY + tempSpostY - (explode/2)*brodo.length, -L/2 - (explode/2)*brodo.length);//mi sposto al centro dello schermo
|
||||
//ruoto il disegno
|
||||
rotateY(rotX + tempRotX);
|
||||
rotateX(rotY + tempRotY);
|
||||
scale(zoom); //imposto la proporzione di disegno
|
||||
noFill();
|
||||
noStroke();
|
||||
|
||||
|
||||
for (int i = 0; i< brodo.length; i++){
|
||||
for (int j = 0; j< brodo[0].length; j++){
|
||||
for (int k = 0; k< brodo[0][0].length; k++){
|
||||
pushMatrix();
|
||||
|
||||
translate(-L/2 + (L/numCell + explode/2) * i, -L/2 + (L/numCell + explode/2) * j, -L/2 + (L/numCell + explode/2) * k);//mi sposto al centro dello schermo
|
||||
|
||||
if(brodo[i][j][k].isLiving()) {
|
||||
if(brodo[i][j][k].getWilllive()) fill(0,100,255, opacita); //blu trasparente
|
||||
else fill(200,100,0, opacita); //blu trasparente
|
||||
}
|
||||
else {
|
||||
noFill();
|
||||
}
|
||||
|
||||
box((L/numCell));
|
||||
//sphere((L/numCell)/2);
|
||||
|
||||
popMatrix();
|
||||
}
|
||||
}
|
||||
}
|
||||
fill(255);
|
||||
|
||||
scalatura = 1;
|
||||
popMatrix();
|
||||
vRot = radians(0.3); //spostamento di 1 px per ogni pixel del mouse
|
||||
}
|
||||
|
||||
void mouseDragged() {
|
||||
if (mouseButton == 39) {
|
||||
tempRotX = (mouseX - mousePressedX) * vRot;
|
||||
tempRotY = -(mouseY - mousePressedY) * vRot;
|
||||
}
|
||||
|
||||
if (mouseButton == 37) {
|
||||
tempSpostX = (mouseX - mousePressedX) * vSpost;
|
||||
tempSpostY = (mouseY - mousePressedY) * vSpost;
|
||||
//println(spostX + " " + spostY + " " + tempSpostX + " " + tempSpostY);
|
||||
}
|
||||
}
|
||||
|
||||
void mouseReleased() {
|
||||
//salvo la nuova posizione e resetto le varibili temporanee
|
||||
rotX += tempRotX;
|
||||
rotY += tempRotY;
|
||||
spostX += tempSpostX;
|
||||
spostY += tempSpostY;
|
||||
tempSpostX = 0;
|
||||
tempSpostY = 0;
|
||||
tempRotX = 0;
|
||||
tempRotY = 0;
|
||||
}
|
||||
|
||||
void mouseWheel(MouseEvent event) {
|
||||
if(zoom - event.getAmount() / 10 > 1) zoom -= (event.getAmount() / 10);
|
||||
else if(zoom - event.getAmount() / 30 <= 1 && zoom - event.getAmount() / 30 >= 0.1) zoom -= (event.getAmount() / 30);
|
||||
else zoom = 0.1;
|
||||
}
|
||||
|
||||
void mousePressed() {
|
||||
mousePressedX = mouseX;
|
||||
mousePressedY = mouseY;
|
||||
}
|
||||
|
||||
public void istanziaBrodo(){
|
||||
for (int i = 0; i< brodo.length; i++){
|
||||
for (int j = 0; j< brodo[0].length; j++){
|
||||
for (int k = 0; k< brodo[0][0].length; k++){
|
||||
brodo[i][j][k] = new Cellula(i, j, k);
|
||||
//1 cellula su boh la faccio vivere in modo random
|
||||
brodo[i][j][k].setLiving((Math.round(random(ogniTot)) == 0)?true:false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue