Water water[] = new Water[10]; int waterCount = 0; Water watermap[]; int waterpixels[]; int waterColor = 0xFF0000FF; int alphaColor = 0xFF000000; int bgColor = 0x00C8C8FF; int bgColor2 = 0xFFC8C8FF; int toolbarColor = 0xFF8080A0; Random rand; PImage waterImage; final int WATER = 0; final int LAND = 1; final int ERASE = 2; int inputMode = WATER; void setup() { Dimension d = getSize(); size(400,400,P3D); framerate(100); hint(DISABLE_TEXT_SMOOTH); textFont(loadFont("Verdana-9.vlw")); loadPixels(); waterpixels = pixels; // waterpixels = new int[width*height]; // waterImage = new PImage(waterpixels,width,height,RGBA); for (int i=0; i=0;) { Water w = water[i]; waterpixels[w.pos]=0xFFFFFFFF; } break; case '7': for (int i=waterpixels.length; --i>=10*width;) { waterpixels[i] = bgColor; watermap[i] = null; } sleepCount = 0; waterCount = 0; break; } } void draw() { // background(200); if (mousePressed) { int dx=mouseX-pmouseX; int dy=mouseY-pmouseY; if (dx==0&&dy==0) drawPoint(mouseX,mouseY,0,0); else { double x=mouseX,y=mouseY; double units=max(abs(dx),abs(dy)); double hunit=-dx/units; double vunit=-dy/units; for (int ii=(int)units; --ii>=0;) { x+=hunit; y+=vunit; drawPoint((int)x,(int)y,dx*0.5f,dy*0.5f); } } } moveWater(); fps.frame(); drawParticleCount(); // image(waterImage,0,0); } final private void drawPoint(int xx, int yy, float dx, float dy) { for (int y=-2;y<=2;y++) for (int x=-2;x<=2;x++) { switch (inputMode) { case WATER: addWater(xx+x,yy+y,dx,dy,waterColor); break; case LAND: addLand(xx+x,yy+y,0xFFB77E39); break; case ERASE: erase(xx+x,yy+y); break; } } }