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 20KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752
  1. //contains the GUI (ie CP5) in the secondapplet. also contains 3 classes: shaderManager, Brick and Slider
  2. /* todo: implement "solo" and "only up till here" button on bricks */
  3. PImage bin;
  4. int maxSurfaceHeight = 500;
  5. int nativeResoX, nativeResoY;
  6. boolean renderSizeChanged = true;
  7. public class SecondApplet extends PApplet {
  8. ControlP5 cp5;
  9. shaderManager shaderManager = new shaderManager();
  10. ArrayList<Shader> shaderList = new ArrayList<Shader>();
  11. ArrayList<Brick> bricks = new ArrayList<Brick>();
  12. ArrayList<Slider> slider = new ArrayList<Slider>(); //brick
  13. int binX, binY, binS;
  14. //PApplet parent;
  15. /*SecondApplet(PApplet _parent){
  16. super();
  17. this.parent = _parent;
  18. }*/
  19. public void settings() {
  20. size(275, 120);
  21. }
  22. Toggle webcam, auto;
  23. public void setup() {
  24. surface.setLocation(285, 240);
  25. //List l = Arrays.asList(availableFx);
  26. List l = Arrays.asList(FX);
  27. cp5 = new ControlP5(this);
  28. cp5.addScrollableList("")
  29. .setPosition(10, height-110)
  30. .setSize(80, 100)
  31. .setBarHeight(0)
  32. .setItemHeight(20)
  33. .plugTo(this, "CP5_listActions")
  34. .addItems(l)
  35. .setType(ControlP5.LIST);
  36. Toggle rec = cp5.addToggle("record")
  37. .setPosition(100, height-110)
  38. .setSize(12, 12)
  39. .plugTo(this, "CP5_recordAction");
  40. rec.getCaptionLabel().getStyle().setMargin(-17, 0, 0, 20);
  41. auto = cp5.addToggle("spawn playing")
  42. .setPosition(100, height-95)
  43. .setSize(12, 12)
  44. .setValue(false)
  45. .plugTo(this, "CP5_spawnPlayingAction");
  46. auto.getCaptionLabel().getStyle().setMargin(-17, 0, 0, 20);
  47. Bang pauseAll = cp5.addBang("pause all")
  48. .setPosition(100, height-80)
  49. .setSize(12, 12)
  50. .plugTo(this, "CP5_pauseAllAction");
  51. pauseAll.getCaptionLabel().getStyle().setMargin(-17, 0, 0, 20);
  52. webcam = cp5.addToggle("webcam")
  53. .setPosition(100, height-65)
  54. .setSize(12, 12)
  55. .setValue(false)
  56. .plugTo(this, "CP5_webcamAction");
  57. webcam.getCaptionLabel().getStyle().setMargin(-17, 0, 0, 20);
  58. Toggle robot = cp5.addToggle("autoPlay")
  59. .setPosition(100, height-50)
  60. .setSize(12, 12)
  61. .setValue(false)
  62. .plugTo(this, "CP5_robotAction");
  63. robot.getCaptionLabel().getStyle().setMargin(-17, 0, 0, 20);
  64. Bang nativeReso = cp5.addBang("native reso")
  65. .setPosition(220, height-35)
  66. .setSize(12, 12)
  67. .plugTo(this, "CP5_nativeResoAction");
  68. nativeReso.getCaptionLabel().getStyle().setMargin(-17, 0, 0, 20);
  69. /*
  70. Toggle saveParams = cp5.addToggle("save parameters")
  71. .setPosition(100, height-45)
  72. .setSize(15, 15)
  73. .plugTo(this, "CP5_saveParamsAction");
  74. saveParams.getCaptionLabel().getStyle().setMargin(-17,0,0,20);
  75. */
  76. binX = width-55;
  77. binY = height-85;
  78. binS = 40;
  79. }
  80. void CP5_robotAction()  {
  81. startRobot = true;
  82. autoPlay = !autoPlay;
  83. }
  84. void CP5_webcamAction()  {
  85. webcamMode = !webcamMode;
  86. if (webcamMode) sourceManager.startWebcam();
  87. else {
  88. sourceManager.stopWebcam();
  89. source = null;
  90. }
  91. }
  92. void CP5_nativeResoAction() {
  93. renderSize = max(nativeResoX, nativeResoY);
  94. //renderer.setSize(nativeResoX, nativeResoY);
  95. }
  96. void CP5_recordAction() {
  97. recording = !recording;
  98. }
  99. void CP5_spawnPlayingAction() {
  100. spawnPlaying = !spawnPlaying;
  101. }
  102. void CP5_pauseAllAction() {
  103. for (int i = 0; i < bricks.size(); i++) {
  104. if (!bricks.get(i).paused) bricks.get(i).playPause();
  105. }
  106. }
  107. int totalBrickHeight;
  108. public void draw() {
  109. background(68, 68, 68);
  110. pushMatrix();
  111. if (heightOverLimit) {
  112. translate(0, scrollAmount);
  113. }
  114. totalBrickHeight = 0;
  115. for (int i = 0; i < bricks.size(); i++) {
  116. bricks.get(i).update();
  117. bricks.get(i).display();
  118. //bricks.get(i).y = totalBrickHeight; ????? what was that for
  119. totalBrickHeight+= bricks.get(i).h;
  120. }
  121. popMatrix();
  122. if (heightOverLimit) {
  123. strokeWeight(3);
  124. fill(255);
  125. line(width-5, -scrollAmount+4, width-5, height-120+(maxSurfaceHeight-120-totalBrickHeight)-scrollAmount-4);
  126. //-scrollAmount + (-1*(maxSurfaceHeight-120-totalBrickHeight)));
  127. }
  128. fill(68, 68, 68);
  129. noStroke();
  130. rect(0, height-120, width, 120);
  131. image(bin, binX, binY, binS, binS);
  132. stroke(255);
  133. strokeWeight(1);
  134. textSize(25);
  135. fill(255);
  136. text(renderer.width + "x" + renderer.height, 100, height-15);
  137. if (typingNumber) {
  138. rect(100, height - 35, textWidth(str(renderer.width) + "x" + str(renderer.height)), 25);
  139. fill(0);
  140. text(newResoString, 100, height-15);
  141. fill(255);
  142. if (frameCount >= numberTypedFrame+90) {
  143. setTypedReso();
  144. }
  145. }
  146. textSize(10);
  147. line(0, height-120, width, height-120);
  148. if (pressedBrick != -1) {
  149. fill(255);
  150. noStroke();
  151. rect(mouseX, mouseY, 35, 15);
  152. }
  153. }
  154. boolean heightOverLimit;
  155. void refreshSurface(int mode) {
  156. int currentBrickHeight = 0;
  157. if (shaderList.size() > 0) {
  158. if (mode == 0) {
  159. currentBrickHeight = totalBrickHeight + bricks.get(shaderList.size()-1).h;
  160. surface.setSize(width, height+bricks.get(shaderList.size()-1).h);
  161. } else if (mode == 1) {
  162. currentBrickHeight = totalBrickHeight - bricks.get(pressedBrick).h;
  163. if (heightOverLimit) {
  164. surface.setSize(width, currentBrickHeight+120);
  165. } else {
  166. surface.setSize(width, height-bricks.get(pressedBrick).h);
  167. }
  168. }
  169. } else {
  170. surface.setSize(width, 120);
  171. }
  172. if (currentBrickHeight + 120 > maxSurfaceHeight) {
  173. surface.setSize(width, maxSurfaceHeight);
  174. heightOverLimit = true;
  175. } else {
  176. heightOverLimit = false;
  177. scrollAmount = 0;
  178. }
  179. cp5.setPosition(0, height-120);
  180. binY = height-87;
  181. }
  182. class shaderManager {
  183. void addShader(Shader shader) {
  184. shaderList.add(shader);
  185. shader.pos = shaderList.size()-1;
  186. bricks.add(new Brick(shaderList.size()-1, shaderList.get(shaderList.size()-1).params, shader.name));
  187. refreshSurface(0);
  188. //if (!spawnPlaying) bricks.get(shaderList.size()-1).pauseAllSliders();
  189. println("Added " + shader + " to fxList at spot. List length: " + shaderList.size());
  190. }
  191. void swapShader(int pos1, int pos2) {
  192. Collections.swap(shaderList, pos1, pos2);
  193. Collections.swap(bricks, pos1, pos2);
  194. shaderList.get(pos1).pos = pos1;
  195. shaderList.get(pos2).pos = pos2;
  196. bricks.get(pos1).setPos(pos1);
  197. bricks.get(pos2).setPos(pos2);
  198. for (int i = 0; i < bricks.size(); i++) {
  199. bricks.get(i).updateSliderPos();
  200. }
  201. for (int i = min(pos1, pos2); i < shaderList.size(); i++) {
  202. //println(i);
  203. //shaderList.get(i).change = true;
  204. }
  205. }
  206. void moveShader(int pos1, int pos2) {
  207. if (pos2 > pos1) {
  208. pos2 -=1;
  209. for (int i = pos1; i < pos2; i++) {
  210. swapShader(i, i+1);
  211. }
  212. } else {
  213. for (int i = pos1; i > pos2; i--) {
  214. swapShader(i, i-1);
  215. }
  216. }
  217. for (int i = max(pos1, pos2); i > 0; i--) {
  218. //println(i);
  219. //shaderList.get(i).change = true;
  220. }
  221. }
  222. void removeShader(int pos) {
  223. if (pos >= 0 && shaderList.size() > pos) {
  224. refreshSurface(1);
  225. shaderList.remove(pos);
  226. bricks.remove(pos);
  227. for (int i = shaderList.size()-1; i > -1; i--) {
  228. bricks.get(i).setPos(i);
  229. bricks.get(i).updateSliderPos();
  230. shaderList.get(i).pos = i;
  231. }
  232. }
  233. for (int i = pos; i < shaderList.size(); i++) {
  234. //shaderList.get(i).change = true;
  235. }
  236. }
  237. int previousRenderSize = renderSize;
  238. void applyShader() {
  239. renderSizeChanged = true;
  240. if (previousRenderSize != renderSize)
  241. previousRenderSize = renderSize;
  242. else
  243. renderSizeChanged = false;
  244. for (int i = 0; i < shaderList.size(); i++) {
  245. try {
  246. shaderList.get(i).getValuesFromGUI();
  247. if (bricks.get(i).active) {
  248. //shaderList.get(i).getValuesFromGUI();
  249. shaderList.get(i).shade();
  250. }
  251. }
  252. catch(Exception e) {
  253. println("Warning: Brick not yet loaded");
  254. }
  255. if (i > maxFx) break;
  256. }
  257. }
  258. }
  259. int pressedBrick = -1;
  260. class Brick {
  261. ArrayList<Slider> slider = new ArrayList<Slider>();
  262. ArrayList<Param> params = new ArrayList<Param>();
  263. boolean active, paused, dragging, dragHovering, hovering, hoveringLineAbove, hoveringLineBelow, hoverActiveButton, hoverPauseButton;
  264. boolean[] pauseStates;
  265. color brickBGcol;
  266. int pos;
  267. int h, y;
  268. String name;
  269. Brick(int pos_, ArrayList params_, String name_) {
  270. name = name_;
  271. pos = pos_;
  272. params = params_;
  273. active = true;
  274. y = totalBrickHeight;
  275. h = 20 + params.size() * 20;
  276. for (int i = 0; i < params.size(); i++) {
  277. slider.add(new Slider(10, 20+(20*i)+y, 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
  278. }
  279. pauseStates = new boolean[slider.size()];
  280. for (int i = 0; i < pauseStates.length; i++) {
  281. pauseStates[i] = false;
  282. }
  283. if (!spawnPlaying) {
  284. playPause();
  285. }
  286. }
  287. void setPos(int pos_) {
  288. pos = pos_;
  289. }
  290. void updateSliderPos() {
  291. y = 0;
  292. for (int i = 0; i < pos; i++) {
  293. y += bricks.get(i).h;
  294. }
  295. for (int i = 0; i < slider.size(); i++) {
  296. slider.get(i).y = 20+(20*i)+y;
  297. }
  298. }
  299. void exchangeSlider(int sliderNo, Param param) {
  300. slider.get(sliderNo).setMinMax(param.minValue, param.maxValue);
  301. slider.get(sliderNo).setMode(param.type);
  302. slider.get(sliderNo).setLabel(param.name);
  303. }
  304. void playPause() {
  305. paused = !paused;
  306. if (paused) {
  307. pauseAllSliders();
  308. } else {
  309. resumeAllSliders();
  310. }
  311. }
  312. void toggleActive() {
  313. active = !active;
  314. //for (int i = pos; i < shaderList.size(); i++) {
  315. // shaderList.get(i).change = true;
  316. //}
  317. }
  318. void pauseAllSliders() {
  319. for (int i = 0; i < slider.size(); i++) {
  320. pauseStates[i] = slider.get(i).animated;
  321. slider.get(i).animated = false;
  322. }
  323. }
  324. void resumeAllSliders() {
  325. for (int i = 0; i < slider.size(); i++) {
  326. slider.get(i).animated = pauseStates[i];
  327. }
  328. }
  329. void update() {
  330. boolean sliderHover = false;
  331. for (int i = 0; i < slider.size(); i++) {
  332. if (slider.get(i).hovering || slider.get(i).hovering_anim_btn) sliderHover = true;
  333. if (paused && slider.get(i).animated) paused = false;
  334. }
  335. if (mouseX > 10 && mouseX < 22 && mouseY > 4+totalBrickHeight+scrollAmount && mouseY < 4+totalBrickHeight+13+scrollAmount) {
  336. hoverActiveButton = true;
  337. } else {
  338. hoverActiveButton = false;
  339. }
  340. if (mouseX > 25 && mouseX < 37 && mouseY > 4+totalBrickHeight+scrollAmount && mouseY < 4+totalBrickHeight+13+scrollAmount) {
  341. hoverPauseButton = true;
  342. } else {
  343. hoverPauseButton = false;
  344. }
  345. if (mouseY > y-5+scrollAmount && mouseY < y+5+scrollAmount && pressedBrick != -1) {
  346. hoveringLineAbove = true;
  347. if (pos > 0) {
  348. bricks.get(pos-1).hovering = false;
  349. }
  350. } else if (pos == bricks.size()-1 && mouseY > y+h-5+scrollAmount && mouseY < y+h+5+scrollAmount && pressedBrick != -1) {
  351. hoveringLineBelow = true;
  352. } else {
  353. hoveringLineBelow = false;
  354. hoveringLineAbove = false;
  355. if (mouseY > totalBrickHeight+scrollAmount && mouseY < totalBrickHeight+h+scrollAmount && !sliderHover && !hoverActiveButton && !hoverPauseButton) {
  356. hovering = true;
  357. } else {
  358. hovering = false;
  359. }
  360. }
  361. for (int i = 0; i < slider.size(); i++) {
  362. slider.get(i).update();
  363. params.get(i).value = slider.get(i).value;
  364. }
  365. brickBGcol = color(85, 85, 85);
  366. }
  367. void press() {
  368. pressedBrick = pos;
  369. }
  370. void display() {
  371. noStroke();
  372. if (active) {
  373. if (dragging) brickBGcol = color(51, 51, 51);
  374. else if (dragHovering && !hoveringLineBelow && !hoveringLineAbove) brickBGcol= color (105, 105, 105);
  375. else brickBGcol = color(85, 85, 85);
  376. } else {
  377. brickBGcol = color(0);
  378. }
  379. fill(brickBGcol);
  380. rect(0, totalBrickHeight, width, h);
  381. fill(255);
  382. text(name, 40, 13+totalBrickHeight, 10);
  383. stroke(255);
  384. strokeWeight(1);
  385. if (active) fill(185);
  386. else noFill();
  387. rect(10, 4+totalBrickHeight, 10, 10);
  388. if (paused) fill(185);
  389. else noFill();
  390. rect(25, 4+totalBrickHeight, 10, 10);
  391. for (int i = 0; i < slider.size(); i++) {
  392. slider.get(i).display();
  393. }
  394. stroke(150);
  395. strokeWeight(1);
  396. line(0, totalBrickHeight+h-1, width, totalBrickHeight+h-1);
  397. if (hoveringLineAbove) {
  398. stroke(200);
  399. strokeWeight(5);
  400. line(0, y, width, y);
  401. }
  402. if (hoveringLineBelow) {
  403. stroke(200);
  404. strokeWeight(5);
  405. line(0, y+h, width, y+h);
  406. }
  407. }
  408. }
  409. int pressedSlider = -1;
  410. //class Slider extends Brick{
  411. class Slider {
  412. int x, y, w, h, mode;
  413. int[] osciModes;
  414. float minVal, maxVal, value; //should be private but doesnt work lol
  415. boolean hovering, hovering_anim_btn, animated;
  416. String label;
  417. Oscillator osci;
  418. Slider(int x_, int y_, int w_, int h_, float minVal_, float maxVal_, String label_, int mode_, int[] osciModes_) {
  419. x = x_;
  420. y = y_;
  421. w = w_;
  422. h = h_;
  423. minVal = minVal_;
  424. maxVal = maxVal_;
  425. mode = mode_;
  426. label = label_ + (mode == INTVAL ? " (INT)" : " (FLOAT)");
  427. osciModes = osciModes_;
  428. osci = new Oscillator(int(random(2, 5)), osciModes);
  429. osci.amplitude(minVal, maxVal);
  430. osci.update();
  431. setValue(osci.value);
  432. animated = true;
  433. slider.add(this);
  434. }
  435. void setPosX(int x_) {
  436. x = x_;
  437. }
  438. void setMinMax(float min, float max) {
  439. float cval = map(value, minVal, maxVal, 0, 10000);
  440. minVal = min;
  441. maxVal = max;
  442. osci.amplitude(minVal, maxVal);
  443. setValue(map(cval, 0, 10000, minVal, maxVal));
  444. }
  445. void setLabel(String lab) {
  446. label = lab + (mode == INTVAL ? " (INT)" : " (FLOAT)");
  447. }
  448. void setMode(int mode_) {
  449. mode = mode_;
  450. }
  451. void press(int myId_) {
  452. pressedSlider = myId_;
  453. animated = false;
  454. setValue(map(mouseX, x, x+w, minVal, maxVal));
  455. }
  456. void setValue(float value_) {
  457. value = value_;
  458. value = constrain(value, minVal, maxVal);
  459. if (mode == INTVAL) value = int(round(value));
  460. }
  461. float getValue() {
  462. return(value);
  463. }
  464. void update() {
  465. osci.update();
  466. if (animated) {
  467. setValue(osci.value);
  468. }
  469. if (mouseX >= x && mouseX <= x+w && mouseY >= y+scrollAmount && mouseY <= y+h+scrollAmount) {
  470. hovering = true;
  471. } else {
  472. hovering = false;
  473. }
  474. if (mouseX >= x+w+5 && mouseX <= x+w+5+15 && mouseY >= y+scrollAmount && mouseY <= y+h+scrollAmount) {
  475. hovering_anim_btn = true;
  476. } else {
  477. hovering_anim_btn = false;
  478. }
  479. }
  480. void display() {
  481. stroke(255);
  482. strokeWeight(1);
  483. fill(100+(40*int(hovering)));
  484. rect(x, y, w, h);
  485. fill(185+(40*int(hovering)));
  486. rect(x, y, map(value, minVal, maxVal, 0, w), h);
  487. fill(255);
  488. text(label, x+5, y+10);
  489. if (animated) {
  490. fill(185+(40*int(hovering_anim_btn)));
  491. } else {
  492. fill(100+(40*int(hovering_anim_btn)));
  493. }
  494. rect(x+w+5, y, h, h);
  495. }
  496. }
  497. //CP5
  498. void CP5_listActions(int n) {
  499. addByID(n);
  500. }
  501. boolean startRobot;
  502. void robot() {
  503. if (startRobot) {
  504. if (!spawnPlaying) {
  505. auto.setValue(true);
  506. }
  507. }
  508. startRobot = false;
  509. if (renderFrameRate > 5) {
  510. renderSize+=2;
  511. } else {
  512. if (renderSize >= 45) renderSize-=15;
  513. }
  514. if (shaderList.size() == 0) {
  515. println("adding");
  516. addByID((int)random(FX.length));
  517. }
  518. if (random(1)<0.01) {
  519. println("adding");
  520. addByID((int)random(FX.length));
  521. }
  522. if (random(1)<0.01) {
  523. int removeMe = int(random(shaderList.size()-1));
  524. println("removing" + removeMe);
  525. bricks.get(removeMe).press();
  526. shaderManager.removeShader(removeMe);
  527. pressedBrick = -1;
  528. }
  529. }
  530. void addByName(String name) {
  531. Class<?> shaderChildClass = null;
  532. Shader s = null;
  533. try {
  534. shaderChildClass = Class.forName(sketchClass.getName() + "$" + name);
  535. s = (Shader) shaderChildClass.getDeclaredConstructor(sketchClass).newInstance(mainApplet);
  536. shaderManager.addShader(s);
  537. }
  538. catch (final ReflectiveOperationException ex) {
  539. System.err.println(ex);
  540. }
  541. }
  542. void addByID(int id) {
  543. addByName(FX[id]);
  544. }
  545. void mousePressed() {
  546. for (int i = slider.size()-1; i >= 0; i--) {
  547. Slider s = slider.get(i);
  548. if (s.hovering) s.press(i);
  549. if (s.hovering_anim_btn) s.animated = !s.animated;
  550. }
  551. for (int i = bricks.size()-1; i >= 0; i--) {
  552. if (bricks.get(i).hovering) {
  553. bricks.get(i).press();
  554. }
  555. if (bricks.get(i).hoverActiveButton)
  556. {
  557. bricks.get(i).toggleActive();
  558. }
  559. if (bricks.get(i).hoverPauseButton) bricks.get(i).playPause();
  560. }
  561. }
  562. void mouseDragged() {
  563. if (pressedSlider != -1) {
  564. Slider s = slider.get(pressedSlider);
  565. s.setValue(map(mouseX, s.x, s.x+s.w, s.minVal, s.maxVal));
  566. }
  567. if (pressedBrick != -1) {
  568. bricks.get(pressedBrick).dragging = true;
  569. for (int i = 0; i < bricks.size(); i++) {
  570. if (pressedBrick != i && bricks.get(i).hovering && mouseY < height-120) {
  571. bricks.get(i).dragHovering = true;
  572. } else {
  573. bricks.get(i).dragHovering = false;
  574. }
  575. }
  576. }
  577. }
  578. void mouseReleased() {
  579. if (pressedBrick != -1) {
  580. bricks.get(pressedBrick).dragging = false;
  581. for (int i = 0; i < bricks.size(); i++) {
  582. bricks.get(i).dragHovering = false;
  583. if (mouseY < height-120) {
  584. if (pressedBrick != i) {
  585. if (bricks.get(i).hovering && !bricks.get(i).hoveringLineAbove && !bricks.get(i).hoveringLineBelow) {
  586. shaderManager.swapShader(pressedBrick, i);
  587. }
  588. if (pressedBrick != i-1 && bricks.get(i).hoveringLineAbove) {
  589. shaderManager.moveShader(pressedBrick, i);
  590. break;
  591. }
  592. if (bricks.get(i).hoveringLineBelow) {
  593. shaderManager.moveShader(pressedBrick, bricks.size()); //move to last
  594. }
  595. }
  596. }
  597. }
  598. if (mouseX > binX && mouseX < binX+binS && mouseY > binY && mouseY < binY+binS) {
  599. println("removing");
  600. shaderManager.removeShader(pressedBrick);
  601. }
  602. }
  603. pressedSlider = -1;
  604. pressedBrick = -1;
  605. }
  606. int scrollAmount;
  607. void mouseWheel(MouseEvent event) {
  608. textSize(25);
  609. if (mouseX > 100 && mouseX < textWidth(str(renderer.width) + "x" + str(renderer.height)) + 100 && mouseY > height - 40 && mouseY < height) {
  610. if (event.getCount() < 0) renderSize += 8;
  611. else renderSize -= 8;
  612. renderSize = constrain(renderSize, 8, 15000);
  613. }
  614. if (heightOverLimit && mouseX > 0 && mouseX < width && mouseY > 0 && mouseY < height-120) {
  615. for (int i = 0; i < bricks.size(); i++) {
  616. scrollAmount -= event.getCount();
  617. scrollAmount = constrain(scrollAmount, maxSurfaceHeight-120-totalBrickHeight, 0);
  618. //bricks.get(i).y += event.getCount();
  619. //bricks.get(i).updateSliderPos();
  620. }
  621. }
  622. textSize(10);
  623. }
  624. int numberTypedFrame;
  625. boolean typingNumber;
  626. String newResoString;
  627. void keyPressed() {
  628. if (keyIsNumber(key) || key == BACKSPACE) {
  629. numberTypedFrame = frameCount;
  630. if (!typingNumber) {
  631. typingNumber = true;
  632. newResoString = "";
  633. }
  634. if (keyIsNumber(key)) newResoString += str(key);
  635. else if ((newResoString != null) && (newResoString.length() > 0)) newResoString = newResoString.substring(0, newResoString.length() - 1);
  636. }
  637. if (typingNumber && key == ENTER) {
  638. setTypedReso();
  639. }
  640. }
  641. void setTypedReso() {
  642. typingNumber = false;
  643. if (newResoString != "") {
  644. renderSize = constrain(int(newResoString), 8, 15000);
  645. }
  646. }
  647. boolean keyIsNumber(int k) {
  648. if (k == '0' ||k == '1' || k == '2' || k == '3' || k == '4' || k == '5' || k == '6' || k == '7' || k == '8' || k == '9') {
  649. return true;
  650. } else {
  651. return false;
  652. }
  653. }
  654. }