[ Launch: worms ] 6968663 by enjalot
[ Launch: worms ] 6957240 by mjgil
[ Launch: worms ] 6956898 by enjalot
-
-
Save enjalot/6968663 to your computer and use it in GitHub Desktop.
worms
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{"description":"worms","endpoint":"","display":"canvas","public":true,"require":[],"fileconfigs":{"inlet.js":{"default":true,"vim":false,"emacs":false,"fontSize":12},"worms.pde":{"default":true,"vim":false,"emacs":false,"fontSize":12},"_.md":{"default":true,"vim":false,"emacs":false,"fontSize":12},"config.json":{"default":true,"vim":false,"emacs":false,"fontSize":12},"inlet.pde":{"default":true,"vim":false,"emacs":false,"fontSize":12}},"fullscreen":false,"play":false,"loop":false,"restart":false,"autoinit":true,"pause":true,"loop_type":"pingpong","bv":false,"nclones":15,"clone_opacity":0.4,"duration":3000,"ease":"linear","dt":0.01,"thumbnail":"http://i.imgur.com/IMcj1TR.gif"} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//http://media.quilime.com/?p=src/processing/vector_worms/ | |
Worm[] w; | |
int num_worms = 4; | |
int worm_length = 65; | |
void setup() { | |
size(tributary.sw, tributary.sh); | |
smooth(); | |
noStroke(); | |
// color mode as HSB so we can cycle through the color wheel | |
colorMode(HSB, 360, 255, 255); | |
reset(); | |
} | |
void reset() { | |
w = new Worm[num_worms]; | |
for (int i = num_worms-1; i >= 0; i--) | |
w[i] = new Worm( worm_length, 20 ); | |
} | |
void keyPressed() | |
{ | |
switch (keyCode) { | |
case 38 : // up | |
num_worms++; | |
break; | |
case 40 : // down | |
num_worms--; | |
if (num_worms <= 0) | |
num_worms = 1; | |
break; | |
case 37 : // left | |
worm_length--; | |
if (worm_length <= 0) | |
worm_length = 1; | |
break; | |
case 39 : // right | |
worm_length++; | |
break; | |
} | |
reset(); | |
} | |
int time = 0; | |
void draw() { | |
time = (time + 1) % 1000; | |
float t = time / 1000; | |
//console.log(t); | |
background(40); | |
// radius of structure | |
float rad = dist(mouseX, mouseY, width/2, height/2); | |
// angle between each worm | |
float angle = TWO_PI / w.length; | |
// get the mouse angle from center for rotation | |
float mouse_angle = atan2(mouseY-height/2, mouseX-width/2); | |
// loop through each worm and distribute them in a circle | |
for (int i = 0; i < w.length; i++) { | |
float SIN = sin(angle * i + mouse_angle); | |
float COS = cos(angle * i + mouse_angle); | |
float TAN = tan(angle * i + mouse_angle); | |
float dxA = lerp(2*SIN, 0, t); | |
float dxB = lerp(2*COS, 0, t); | |
float dx = width / 2 + rad * (dxA * dxB); | |
float dy = height / 2 + rad * SIN; | |
// create new force from circle code | |
PVector force = new PVector( dx - w[i].p.x , dy - w[i].p.y ); | |
// mult force so it's not so extreme. Try changing this value! | |
force.mult( 0.2 ); | |
w[i].v.add(force); | |
w[i].draw(); | |
} | |
} | |
class Worm { | |
PVector p, v; | |
PVector[] trails; | |
color c; | |
float hueCycle = 0; | |
float fatness = 20; | |
Worm( int _length, float _fatness ) | |
{ | |
p = new PVector(width/2, height/2); // position | |
v = new PVector(); // velocity | |
fatness = _fatness; | |
// setup trails by placing them randomly | |
trails = new PVector[_length]; | |
for ( int i = trails.length-1 ; i >= 0; i--) { | |
trails[i] = new PVector( random(width), random(height) ); | |
} | |
} | |
void draw() | |
{ | |
// drag. Try changing this! | |
v.mult( 0.85 ); | |
// add the velocity to the position | |
p.add( v ); | |
// update trails | |
// set first trail to be the object we're tracing | |
trails[0].x = p.x; | |
trails[0].y = p.y; | |
// loop through the trails array from LAST to FIRST | |
// setting each vectors position to the previous one | |
for ( int i = trails.length-1 ; i >= 1; i--) { | |
trails[i].x = trails[i-1].x; | |
trails[i].y = trails[i-1].y; | |
} | |
// cycle colors | |
hueCycle -= 5 ; // cycle speed. Try changing this! | |
while (hueCycle < 0 ) { | |
hueCycle += 360; | |
} | |
for ( int i = trails.length-1 ; i >= 0; i--) { | |
// loop through curHue | |
float curHue = hueCycle + i * 5f; | |
while (curHue > 360 ) { | |
curHue -= 360; | |
} | |
// create new color from hue cycle | |
c = color(hueCycle, 255, 255); | |
float weight = (float) i / trails.length; | |
float wave = sin(weight * PI); | |
float size = (wave * fatness); | |
fill( curHue, 255, 255 ); | |
ellipse(trails[i].x, trails[i].y, size, size); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment