/* built with Studio Sketchpad:
* https://sketchpad.cc
*
* observe the evolution of this sketch:
* https://studio.sketchpad.cc/sp/pad/view/ro.fVCrJ4JwmSL/rev.4
*
* authors:
* GoToLoop
* license (unless otherwise specified):
* creative commons attribution-share alike 3.0 license.
* https://creativecommons.org/licenses/by-sa/3.0/
*/
/**
* Starfield (v2.0)
* by TfGuy44 (2014/Jun)
* mod GoToLoop
*
* forum.processing.org/two/discussion/5758/
* making-points-move-out-of-the-screen
* from-the-center-to-the-edges-warp-speed
*
* studio.processingtogether.com/sp/pad/export/ro.9ZbTlw0Ak8yUR/latest
*/
static final int NUM = 02000;
final Star[] stars = new Star[NUM];
void setup() {
size(600, 400, JAVA2D);
frameRate(60);
noSmooth();
stroke(Star.OUTLINE);
background(0);
for (int i = 0; i != NUM; stars[i++] = new Star());
}
void draw() {
if (!(mousePressed | keyPressed)) background(0);
for (Star s: stars) s.display();
}
class Star {
static final int MAX_SPD = 3;
static final color OUTLINE = -1;
float px, py, vx, vy;
Star() {
reset();
}
void reset() {
float r = random(width+height);
vx = random(-MAX_SPD, MAX_SPD);
vy = random(-MAX_SPD, MAX_SPD);
px = (width>>1) + vx*r;
py = (height>>1) + vy*r;
}
void display() {
if ((px += vx)<0 | px>width | (py += vy)<0 | py>height) reset();
if (mousePressed | keyPressed) line(px, py, px-vx, py-vy);
else set((int) px, (int) py, OUTLINE);
}
}