xxxxxxxxxx
//Flower Boxes V4.4.1
//aka Pinwheel Boxes
//A fourth version with a pinwheel like opening; added a function to allow variation of color; origami style
//08-11-2015
//Written by Edward Shin
ArrayList<Flower> flowers;
void setup(){
size(660,660);
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 = 30; c < 660; c += 120){
for(int r = 30; r < 660; r += 120){
flowers.add(new Flower(c, r));
if(c < 600 && r < 600){
flowers.add(new Flower(c + 60, r + 60));
}
}
}
}
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();
f.changeCol();
}
}
else{
f.closePetals();
f.resetCol();
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();
f.changeCol();
}
}
if(f.isReady2() == true && f.isOpened() == true){
f.closePetals();
f.resetCol();
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();
f.changeCol();
}
}
else if(f.isReady3() == true && f.isOpened() == true){
f.closePetals();
f.resetCol();
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();
f.changeCol();
}
}
else if(f.isReady4() == true && f.isOpened() == true && f.getRand() == 2){
f.closePetals();
f.resetCol();
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();
f.changeCol();
}
}
else if(f.isReady5() == true && f.isOpened() == true){
f.closePetals();
f.resetCol();
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);
here.changeCol();
}
}
}
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, count;
float rand, r, g, b;
boolean opened, ready, ready1, ready2, ready3, ready4, ready5;
color col;
Flower(int x, int y){
this.x = x5 = x8 = x;
this.y = y2 = y5 = y;
x1 = x7 = x - 30;
y1 = y3 = y7 = y - 30;
x2 = x3 = x4 = x6 = x + 30;
y4 = y6 = y + 30;
count = 0;
r = 150;
g = 150;
b = 150;
opened = false;
ready = false;
ready1 = false;
ready2 = false;
ready3 = false;
ready4 = false;
ready5 = false;
}
void drawFlower(){
col = color(r, g, b);
stroke(col);
strokeWeight(1.2);
fill(col, 100);
triangle(x1, y1, x, y1, x, y);
triangle(x, y2, x, y1, x2, y1);
triangle(x, y, x3, y3, x4, y);
triangle(x5, y, x2, y, x2, y4);
triangle(x, y, x6, y4, x, y4);
triangle(x, y5, x, y4, x7, y4);
triangle(x, y, x7, y, x7, y6);
triangle(x8, y, x7, y, x7, y7);
/* noFill();
stroke(0);
strokeWeight(.5);
rectMode(CENTER);
rect(x, y, 80, 80);*/
}
void openPetals(){
x1 += 3;
y2 -= 3;
y3 += 3;
x5 += 3;
x6 -= 3;
y5 += 3;
y6 -= 3;
x8 -= 3;
count++;
}
void closePetals(){
x1 -= 3;
y2 += 3;
y3 -= 3;
x5 -= 3;
x6 += 3;
y5 -= 3;
y6 += 3;
x8 += 3;
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;
}
}
void changeCol(){
r = random(0, 255);
g = random(0, 255);
b = random(0, 255);
}
void resetCol(){
r = 150;
g = 150;
b = 150;
}
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;
}
}