diff --git a/day3/sketch_creature_arrival/CircleCreature.pde b/day3/sketch_creature_arrival/CircleCreature.pde new file mode 100644 index 0000000..6e3f141 --- /dev/null +++ b/day3/sketch_creature_arrival/CircleCreature.pde @@ -0,0 +1,18 @@ +class CircleCreature extends Creature { + + public CircleCreature(int x, int y, int r) { + super(x, y, r); + ellipseMode(RADIUS); + } + + public void draw_shape(){ + ellipse(0, 0, radius(), radius()); + line(0, 0, radius(), 0); + } + + public boolean inside(int mx, int my) { + if(dist(mx, my, position().x, position().y) < radius()) return true; + return false; + } + +}; diff --git a/day3/sketch_creature_arrival/Creature.pde b/day3/sketch_creature_arrival/Creature.pde new file mode 100644 index 0000000..7f35285 --- /dev/null +++ b/day3/sketch_creature_arrival/Creature.pde @@ -0,0 +1,37 @@ +import teilchen.BehaviorParticle; +import mathematik.Vector3f; + +class Creature extends BehaviorParticle { + + float _scale; + + public Creature(int x, int y, int r) { + super(); + position().set(x, y); + maximumInnerForce(100); + radius(r); + _scale = 1.0; + } + + public void display() { + pushMatrix(); + translate(position().x, position().y); + rotate(getRotation()); + scale(_scale); + draw_shape(); + popMatrix(); + + } + + private float getRotation() { + if(velocity().isNaN() || velocity().magnitude() == 0) return 0; + Vector3f v = new Vector3f(-1, 0, 0); + return velocity().angle(v); + } + + public void draw_shape() {} + + public boolean inside(int mx, int my){return false;} + +}; + diff --git a/day3/sketch_creature_arrival/SquareCreature.pde b/day3/sketch_creature_arrival/SquareCreature.pde new file mode 100644 index 0000000..c218805 --- /dev/null +++ b/day3/sketch_creature_arrival/SquareCreature.pde @@ -0,0 +1,22 @@ +class SquareCreature extends Creature { + + int _width; + int _height; + + public SquareCreature(int x, int y, int w, int h) { + super(x, y, (int)sqrt(pow(w / 2, 2) + pow(h / 2, 2))); + _width = w; + _height = h; + rectMode(CENTER); + } + + public void draw_shape(){ + rect(0, 0, _width, _height); + } + + public boolean inside(int mx, int my) { + if(dist(mx, my, position().x, position().y) < radius()) return true; + return false; + } + +}; diff --git a/day3/sketch_creature_arrival/TriangleCreature.pde b/day3/sketch_creature_arrival/TriangleCreature.pde new file mode 100644 index 0000000..fc4e50b --- /dev/null +++ b/day3/sketch_creature_arrival/TriangleCreature.pde @@ -0,0 +1,36 @@ +class TriangleCreature extends Creature { + + PVector A, B, C; + + public TriangleCreature(int x, int y, int r) { + super(x, y, r); + + A = new PVector(); + B = new PVector(); + C = new PVector(); + + float theta = TWO_PI/3; + + A.x = cos(0 * theta) * r; + A.y = sin(0 * theta) * r; + + B.x = cos(1 * theta) * r; + B.y = sin(1 * theta) * r; + + C.x = cos(2 * theta) * r; + C.y = sin(2 * theta) * r; + + } + + public void draw_shape(){ + triangle(A.x, A.y, B.x, B.y, C.x, C.y); + line(0, 0, A.x, 0); + } + + public boolean inside(int mx, int my) { + if(dist(mx, my, position().x, position().y) < radius()) return true; + return false; + } + + +}; diff --git a/day3/sketch_creature_arrival/sketch.properties b/day3/sketch_creature_arrival/sketch.properties new file mode 100644 index 0000000..8630fa2 --- /dev/null +++ b/day3/sketch_creature_arrival/sketch.properties @@ -0,0 +1,2 @@ +mode.id=processing.mode.java.JavaMode +mode=Java diff --git a/day3/sketch_creature_arrival/sketch_creature_arrival.pde b/day3/sketch_creature_arrival/sketch_creature_arrival.pde new file mode 100644 index 0000000..d38de0f --- /dev/null +++ b/day3/sketch_creature_arrival/sketch_creature_arrival.pde @@ -0,0 +1,56 @@ +import teilchen.Physics; +import teilchen.behavior.Arrival; + +final int CANVAS_WIDTH = 500; +final int CANVAS_HEIGHT = 500; + +Physics physics; + +Creature creature; + +Arrival arrival; + +void setup() { + size(CANVAS_WIDTH, CANVAS_HEIGHT); + background(23, 68, 250); + frameRate(30); + + physics = new Physics(); + + creature = new TriangleCreature(width / 2, height / 2, 30); + physics.add(creature); + + arrival = new Arrival(); + arrival.breakforce(creature.maximumInnerForce() * 0.25f); + arrival.breakradius(creature.maximumInnerForce() * 0.25f); + + creature.behaviors().add(arrival); + +} + +void draw() { + + arrival.position().set(mouseX, mouseY); + + physics.step(1.0 / frameRate); + + background(23, 68, 250); + stroke(255); + noFill(); + + creature.display(); + + if(arrival.arrived()) { + stroke(0, 255, 0); + fill(0, 255, 0, 30); + } else { + stroke(255, 0, 189); + fill(255, 0, 189, 30); + } + + ellipse(arrival.position().x, arrival.position().y, + arrival.breakradius() * 2, arrival.breakradius() * 2); + + +} + diff --git a/day3/sketch_creature_attractor/sketch_creature_attractor.pde b/day3/sketch_creature_attractor/sketch_creature_attractor.pde index 2de54f5..5c3377f 100644 --- a/day3/sketch_creature_attractor/sketch_creature_attractor.pde +++ b/day3/sketch_creature_attractor/sketch_creature_attractor.pde @@ -26,8 +26,8 @@ void setup() { // create attaractor attractor = new Attractor(); - attractor.radius(50); - attractor.strength(200); + attractor.radius(150); + attractor.strength(1000); physics.add(attractor); // create all creatures @@ -69,8 +69,7 @@ void draw() { fill(0, 255, 0, 35); } - ellipse(attractor.position().x, attractor.position().y, - attractor.radius(), attractor.radius()); + ellipse(attractor.position().x, attractor.position().y, attractor.radius(), attractor.radius()); } diff --git a/day3/sketch_creature_spring/sketch_creature_spring.pde b/day3/sketch_creature_spring/sketch_creature_spring.pde index 22fedea..b3bafb3 100644 --- a/day3/sketch_creature_spring/sketch_creature_spring.pde +++ b/day3/sketch_creature_spring/sketch_creature_spring.pde @@ -13,8 +13,6 @@ Spring spring; Creature t; Creature c; -ArrayList creatures = new ArrayList(); - void setup() { size(CANVAS_WIDTH, CANVAS_HEIGHT); background(23, 68, 250); @@ -25,7 +23,7 @@ void setup() { // create a global drag ViscousDrag drag = new ViscousDrag(); drag.coefficient = 0.25f; - physics.add(drag); + //physics.add(drag); t = new TriangleCreature((int)random(width), (int)random(height), 20); c = new CircleCreature((int)random(width), (int)random(height), 20); @@ -33,6 +31,7 @@ void setup() { physics.add(t); physics.add(c); spring = physics.makeSpring(t, c); + spring.restlength(20); }