From: Jack Stahl Date: Sun, 24 Nov 2013 01:36:03 +0000 (-0800) Subject: Merge pull request #14 from vincentsiao/master X-Git-Url: https://git.piment-noir.org/?p=SugarCubes.git;a=commitdiff_plain;h=f56322be7738e82eb5d9e36fbd10d48e3ff492cd;hp=383da81651a0c519392f15e6beaaeb604dfcf74d Merge pull request #14 from vincentsiao/master Asana Thankshackathon / VSTowers --- diff --git a/JackieBavaro.pde b/JackieBavaro.pde new file mode 100644 index 0000000..fc1576a --- /dev/null +++ b/JackieBavaro.pde @@ -0,0 +1,265 @@ +class JackieSquares extends SCPattern { + private BasicParameter rateParameter = new BasicParameter("RATE", 0.25); + private BasicParameter attackParameter = new BasicParameter("ATTK", 0.3); + private BasicParameter decayParameter = new BasicParameter("DECAY", 0.2); + private BasicParameter saturationParameter = new BasicParameter("SAT", 0.7); + + SinLFO hueMod = new SinLFO(0, 360, 4000); + SinLFO spreadMod = new SinLFO(1, 10, 8000); + + + class FaceFlash { + Face f; + float value; + float hue; + boolean hasPeaked; + + FaceFlash(int n) { + f = model.faces.get(n % model.faces.size()); + hue = random(360); + boolean infiniteAttack = (attackParameter.getValuef() > 0.999); + hasPeaked = infiniteAttack; + value = (infiniteAttack ? 1 : 0); + } + + // returns TRUE if this should die + boolean age(double ms) { + if (!hasPeaked) { + value = value + (float) (ms / 1000.0f * ((attackParameter.getValuef() + 0.01) * 5)); + if (value >= 1.0) { + value = 1.0; + hasPeaked = true; + } + return false; + } else { + value = value - (float) (ms / 1000.0f * ((decayParameter.getValuef() + 0.01) * 10)); + return value <= 0; + } + } + } + + private float leftoverMs = 0; + private List flashes; + private int faceNum = 0; + + public JackieSquares(GLucose glucose) { + super(glucose); + addParameter(rateParameter); + addParameter(attackParameter); + addParameter(decayParameter); + addParameter(saturationParameter); + addModulator(hueMod).trigger(); + addModulator(spreadMod).trigger(); + + flashes = new LinkedList(); + } + + public void run(double deltaMs) { + leftoverMs += deltaMs; + float msPerFlash = 1000 / ((rateParameter.getValuef() + .01) * 100); + while (leftoverMs > msPerFlash) { + leftoverMs -= msPerFlash; + faceNum += int(spreadMod.getValuef()); + flashes.add(new FaceFlash(faceNum)); + } + + for (LXPoint p : model.points) { + colors[p.index] = 0; + } + + for (FaceFlash flash : flashes) { + float hue = (hueMod.getValuef() + flash.hue) % 360.0; + color c = lx.hsb(hue, saturationParameter.getValuef() * 100, (flash.value) * 100); + for (LXPoint p : flash.f.points) { + colors[p.index] = c; + } + } + + Iterator i = flashes.iterator(); + while (i.hasNext()) { + FaceFlash flash = i.next(); + boolean dead = flash.age(deltaMs); + if (dead) { + i.remove(); + } + } + } +} + + +class JackieLines extends SCPattern { + private BasicParameter rateParameter = new BasicParameter("RATE", 0.25); + private BasicParameter attackParameter = new BasicParameter("ATTK", 0.3); + private BasicParameter decayParameter = new BasicParameter("DECAY", 0.2); + private BasicParameter saturationParameter = new BasicParameter("SAT", 0.7); + + SinLFO hueMod = new SinLFO(0, 360, 4000); + SinLFO spreadMod = new SinLFO(1, 10, 8000); + + + class StripFlash { + Strip f; + float value; + float hue; + boolean hasPeaked; + + StripFlash(int n) { + f = model.strips.get(n % model.strips.size()); + hue = random(360); + boolean infiniteAttack = (attackParameter.getValuef() > 0.999); + hasPeaked = infiniteAttack; + value = (infiniteAttack ? 1 : 0); + } + + // returns TRUE if this should die + boolean age(double ms) { + if (!hasPeaked) { + value = value + (float) (ms / 1000.0f * ((attackParameter.getValuef() + 0.01) * 5)); + if (value >= 1.0) { + value = 1.0; + hasPeaked = true; + } + return false; + } else { + value = value - (float) (ms / 1000.0f * ((decayParameter.getValuef() + 0.01) * 10)); + return value <= 0; + } + } + } + + private float leftoverMs = 0; + private List flashes; + private int stripNum = 0; + + public JackieLines(GLucose glucose) { + super(glucose); + addParameter(rateParameter); + addParameter(attackParameter); + addParameter(decayParameter); + addParameter(saturationParameter); + addModulator(hueMod).trigger(); + addModulator(spreadMod).trigger(); + + flashes = new LinkedList(); + } + + public void run(double deltaMs) { + leftoverMs += deltaMs; + float msPerFlash = 1000 / ((rateParameter.getValuef() + .01) * 100); + while (leftoverMs > msPerFlash) { + leftoverMs -= msPerFlash; + stripNum += int(spreadMod.getValuef()); + flashes.add(new StripFlash(stripNum)); + } + + for (LXPoint p : model.points) { + colors[p.index] = 0; + } + + for (StripFlash flash : flashes) { + float hue = (hueMod.getValuef() + flash.hue) % 360.0; + color c = lx.hsb(hue, saturationParameter.getValuef() * 100, (flash.value) * 100); + for (LXPoint p : flash.f.points) { + colors[p.index] = c; + } + } + + Iterator i = flashes.iterator(); + while (i.hasNext()) { + StripFlash flash = i.next(); + boolean dead = flash.age(deltaMs); + if (dead) { + i.remove(); + } + } + } +} + + + +class JackieDots extends SCPattern { + private BasicParameter rateParameter = new BasicParameter("RATE", 0.15); + private BasicParameter attackParameter = new BasicParameter("ATTK", 0.3); + private BasicParameter decayParameter = new BasicParameter("DECAY", 0.2); + private BasicParameter saturationParameter = new BasicParameter("SAT", 0.7); + + SinLFO hueMod = new SinLFO(0, 360, 4000); + SinLFO spreadMod = new SinLFO(1, 10, 16000); + + + class PointFlash { + LXPoint f; + float value; + float hue; + boolean hasPeaked; + + PointFlash(int n) { + f = model.points.get(n % model.points.size()); + hue = random(360); + boolean infiniteAttack = (attackParameter.getValuef() > 0.999); + hasPeaked = infiniteAttack; + value = (infiniteAttack ? 1 : 0); + } + + // returns TRUE if this should die + boolean age(double ms) { + if (!hasPeaked) { + value = value + (float) (ms / 1000.0f * ((attackParameter.getValuef() + 0.01) * 5)); + if (value >= 1.0) { + value = 1.0; + hasPeaked = true; + } + return false; + } else { + value = value - (float) (ms / 1000.0f * ((decayParameter.getValuef() + 0.01) * 10)); + return value <= 0; + } + } + } + + private float leftoverMs = 0; + private List flashes; + private int pointNum = 0; + + public JackieDots(GLucose glucose) { + super(glucose); + addParameter(rateParameter); + addParameter(attackParameter); + addParameter(decayParameter); + addParameter(saturationParameter); + addModulator(hueMod).trigger(); + addModulator(spreadMod).trigger(); + + flashes = new LinkedList(); + } + + public void run(double deltaMs) { + leftoverMs += deltaMs; + float msPerFlash = 1000 / ((rateParameter.getValuef() + .01) * 5000); + while (leftoverMs > msPerFlash) { + leftoverMs -= msPerFlash; + pointNum += int(spreadMod.getValuef()); + flashes.add(new PointFlash(pointNum)); + } + + for (LXPoint p : model.points) { + colors[p.index] = 0; + } + + for (PointFlash flash : flashes) { + float hue = (hueMod.getValuef() + flash.hue) % 360.0; + color c = lx.hsb(hue, saturationParameter.getValuef() * 100, (flash.value) * 100); + colors[flash.f.index] = c; + } + + Iterator i = flashes.iterator(); + while (i.hasNext()) { + PointFlash flash = i.next(); + boolean dead = flash.age(deltaMs); + if (dead) { + i.remove(); + } + } + } +} + diff --git a/SugarCubes.pde b/SugarCubes.pde index 6651e18..88f229a 100644 --- a/SugarCubes.pde +++ b/SugarCubes.pde @@ -65,6 +65,11 @@ LXPattern[] patterns(GLucose glucose) { // new TimTrace(glucose), new TimSpheres(glucose), + // Jackie + new JackieSquares(glucose), + new JackieLines(glucose), + new JackieDots(glucose), + // Vincent