xxxxxxxxxx
//Flower Boxes V2
//Using different opening/closing arrangement
//08-08-2015
//Written by Edward Shin
ArrayList<Flower> flowers;
void setup(){
size(720,720);
flowers = new ArrayList<Flower>();
smooth();
setFlowers();
}
void draw(){
background(235);
drawFlowers();
animate();
animate2();
animate3();
animate4();
animate5();
}
void setFlowers(){ //set coordinates for square flowers
for(int c = 40; c < 720; c += 160){
for(int r = 40; r < 720; r += 160){
flowers.add(new Flower(c, r));
if(c < 640 && r < 640){
flowers.add(new Flower(c + 80, r + 80));
}
}
}
}
void drawFlowers(){ //draw square flowers based on setFlowers()
for(int n = 0; n < flowers.size(); n++){
flowers.get(n).drawFlower();
}
}
void animate(){ //animate flowers individually by mouse; open or close
for(int n = 0; n < flowers.size(); n++){
Flower f = flowers.get(n);
if(f.isReady() == true){
if(f.isOpened() == false){
f.openPetals();
if(f.getCount() == 20){
f.update();
}
}
else{
f.closePetals();
if(f.getCount() == 20){
f.update();
}
}
}
}
}
void animate2(){ //animate all flowers to open or close by keys
for(int n = 0; n < flowers.size(); n++){
Flower f = flowers.get(n);
if(f.isReady1() == true && f.isOpened() == false){
f.openPetals();
if(f.getCount() == 20){
f.update();
}
}
if(f.isReady2() == true && f.isOpened() == true){
f.closePetals();
if(f.getCount() == 20){
f.update();
}
}
}
}
void animate3(){ //reverses open/closed states
for(int n = 0; n < flowers.size(); n++){
Flower f = flowers.get(n);
if(f.isReady3() == true && f.isOpened() == false){
f.openPetals();
if(f.getCount() == 20){
f.update();
}
}
else if(f.isReady3() == true && f.isOpened() == true){
f.closePetals();
if(f.getCount() == 20){
f.update();
}
}
}
}
void animate4(){ //randomizes what is opened or closed
for(int n = 0; n < flowers.size(); n++){
Flower f = flowers.get(n);
if(f.isReady4() == true && f.isOpened() == false && f.getRand() == 1){
f.openPetals();
if(f.getCount() == 20){
f.update();
}
}
else if(f.isReady4() == true && f.isOpened() == true && f.getRand() == 2){
f.closePetals();
if(f.getCount() == 20){
f.update();
}
}
}
}
void animate5(){ //creates a particular pattern; just for the heck of it
for(int n = 1; n < flowers.size(); n += 2){
Flower f = flowers.get(n);
if(f.isReady5() == true && f.isOpened() == false){
f.openPetals();
if(f.getCount() == 20){
f.update();
}
}
else if(f.isReady5() == true && f.isOpened() == true){
f.closePetals();
if(f.getCount() == 20){
f.update();
}
}
}
}
void mouseClicked(){
for(int n = 0; n < flowers.size(); n++){
Flower here = flowers.get(n);
if(mouseX > here.getLeft() && mouseX < here.getRight() && mouseY > here.getUp() && mouseY < here.getDown()){
here.prepare(0);
}
}
}
void keyPressed(){
for(int n = 0; n < flowers.size(); n++){
Flower flow = flowers.get(n);
if(key == '1'){
flow.prepare(1);
}
if(key == '2'){
flow.prepare(2);
}
if(key == '3'){
flow.prepare(3);
}
if(key == '4'){
flow.prepare(4);
}
if(key == '5'){
flow.prepare(5);
}
}
}
class Flower{
int x, y, x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6, x7, y7, x8, y8, x9, y9, x10, y10, x11, y11, x12, y12, count;
float rand;
boolean opened, ready, ready1, ready2, ready3, ready4, ready5;
Flower(int x, int y){
this.x = x4 = x5 = x8 = x9 = x11 = x12 = x;
this.y = y3 = y6 = y7 = y10 = y11 = y12 = y;
x1 = x3 = x10 = x - 40;
y1 = y4 = y5 = y - 40;
x2 = x6 = x7 = x + 40;
y2 = y8 = y9 = y + 40;
count = 0;
opened = false;
ready = false;
ready1 = false;
ready2 = false;
ready3 = false;
ready4 = false;
ready5 = false;
}
void drawFlower(){
stroke(0,80);
noFill();
rectMode(CENTER);
rect(x, y, 80, 80);
fill(75, 180);
stroke(0);
triangle(x1, y1, x3, y3, x4, y4);
triangle(x2, y1, x5, y5, x6, y6);
triangle(x2, y2, x7, y7, x8, y8);
triangle(x1, y2, x9, y9, x10, y10);
triangle(x1, y, x11, y1, x11, y2);
triangle(x, y1, x1, y11, x2, y11);
triangle(x2, y, x12, y1, x12, y2);
triangle(x, y2, x1, y12, x2, y12);
stroke(0, 80);
noFill();
beginShape();
vertex(x1, y);
vertex(x, y1);
vertex(x2, y);
vertex(x, y2);
endShape(CLOSE);
}
void openPetals(){
x3 -= 2;
y3 -= 2;
x4 -= 2;
y4 -= 2;
x5 += 2;
y5 -= 2;
x6 += 2;
y6 -= 2;
x7 += 2;
y7 += 2;
x8 += 2;
y8 += 2;
x9 -= 2;
y9 += 2;
x10 -= 2;
y10 += 2;
x11 -= 4;
y11 -= 4;
x12 += 4;
y12 += 4;
count++;
}
void closePetals(){
x3 += 2;
y3 += 2;
x4 += 2;
y4 += 2;
x5 -= 2;
y5 += 2;
x6 -= 2;
y6 += 2;
x7 -= 2;
y7 -= 2;
x8 -= 2;
y8 -= 2;
x9 += 2;
y9 -= 2;
x10 += 2;
y10 -= 2;
x11 += 4;
y11 += 4;
x12 -= 4;
y12 -= 4;
count++;
}
void update(){
count = 0;
ready = false;
ready1 = false;
ready2 = false;
ready3 = false;
ready4 = false;
ready5 = false;
if(opened == false){
opened = true;
}
else{
opened = false;
}
}
void prepare(int a){
if(a == 0){
ready = true;
}
else if(a == 1){
ready1 = true;
}
else if(a == 2){
ready2 = true;
}
else if(a == 3){
ready3 = true;
}
else if(a == 4){
ready4 = true;
rand = random(1, 4);
}
else if(a == 5){
ready5 = true;
}
}
int getLeft(){
return x - 40;
}
int getRight(){
return x + 40;
}
int getUp(){
return y - 40;
}
int getDown(){
return y + 40;
}
int getCount(){
return count;
}
int getRand(){
return int(rand);
}
boolean isOpened(){
return opened;
}
boolean isReady(){
return ready;
}
boolean isReady1(){
return ready1;
}
boolean isReady2(){
return ready2;
}
boolean isReady3(){
return ready3;
}
boolean isReady4(){
return ready4;
}
boolean isReady5(){
return ready5;
}
}