xxxxxxxxxx
181
let canvasWidth = 400;
let canvasHeight = 400;
let colour1;
let colour2;
function setup() {
createCanvas(canvasWidth, canvasHeight);
colorMode(HSB);
colour1 = color(random(360), random(100), 50 + random(50));
colour2 = color(random(360), random(100), 50 + random(50));
}
let mouseHeld = false; //is the mouse held down?
let squiggles = [];
let squiggleSpeed = 0.1; // must be less than 1
let simplifyTimer = 0;
let simplifyTime = 0.5;
let start = true;
function draw() {
background(0);
deltaTime = deltaTime / 100; // for some reason its in milliseconds? so i just made it to seconds lol
if (keyIsDown(32))
{
deltaTime *= 10; // accelerate time itself! with a click of the button!
}
//line(0, 0, mouseX, mouseY)
//line(canvasWidth, 0, mouseX, mouseY)
//line(0, canvasHeight, mouseX, mouseY)
//line(canvasWidth, canvasHeight, mouseX, mouseY)
//draw points
if (mouseIsPressed)
{
if (!mouseHeld)
{
mouseHeld = true;
squiggles.push(new squiggle());
}
squiggles[squiggles.length - 1].points.push(new point(mouseX, mouseY));
}
else
{
if (mouseHeld) //mouseUp
{
//squiggles[squiggles.length - 1] = simplifyLine(squiggles[squiggles.length - 1])
}
mouseHeld = false;
}
if (simplifyTimer < simplifyTime)
simplifyTimer += deltaTime;
if (keyIsDown(BACKSPACE))
{
if (squiggles.length > 0 && simplifyTimer >= simplifyTime){
simplifyTimer = 0;
squiggles[squiggles.length - 1] = simplifyLine(squiggles[squiggles.length - 1])
}
}
//display and move each point
for (let i = 0; i < squiggles.length; i ++)
{
if (squiggles[i].points.length == 0)
squiggles.splice(i, 1)
else
{
for (let j = 0; j < squiggles[i].points.length - 1; j ++)
{
//squiggles[i].points[j].x += squiggleSpeed * deltaTime;
//squiggles[i].points[j].y += squiggleSpeed * deltaTime;
let rise = squiggles[i].points[j + 1].y - squiggles[i].points[j].y;
let run = squiggles[i].points[j + 1].x - squiggles[i].points[j].x;
squiggles[i].points[j].x += run * deltaTime * squiggleSpeed;
squiggles[i].points[j].y += rise * deltaTime * squiggleSpeed;
let distance = sqrt(pow(rise, 2) + pow(run, 2)); //kills it if it gets too close to the other one
if (squiggles[i].points[j].x > canvasWidth ||
squiggles[i].points[j].x < 0 ||
squiggles[i].points[j].y > canvasHeight ||
squiggles[i].points[j].y < 0 || distance < 0.5)
{
squiggles[i].points.splice(j, 1);
}
else
{
let Inter = lerpColor(colour1, colour2, squiggles[i].points[j].y / canvasHeight);
stroke(Inter);
line(squiggles[i].points[j].x, squiggles[i].points[j].y, squiggles[i].points[j + 1].x, squiggles[i].points[j + 1].y);
//line(squiggles[i].points[j].x, squiggles[i].points[j].y, 0, 0);
//line(squiggles[i].points[j].x, squiggles[i].points[j].y, 0, canvasHeight);
//line(squiggles[i].points[j].x, squiggles[i].points[j].y, canvasWidth, canvasHeight);
//line(squiggles[i].points[j].x, squiggles[i].points[j].y, canvasWidth, 0);
//line(squiggles[i].points[j].x, squiggles[i].points[j].y, canvasWidth / 2, canvasHeight / 2);
//circle(squiggles[i].points[j].x, squiggles[i].points[j].y, 3);
}
}
if (squiggles[i].points.length > 1)
{
let last = squiggles[i].points.length - 1;
let rise = squiggles[i].points[last].y - mouseY;
let run = squiggles[i].points[last].x - mouseX;
let distance = sqrt(pow(rise, 2) + pow(run, 2))
if (distance == 0)
distance = 0.0001
squiggles[i].points[last].x += -run * deltaTime * squiggleSpeed * 10 / distance;
squiggles[i].points[last].y += -rise * deltaTime * squiggleSpeed * 10 / distance;
if (squiggles[i].points[last].x > canvasWidth ||
squiggles[i].points[last].x < 0 ||
squiggles[i].points[last].y > canvasHeight ||
squiggles[i].points[last].y < 0)
{
squiggles[i].points.pop();
}
}
}
}
}
function simplifyLine(simplifiedLine)
{
for (let i = 0; i < simplifiedLine.points.length; i ++)
{
if (i%2 == 0)
{
simplifiedLine.points.splice(i, 1);
}
}
return simplifiedLine;
}
class squiggle
{
constructor()
{
this.points = [];
}
}
class point
{
constructor(xInput, yInput)
{
this.x = xInput;
this.y = yInput;
}
}