From 0137237dffbb4ffdfa3a995dd7daee5f1f15c982 Mon Sep 17 00:00:00 2001 From: Mark Slee Date: Fri, 11 Oct 2013 18:48:54 -0700 Subject: [PATCH] New pulley animation --- MarkSlee.pde | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++ SugarCubes.pde | 1 + 2 files changed, 77 insertions(+) diff --git a/MarkSlee.pde b/MarkSlee.pde index ee686b7..c6d9eae 100644 --- a/MarkSlee.pde +++ b/MarkSlee.pde @@ -1,3 +1,79 @@ +class Pulley extends SCPattern { + + final int NUM_DIVISIONS = 16; + private final Accelerator[] gravity = new Accelerator[NUM_DIVISIONS]; + private final Click[] delays = new Click[NUM_DIVISIONS]; + + private final Click reset = new Click(9000); + private boolean isRising = false; + + Pulley(GLucose glucose) { + super(glucose); + for (int i = 0; i < NUM_DIVISIONS; ++i) { + addModulator(gravity[i] = new Accelerator(0, 0, 0)); + addModulator(delays[i] = new Click(0)); + } + addModulator(reset).start(); + trigger(); + } + + private void trigger() { + isRising = !isRising; + int i = 0; + for (Accelerator g : gravity) { + if (isRising) { + g.setSpeed(random(40, 50), 0).start(); + } else { + g.setVelocity(0).setAcceleration(-420); + delays[i].setDuration(random(0, 500)).trigger(); + } + ++i; + } + } + + public void run(double deltaMs) { + if (reset.click()) { + trigger(); + } + int j = 0; + for (Click d : delays) { + if (d.click()) { + gravity[j].start(); + d.stop(); + } + ++j; + } + + for (Accelerator g : gravity) { + if (isRising) { + if (g.getValuef() > model.yMax) { + g.stop(); + } else if (g.getValuef() > model.yMax*.55) { + if (g.getVelocityf() > 10) { + g.setAcceleration(-16); + } else { + g.setAcceleration(0); + } + } + } else { + if (g.getValuef() < 0) { + g.setValue(-g.getValuef()); + g.setVelocity(-g.getVelocityf() * random(0.74, 0.84)); + } + } + } + + for (Point p : model.points) { + int i = (int) constrain((p.x - model.xMin) * NUM_DIVISIONS / (model.xMax - model.xMin), 0, NUM_DIVISIONS-1); + colors[p.index] = color( + (lx.getBaseHuef() + abs(p.x - model.cx)*.8 + p.y*.4) % 360, + constrain(130 - p.y*.8, 0, 100), + max(0, 100 - abs(p.y - gravity[i].getValuef())*4.) + ); + } + } +} + class ViolinWave extends SCPattern { BasicParameter level = new BasicParameter("LVL", 0.45); diff --git a/SugarCubes.pde b/SugarCubes.pde index bf545b5..a551ca1 100644 --- a/SugarCubes.pde +++ b/SugarCubes.pde @@ -28,6 +28,7 @@ LXPattern[] patterns(GLucose glucose) { // Slee + new Pulley(glucose), new Swarm(glucose), new ViolinWave(glucose), new BouncyBalls(glucose), -- 2.34.1