From 0b8db891d1df53c6ac814986ed184e8c794b6169 Mon Sep 17 00:00:00 2001 From: Mark Slee Date: Wed, 13 Nov 2013 03:15:30 -0800 Subject: [PATCH] New GLucose, simpler packaging --- DanKaminsky.pde | 12 ++++++------ _Internals.pde | 4 ---- code/GLucose.jar | Bin 26737 -> 24044 bytes 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/DanKaminsky.pde b/DanKaminsky.pde index f16c0bd..8e236a2 100644 --- a/DanKaminsky.pde +++ b/DanKaminsky.pde @@ -3,15 +3,15 @@ class GenericController { public void RotateKnob(int type, int num, float val){ LXParameter p = null; if(type==0) { - p = glucose.patternKnobs.get(num); + p = glucose.getPattern().getParameters().get(num); if(p!=null) { p.setValue(val); } } if(type==1) { - p = glucose.transitionKnobs.get(num); + p = glucose.getSelectedTransition().getParameters().get(num); if(p!=null) { p.setValue(val); } } if(type==2) { - p = glucose.effectKnobs.get(num); + p = glucose.getSelectedEffect().getParameters().get(num); if(p!=null) { p.setValue(val); } } } @@ -38,9 +38,9 @@ OscP5 listener; // } // if(cc.getCC()==1){ // for(int i=0; i<16; i++){ -// if(noteState[i] && i<8) { LXParameter p = glucose.patternKnobs.get(i); p.setValue(cc.getValue()/127.0); } -// else if(noteState[i] && i<12) { LXParameter p = glucose.transitionKnobs.get(i-8); p.setValue(cc.getValue()/127.0); } -// else if(noteState[i] && i<16) { LXParameter p = glucose.effectKnobs.get(i-12); p.setValue(cc.getValue()/127.0); } +// if(noteState[i] && i<8) { LXParameter p = glucose.getPattern().getParameters().get(i); p.setValue(cc.getValue()/127.0); } +// else if(noteState[i] && i<12) { LXParameter p = glucose.getSelectedTransition().getParameters().get(i-8); p.setValue(cc.getValue()/127.0); } +// else if(noteState[i] && i<16) { LXParameter p = glucose.getSelectedEffect().getParameters().get(i-12); p.setValue(cc.getValue()/127.0); } // } // } //} diff --git a/_Internals.pde b/_Internals.pde index 847eeb6..c27a75b 100644 --- a/_Internals.pde +++ b/_Internals.pde @@ -14,11 +14,7 @@ */ import glucose.*; -import glucose.control.*; -import glucose.effect.*; import glucose.model.*; -import glucose.pattern.*; -import glucose.transition.*; import heronarts.lx.*; import heronarts.lx.control.*; import heronarts.lx.effect.*; diff --git a/code/GLucose.jar b/code/GLucose.jar index 2321e338d7c71738848af9a13f223c60b1f211d5..ec6fa48643e7fb37c223e208c2633742e0c9f9d7 100755 GIT binary patch delta 4451 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 delta 7173 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 -- 2.34.1