=======Rex Lee's generative flower=======
By [[Howard-Lee|Howard Lee]]
function setup() {
createCanvas(1700, 800);
//frameRate(5);
noLoop();
}
let shapes = ["flower"];
let colors = ["pink", "orange", "lightgrey", "lightblue","lavender"];
function pick(inputArray) {
return inputArray[Math.floor(inputArray.length * Math.random())];
}
function buildArray(n, fillFunction) {
let outputArray = [];
for (let i = 0; i < n; i++) {
outputArray.push(fillFunction(i));
}
return outputArray;
}
function randomRange(min, max) {
return min + (max - min) * Math.random();
}
class RandomShape {
constructor(x,maxX,y,c) {
//this.color = pick(colors);
this.color = c;
this.shape = pick(shapes);
this.xposition = randomRange(x,x+maxX);
this.yposition = randomRange(y, y+399);
this.size = randomRange(51, 51);
}
draw() {
if (this.color == "black" && !(this.shape == "ellipse")) {
this.xposition = 266;
this.size = 400;
}
if (this.yposition>144) {}
if (this.shape == "rect") {
rect(this.xposition, this.yposition, this.size, this.size);
} else if (this.shape == "ellipse") {
ellipse(this.xposition, this.yposition, this.size, this.size);
} else if (this.shape == "flower") {
translate(this.xposition, this.yposition);
fill(163, 152, 163);
rect(35, 20, 14, 135, 20);
rect(5, 64, 55, 25, 20);
rect(30, 64, 55, 25, 20);
//petal
//fill(this.color);
if (this.color=="random"){fill(pick(colors))} else {fill(this.color);}
rect(0, 20, this.size, this.size, 20);
rect(30, 20, this.size, this.size, 20);
fill(191, 170, 191);
rect(30, 35, 25, 25, 10);
resetMatrix();
} else {
triangle(
this.xposition,
this.yposition,
this.xposition + this.size,
this.yposition + this.size,
this.xposition - this.size,
this.yposition + this.size
);
}
fill(this.color);
}
}
//check buildArray on the wiki to make 10 objects
// buildArray can use an arrow function; check arrow function on the wiki
let myShapes = buildArray(144, (i) => new RandomShape(0,250,0,"pink"));
let myShapes2 = buildArray(177, (i) => new RandomShape(275,800,0,"random"));
// i => new RandomShape()
// is the same as
// function makeShape () {return new RandomShape()}
function draw() {
background(270, 178, 17);
//let shape1 = new RandomShape();
// shape1.draw();
// use forEach to do something with every item in an array
// forEach can also use an arrow function
console.log(myShapes);
myShapes.forEach((x) => x.draw());
myShapes2.forEach((x) => x.draw());
}