color[] mainColor; color actualColor; boolean colorPicking; int colorNum; // drawings vars int maxDrawings, actualDrawing; Drawing[] drawing; void setup() { size(600,300,P3D); background(255,255,255); //framerate(100); maxDrawings=5000; drawing=new Drawing[maxDrawings]; actualDrawing=0; mainColor=new color[12]; initColorPicker(); } void draw() { drawHuman(); activateNewDrawer(); drawComputer(); drawColorPicker(colorNum); } void drawHuman() { if (mousePressed&&!colorPicking) { int mx=mouseX, my=mouseY; drawing[actualDrawing].addPoint(mx,my); softline(pmouseX,pmouseY,mx,my,actualColor,0.1); } } void activateNewDrawer() { if (actualDrawing>0&&random(1)<0.08) { int i=(int)random(actualDrawing); if (!drawing[i].active) { drawing[i].activateNew(); } } } void drawComputer() { if (actualDrawing>0) { for (int i=0;i=5&&mx<=125&&my>=5&&my<=15) { colorPicking=true; } else { colorPicking=false; if (actualDrawing=5&&mx<125&&my>=5&&my<=15) { colorNum=(int)floor((mx-5)/10.0); actualColor=mainColor[colorNum]; } } } void keyPressed() { if (key=='c'|key=='C') { initColorPicker(); } } class Drawing { int maxFrames=2000, topFrame=0, i=0; int[] x=new int[maxFrames], y=new int[maxFrames]; int av_x=0, av_y=0; color c; Drawing(color in_c) { c=in_c; } // setting: void addPoint(int in_x, int in_y) { if (i>16&255, gg=c>>8&255, bb=c&255; int q=32; int rro,ggo,bbo; do { rro=(int)random(-q,q); } while (rr+rro<0||rr+rro>255); do { ggo=(int)random(-q,q); } while (gg+ggo<0||gg+ggo>255); do { bbo=(int)random(-q,q); } while (bb+bbo<0||bb+bbo>255); coff=rr<<16|gg<<8|bb; } void drawNextPoint() { if (drawIndex=0&&x=0&&y>16&255)+p2*(c2>>16&255)); int g=int(p1*(c1>>8&255)+p2*(c2>>8&255)); int b=int(p1*(c1&255)+p2*(c2&255)); set(x,y,(r<<16|g<<8|b)); } }