From 87f6fa397be5aa98d1331b34f9819b997953536d Mon Sep 17 00:00:00 2001 From: Mark Slee Date: Tue, 28 May 2013 23:55:59 -0500 Subject: [PATCH] Update to use new form of referencing immutable model object lists --- MarkSlee.pde | 57 +++++++++++++++++++++++++++++++++++++---------- SugarCubes.pde | 15 +++++++------ TestPatterns.pde | 6 ++--- _Overlay.pde | 1 + code/GLucose.jar | Bin 12854 -> 13353 bytes 5 files changed, 57 insertions(+), 22 deletions(-) diff --git a/MarkSlee.pde b/MarkSlee.pde index 76d2aef..ef65b3f 100644 --- a/MarkSlee.pde +++ b/MarkSlee.pde @@ -28,14 +28,14 @@ class SpaceTime extends SCPattern { void run(int deltaMs) { angle += deltaMs * 0.0007; - float sVal1 = Strip.list.size() * (0.5 + 0.5*sin(angle)); - float sVal2 = Strip.list.size() * (0.5 + 0.5*cos(angle)); + float sVal1 = model.strips.size() * (0.5 + 0.5*sin(angle)); + float sVal2 = model.strips.size() * (0.5 + 0.5*cos(angle)); float pVal = pos.getValuef(); float fVal = falloff.getValuef(); int s = 0; - for (Strip strip : Strip.list) { + for (Strip strip : model.strips) { int i = 0; for (Point p : strip.points) { colors[p.index] = color( @@ -83,7 +83,7 @@ class Swarm extends SCPattern { void run(int deltaMs) { float s = 0; - for (Strip strip : Strip.list) { + for (Strip strip : model.strips) { int i = 0; for (Point p : strip.points) { float fV = max(-1, 1 - dist(p.fx/2., p.fy, fX.getValuef()/2., fY.getValuef()) / 64.); @@ -112,7 +112,7 @@ class SwipeTransition extends SCTransition { void computeBlend(int[] c1, int[] c2, double progress) { float bleedf = 10 + bleed.getValuef() * 200.; float xPos = (float) (-bleedf + progress * (255. + bleedf)); - for (Point p : Point.list) { + for (Point p : model.points) { float d = (p.fx - xPos) / bleedf; if (d < 0) { colors[p.index] = c2[p.index]; @@ -184,7 +184,7 @@ class CubeEQ extends SCPattern { float jConst = 300.*(1-range.getValuef()); float clrConst = 1.1 + clr.getValuef(); - for (Point p : Point.list) { + for (Point p : model.points) { float avgIndex = constrain((p.fx / 256. * avgSize), 0, avgSize-2); int avgFloor = (int) avgIndex; float j = jBase + jConst * (p.fy / 128.); @@ -231,7 +231,7 @@ class BoomEffect extends SCEffect { float falloffv = falloffv(); float satv = sat.getValuef() * 100; float huev = lx.getBaseHuef(); - for (Point p : Point.list) { + for (Point p : model.points) { colors[p.index] = blendColor( colors[p.index], color(huev, satv, constrain(brightv - falloffv*abs(boom.getValuef() - dist(p.fx, 2*p.fy, 2*p.fz, 128, 128, 128)), 0, 100)), @@ -293,11 +293,11 @@ public class PianoKeyPattern extends SCPattern { addParameter(attack); addParameter(release); addParameter(level); - cubeBrt = new LinearEnvelope[Cube.list.size() / 4]; + cubeBrt = new LinearEnvelope[model.cubes.size() / 4]; for (int i = 0; i < cubeBrt.length; ++i) { addModulator(cubeBrt[i] = new LinearEnvelope(0, 0, 100)); } - base = new SinLFO[Cube.list.size() / 12]; + base = new SinLFO[model.cubes.size() / 12]; for (int i = 0; i < base.length; ++i) { addModulator(base[i] = new SinLFO(0, 1, 7000 + 1000*i)).trigger(); } @@ -332,7 +332,7 @@ public class PianoKeyPattern extends SCPattern { int i = 0; float huef = lx.getBaseHuef(); float levelf = level.getValuef(); - for (Cube c : Cube.list) { + for (Cube c : model.cubes) { float v = max(getBase(i).getValuef() * levelf/4., getEnvelope(i++).getValuef()); setColor(c, color( (huef + 20*v + abs(c.fx-128.)*.3 + c.fy) % 360, @@ -398,7 +398,7 @@ class CrossSections extends SCPattern { float ywv = 100. / (10 + 40*yw.getValuef()); float zwv = 100. / (10 + 40*zw.getValuef()); - for (Point p : Point.list) { + for (Point p : model.points) { color c = 0; c = blendColor(c, color( (lx.getBaseHuef() + p.fx/10 + p.fy/3) % 360, @@ -442,7 +442,7 @@ class Blinders extends SCPattern { public void run(int deltaMs) { float hv = lx.getBaseHuef(); int si = 0; - for (Strip strip : Strip.list) { + for (Strip strip : model.strips) { int i = 0; float mv = m[si % m.length].getValuef(); for (Point p : strip.points) { @@ -458,4 +458,37 @@ class Blinders extends SCPattern { } } +class Psychedelia extends SCPattern { + + final int NUM = 3; + SinLFO m = new SinLFO(-0.5, NUM-0.5, 9000); + SinLFO s = new SinLFO(-20, 147, 11000); + TriangleLFO h = new TriangleLFO(0, 240, 19000); + SinLFO c = new SinLFO(-.2, .8, 31000); + + Psychedelia(GLucose glucose) { + super(glucose); + addModulator(m).trigger(); + addModulator(s).trigger(); + addModulator(h).trigger(); + addModulator(c).trigger(); + } + void run(int deltaMs) { + float huev = h.getValuef(); + float cv = c.getValuef(); + float sv = s.getValuef(); + float mv = m.getValuef(); + int i = 0; + for (Strip strip : model.strips) { + for (Point p : strip.points) { + colors[p.index] = color( + (huev + i*constrain(cv, 0, 2) + p.fz/2. + p.fx/4.) % 360, + min(100, abs(p.fy-sv)), + max(0, 100 - 50*abs((i%NUM) - mv)) + ); + } + ++i; + } + } +} diff --git a/SugarCubes.pde b/SugarCubes.pde index ed2cf6d..67b1538 100644 --- a/SugarCubes.pde +++ b/SugarCubes.pde @@ -25,18 +25,19 @@ LXPattern[] patterns(GLucose glucose) { return new LXPattern[] { -// new Swarm(glucose), -// new SpaceTime(glucose), -// new Blinders(glucose), -// new CrossSections(glucose), -// new CubeEQ(glucose), -// new PianoKeyPattern(glucose), + new Swarm(glucose), + new SpaceTime(glucose), + new Blinders(glucose), + new CrossSections(glucose), + new Psychedelia(glucose), + new CubeEQ(glucose), + new PianoKeyPattern(glucose), // Basic test patterns for reference, not art // new TestHuePattern(glucose), // new TestXPattern(glucose), // new TestYPattern(glucose), - new TestZPattern(glucose), +// new TestZPattern(glucose), }; } diff --git a/TestPatterns.pde b/TestPatterns.pde index 04c2c73..e7b30f9 100644 --- a/TestPatterns.pde +++ b/TestPatterns.pde @@ -16,7 +16,7 @@ class TestXPattern extends SCPattern { addModulator(xPos).trigger(); } public void run(int deltaMs) { - for (Point p : Point.list) { + for (Point p : model.points) { colors[p.index] = color( lx.getBaseHuef(), 100, @@ -33,7 +33,7 @@ class TestYPattern extends SCPattern { addModulator(yPos).trigger(); } public void run(int deltaMs) { - for (Point p : Point.list) { + for (Point p : model.points) { colors[p.index] = color( lx.getBaseHuef(), 100, @@ -50,7 +50,7 @@ class TestZPattern extends SCPattern { addModulator(zPos).trigger(); } public void run(int deltaMs) { - for (Point p : Point.list) { + for (Point p : model.points) { colors[p.index] = color( lx.getBaseHuef(), 100, diff --git a/_Overlay.pde b/_Overlay.pde index 6d3266a..5bd90d3 100644 --- a/_Overlay.pde +++ b/_Overlay.pde @@ -257,6 +257,7 @@ class OverlayUI { } ellipseMode(CENTER); + noStroke(); fill(#222222); // For some reason this arc call really crushes drawing performance. Presumably // because openGL is drawing it and when we overlap the second set of arcs it diff --git a/code/GLucose.jar b/code/GLucose.jar index 13bc6cfbe03b53a550b90e4a01762d0d22d230a1..9f90cbd8f3aa1d63fdb6679fb0b35e80c97f852b 100644 GIT binary patch delta 10941 zcmZ8{WmH|uvNi7R?(Po3-QC^Y9fECiZ;jkU1N`;t^^H(1Ob5n0WtO^6@?M%>z7piWT-#=aZ0GsFR2$af1V&r zNS41K2Fd&voFSS1`;rLM3W@c%`xTP?FFZohqmF&)lT<>d4vB<@fT#j7Ly-Yqw3fs% z-jnbafl^4NG1X5an&}L2=wK7vI*nSL@-I?>ndb7AX}^BeEr)TPCmhbbYa|6K#8Fgm z&+J@>bbac2*?xQf`9>e=@x+*~#~C@n^I)Mk7{$YOkQP40l-5m^sE2E;l`3n>w2HeW z4?4A_uk=uYm6OPIoBBqY(RmK=^wA5sX3S1~iF4Q*gNCKW{lt+oB*jQRF;^cqmaV0( z3yze?`TV0;JG*CWzK)&f24#lpGFKN#c&Sl^)BBio6CFh;o43B#{EWkR6$^4W^g2LQ z=1FwFJ?;>(!JpTAp_12Wj5Sf+7 z-tRc;wbqU88!I&jXeL_}!z}G-c zmMU4h8P`Vj@C~(u0umv>1Sb$NNlIY4`Lm1`j_|QR@Dv4prC`7#%A~FRpxv$;*><#u zGT1Py#nhcdCbPBkvOv1;h(IFAaMe+kq{*Bi`?R{4X(9X&0r
}v}I=n$s*%!36B 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 delta 10480 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 PpEKxBSwj)?->d%zHvdEB -- 2.34.1