compositor for 2d glitch effects
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

secondapplet.pde 8.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. //contains the GUI (ie CP5) in the secondapplet. also contains 3 classes: shaderManager, Brick and Slider
  2. PImage bin;
  3. public class SecondApplet extends PApplet {
  4. ControlP5 cp5;
  5. shaderManager shaderManager = new shaderManager();
  6. ArrayList<Shader> shaderList = new ArrayList<Shader>();
  7. ArrayList<Brick> bricks = new ArrayList<Brick>();
  8. ArrayList<Slider> slider = new ArrayList<Slider>(); //brick
  9. public void settings() {
  10. size(275, 500);
  11. }
  12. public void setup() {
  13. surface.setLocation(285, 240);
  14. List l = Arrays.asList(availableFx);
  15. cp5 = new ControlP5(this);
  16. cp5.addScrollableList("")
  17. .setPosition(10, height-110)
  18. .setSize(80, 100)
  19. .setBarHeight(0)
  20. .setItemHeight(20)
  21. .plugTo(this, "CP5_listActions")
  22. .addItems(l)
  23. .setType(ControlP5.LIST);
  24. cp5.addToggle("rec")
  25. .setPosition(100, height-50)
  26. .setSize(20,20)
  27. .plugTo(this, "CP5_recordAction");
  28. }
  29. void CP5_recordAction(){
  30. recording = !recording;
  31. }
  32. public void draw() {
  33. background(68, 68, 68);
  34. image(bin, width-55, height-85, 40, 40);
  35. stroke(255);
  36. strokeWeight(1);
  37. line(0, height-120, width, height-120);
  38. for (int i = 0; i < shaderList.size(); i++) {
  39. bricks.get(i).update();
  40. bricks.get(i).display();
  41. }
  42. }
  43. class shaderManager {
  44. void addShader(Shader shader) {
  45. shaderList.add(shader);
  46. shader.pos = shaderList.size()-1;
  47. bricks.add(new Brick(shaderList.size()-1, shaderList.get(shaderList.size()-1).params));
  48. println("Added " + shader + " to fxList at spot. List length: " + shaderList.size());
  49. }
  50. void swapShader(int pos1, int pos2) {
  51. if (pos1 >= 0 && pos2 < shaderList.size()) {
  52. Collections.swap(shaderList, pos1, pos2);
  53. Collections.swap(bricks, pos1, pos2);
  54. shaderList.get(pos1).pos = pos1;
  55. shaderList.get(pos2).pos = pos2;
  56. bricks.get(pos1).pos = pos1;
  57. bricks.get(pos2).pos = pos2;
  58. }
  59. }
  60. void removeShader(int pos) {
  61. if (pos >= 0 && shaderList.size() > pos) {
  62. shaderList.remove(pos);
  63. bricks.remove(pos);
  64. for (int i = shaderList.size()-1; i > -1; i--) {
  65. bricks.get(i).pos = i;
  66. shaderList.get(i).pos = i;
  67. }
  68. }
  69. }
  70. void applyShader() {
  71. for (int i = 0; i < shaderList.size(); i++) {
  72. shaderList.get(i).getValuesFromGUI();
  73. shaderList.get(i).apply();
  74. if (i > maxFx) break;
  75. }
  76. }
  77. }
  78. class Brick {
  79. ArrayList<Slider> slider = new ArrayList<Slider>();
  80. ArrayList<Param> params = new ArrayList<Param>();
  81. int pos;
  82. Brick(int pos_, ArrayList params_) {
  83. pos = pos_;
  84. params = params_;
  85. for (int i = 0; i < params.size(); i++) {
  86. slider.add(new Slider(10, 10+20*i+pos*75, 230, 12, params.get(i).minValue, params.get(i).maxValue, params.get(i).name, params.get(i).type, params.get(i).osciModes)); //add possible waves to slider
  87. }
  88. }
  89. void exchangeSlider(int sliderNo, Param param) {
  90. slider.get(sliderNo).setMinMax(param.minValue, param.maxValue);
  91. slider.get(sliderNo).setMode(param.type);
  92. slider.get(sliderNo).setLabel(param.name);
  93. }
  94. void update() {
  95. for (int i = 0; i < slider.size(); i++) {
  96. slider.get(i).update();
  97. params.get(i).value = slider.get(i).value;
  98. }
  99. }
  100. void display() {
  101. for (int i = 0; i < slider.size(); i++) {
  102. slider.get(i).display();
  103. }
  104. }
  105. }
  106. int pressedSlider = -1;
  107. class Slider {
  108. int x, y, w, h, mode;
  109. int[] osciModes;
  110. float minVal, maxVal, value; //should be private but doesnt work lol
  111. boolean hovering, hovering_anim_btn, animated, randomized;
  112. String label;
  113. Oscillator osci;
  114. Slider(int x_, int y_, int w_, int h_, float minVal_, float maxVal_, String label_, int mode_, int[] osciModes_) {
  115. x = x_;
  116. y = y_;
  117. w = w_;
  118. h = h_;
  119. minVal = minVal_;
  120. maxVal = maxVal_;
  121. mode = mode_;
  122. label = label_ + (mode == INTVAL ? " (INT)" : " (FLOAT)");
  123. osciModes = osciModes_;
  124. osci = new Oscillator(int(random(2, 20)), osciModes);
  125. osci.amplitude(minVal, maxVal);
  126. animated = true;
  127. randomized = true;
  128. slider.add(this);
  129. }
  130. void setPosX(int x_) {
  131. x = x_;
  132. }
  133. void setMinMax(float min, float max) {
  134. float cval = map(value, minVal, maxVal, 0, 10000);
  135. minVal = min;
  136. maxVal = max;
  137. osci.amplitude(minVal, maxVal);
  138. setValue(map(cval, 0, 10000, minVal, maxVal));
  139. }
  140. void setLabel(String lab) {
  141. label = lab + (mode == INTVAL ? " (INT)" : " (FLOAT)");
  142. }
  143. void setMode(int mode_) {
  144. mode = mode_;
  145. }
  146. void press(int myId_) {
  147. pressedSlider = myId_;
  148. animated = false;
  149. setValue(map(mouseX, x, x+w, minVal, maxVal));
  150. }
  151. void setValue(float value_) {
  152. value = value_;
  153. value = constrain(value, minVal, maxVal);
  154. if (mode == INTVAL) value = int(round(value));
  155. }
  156. float getValue() {
  157. return(value);
  158. }
  159. void update() {
  160. osci.update();
  161. if (animated) {
  162. setValue(osci.value);
  163. }
  164. if (mouseX >= x && mouseX <= x+w && mouseY >= y && mouseY <= y+h) {
  165. hovering = true;
  166. } else {
  167. hovering = false;
  168. }
  169. if (mouseX >= x+w+5 && mouseX <= x+w+5+15 && mouseY >= y && mouseY <= y+h) {
  170. hovering_anim_btn = true;
  171. } else {
  172. hovering_anim_btn = false;
  173. }
  174. }
  175. void display() {
  176. fill(100+(40*int(hovering)));
  177. rect(x, y, w, h);
  178. fill(185+(40*int(hovering)));
  179. rect(x, y, map(value, minVal, maxVal, 0, w), h);
  180. fill(255);
  181. text(label, x+5, y+10, 10);
  182. if (animated) {
  183. fill(185+(40*int(hovering_anim_btn)));
  184. } else {
  185. fill(100+(40*int(hovering_anim_btn)));
  186. }
  187. rect(x+w+5, y, 15, 15);
  188. }
  189. }
  190. //CP5
  191. void CP5_listActions(int n) {
  192. if (shaderList.size() < maxFx) {
  193. switch(n) {
  194. case(0):
  195. shaderManager.addShader(new ASDFPIXELSORT());
  196. break;
  197. case(1):
  198. shaderManager.addShader(new DISTORTER());
  199. break;
  200. /*
  201. case(2):
  202. shaderManager.addShader(new WAHWAH());
  203. break;
  204. case(3):
  205. shaderManager.addShader(new AUECHO());
  206. break;
  207. case(4):
  208. shaderManager.addShader(new PHASER());
  209. break;
  210. case(0):
  211. shaderManager.addShader(new WZIP());
  212. break;
  213. case(0):
  214. shaderManager.addShader(new DARKER());
  215. break;
  216. case(0):
  217. shaderManager.addShader(new BRIGHTER());
  218. break;
  219. case(0):
  220. shaderManager.addShader(new MOVE());
  221. break;
  222. case(0):
  223. shaderManager.addShader(new SCALE());
  224. break;
  225. case(0):
  226. shaderManager.addShader(new EPILEPSY());
  227. break;
  228. case(0):
  229. shaderManager.addShader(new POSTERIZE());
  230. break;
  231. case(0):
  232. shaderManager.addShader(new COPYZOOM());
  233. break;
  234. case(0):
  235. shaderManager.addShader(new DUAL());
  236. break;
  237. case(0):
  238. shaderManager.addShader(new SCANKER());
  239. break;
  240. case(0):
  241. shaderManager.addShader(new PIXELSORT());
  242. break;
  243. case(0):
  244. shaderManager.addShader(new HSB());
  245. break;
  246. case(0):
  247. shaderManager.addShader(new ECHO());
  248. break;
  249. case(0):
  250. shaderManager.addShader(new SUBTLESORT());
  251. break;
  252. case(0):
  253. shaderManager.addShader(new BLACKWHITE());
  254. break;
  255. case(0):
  256. shaderManager.addShader(new DRAWGENERATIVE());
  257. break;
  258. case(0):
  259. shaderManager.addShader(new DRAWSTROKES());
  260. break;
  261. case(0):
  262. shaderManager.addShader(new FM());
  263. break;
  264. case(0):
  265. shaderManager.addShader(new GRAUZONE());
  266. break;
  267. case(0):
  268. shaderManager.addShader(new SLITSCAN());
  269. break;
  270. */
  271. default:
  272. break;
  273. }
  274. }
  275. }
  276. void mousePressed() {
  277. for (int i = slider.size()-1; i >= 0; i--) {
  278. Slider s = slider.get(i);
  279. if (s.hovering) s.press(i);
  280. if (s.hovering_anim_btn) s.animated = !s.animated;
  281. }
  282. }
  283. void mouseDragged() {
  284. if (pressedSlider != -1) {
  285. Slider s = slider.get(pressedSlider);
  286. s.setValue(map(mouseX, s.x, s.x+s.w, s.minVal, s.maxVal));
  287. }
  288. }
  289. void mouseReleased() {
  290. pressedSlider = -1;
  291. }
  292. }