xxxxxxxxxx
250
//DECLARE VARIABLES
let drawfromX = 0;
let drawfromY = 0;
let ellipseWidth = 0;
let ellipseHeight = 0;
let ellipseX = 0;
let ellipseY = 0;
let orbitWidth = 0;
let orbitHeight = 0;
let ellipsePercentX = 3;
let ellipsePercentY = 0.6;
let orbitAngle = 10;
//colors (rgb);
let redvalue = 200;
let greenvalue = 0;
let bluevalue = 15;
let redrandom = 200;
let greenrandom = 0;
let bluerandom = 15;
let redrandom2 = 200;
let greenrandom2 = 0;
let bluerandom2 = 15;
let orbitdensity = 255;
//initial zoom state
let zoom = 0.6;
let zoomvalue = 1;
//initial sparkle state
let sparkleState = false;
//makes clicks work
let mouseLocked = false;
let canvasWidth = 600;
let canvasHeight = 400;
//END VARIABLES
function setup() {
createCanvas(windowWidth, windowHeight);
angleMode(DEGREES);
}
function draw() {
//NOTE: sparkly stars smoothness is DEPENDENT ON ALPHA CHANNEL IN BACKGROUND!!!!!
background(0, 25);
//only 1 parameter: true/false for star sparkle
drawStars(true);
//DRAWPLANET PARAMETERS:
//NOTE: Planet width and height and zoom affect one another
// PARAMETERS of drawPlanet:
// X
// Y
// planet width
// planet height
// ring width (% of planet)
// ring height (% of planet)
// ring density (0-255);
// R
// G
// B
// initial zoom(1 = 100%, 2 = 200%));
// orbit Angle (DEGREES);
// zoom percentage (will scale at different rates);
if (zoom < 6.7) {
drawPlanet(width * 0.2, height * 0.3, width, width, 3, 0.6, 100, redrandom, greenrandom, bluerandom, 0, 0.1);
}
if (zoom < 8) {
drawPlanet(width * 0.8, height * 0.7, width * 0.65, width * 0.65, 0, 0, 255, redrandom2, greenrandom2, bluerandom2, -10, 0.1);
}
if (zoom < 2.7) {
drawPlanet(width * 0.5, height * 0.5, width * 0.3, width * 0.3, 3.5, 0.8, 255, redvalue, greenvalue, bluevalue, 10, 1);
}
//DO NOT REMOVE
//invisible planet to keep zoom working...
drawPlanet(0, 0, 0, 0, 0, 0, 0, redrandom2, greenrandom2, bluerandom2, -10, 0.1);
}
//FUNCTIONS:
function drawStars(sparkleState) {
//static stars
for (let i = 0; i < 150; i++) {
push();
fill(255);
noStroke();
let noiseX = noise(i, 2);
let noiseY = noise(i, 980);
let starX = map(noiseX, 0.1, 0.9, width * -0.25, (width + (width * 0.25)));
let starY = map(noiseY, 0.1, 0.9, height * -0.25, (height + (height * 0.25)));
let stardiameter = (height * 0.02) * (noise(i, 745));
circle(starX, starY, stardiameter);
pop();
}
//sparkling stars:
if (sparkleState == true) {
// kept for loop so you can adjust sparkliness by increasing the size of the loop
for (let i = 0; i < 1; i++) {
push();
fill(255)
noStroke();
let noiseX = noise(i, 0);
let noiseY = noise(i, 1000);
let starX = map(noiseX, 0.1, 0.9, width * -0.25, (width + (width * 0.25)));
let starY = map(noiseY, 0.1, 0.9, height * -0.25, (height + (height * 0.25)));
let stardiameter = random((height * 0.005), (height * 0.03));
circle(random(0, width), random(0, height), stardiameter);
pop();
}
}
}
function drawPlanet(drawfromX, drawfromY, ellipseWidth, ellipseHeight, ellipsePercentX, ellipsePercentY, orbitdensity, redvalue, greenvalue, bluevalue, orbitAngle, zoomvalue) {
orbitWidth = ellipseWidth * ellipsePercentX;
orbitHeight = ellipseHeight * ellipsePercentY;
push();
//enable zoom
translate(drawfromX, drawfromY);
scale(zoom * zoomvalue);
//zoom:
if (mouseLocked == true) {
mouseconstrain = mouseX
realmouseX = constrain(mouseconstrain, 0, width);
zoom = map(realmouseX, 0, width, 0.1, 10);
} else {
zoom = zoom
}
// planet base
push();
fill(redvalue, greenvalue, bluevalue);
stroke(100);
ellipse(ellipseX, ellipseY, ellipseWidth, ellipseHeight);
pop();
//inner planet shadow:
push();
fill(redvalue * 0.75, greenvalue * 0.75, bluevalue * 0.75);
noStroke();
ellipse(ellipseX, ellipseY, ellipseWidth - ellipseWidth * 0.2, ellipseHeight)
pop();
//orbit
push()
noFill();
stroke(orbitdensity);
rotate(orbitAngle);
ellipse(ellipseX - ellipseX, ellipseY - ellipseY, orbitWidth, orbitHeight)
pop()
//invisible arcs to be in front of orbit
//outer arc
push();
stroke(100);
fill(redvalue, greenvalue, bluevalue)
arc(ellipseX, ellipseY, ellipseWidth, ellipseHeight, 180, 0, OPEN)
pop();
//inner arc
push();
noStroke();
fill(redvalue * 0.75, greenvalue * 0.75, bluevalue * 0.75)
arc(ellipseX, ellipseY, ellipseWidth - ellipseWidth * 0.2, ellipseHeight, 180, 0, OPEN)
pop();
//pop translate (zoom)
pop();
}
function mousePressed() {
mouseLocked = false
}
function mouseDragged() {
mouseLocked = true
}
function mouseReleased() {
mouseLocked = false
}
function keyTyped() {
if (key === 'c') {
redvalue = 200;
greenvalue = 0;
bluevalue = 15;
redrandom = 200;
greenrandom = 0;
bluerandom = 15;
redrandom2 = 200;
greenrandom2 = 0;
bluerandom2 = 15;
}
if (key === ' ') {
fs = fullscreen()
// console.log(fs);
fullscreen(!fs);
}
}
function windowResized() {
if (fullscreen) {
resizeCanvas(windowWidth, windowHeight);
} else {
resizeCanvas(600, 400)
}
}
function doubleClicked() {
//allows for three random sets of RGB
redvalue = random(255);
greenvalue = random(255);
bluevalue = random(255);
redrandom = random(255);
greenrandom = random(255);
bluerandom = random(255);
redrandom2 = random(255);
greenrandom2 = random(255);
bluerandom2 = random(255);
}