class Lamp { public static final int MODE_NORMAL = 0; public static final int MODE_FLASHLIGHT = 1; private int MODE = MODE_NORMAL; public static final int CONTROL_SOURCE_BUTTON = 0; public static final int CONTROL_SOURCE_SEQUENCE = 1; private int CONTROL_SOURCE = CONTROL_SOURCE_BUTTON; public static final int APPEARANCE_NORMAL = 0; public static final int APPEARANCE_UMBRELLA = 1; private int APPEARANCE = APPEARANCE_NORMAL; private Button controlButton; private Sequence controlSequence; private boolean ON = false; private float fade = 1.0; private float x=0, y=0, z=0; private float r=0; private float rotZ = 0; private color c1, c2; private color col; Lamp() { } public void setScreenPos(float _x, float _y) { x = _x; y = _y; } public void setScreenPos(float _x, float _y, float _z) { x = _x; y = _y; z = -_z; } public void setScreenSize(float _r) { r = _r; } public void setRotZ(float rz) { rotZ = rz; } public void setOnColor(color _c) { c1 = _c; } public void setOffColor(color _c) { c2 = _c; } public color getColor() { return col; } public void setMode(int m) { MODE = m; } public void setAppearance(int a) { APPEARANCE = a; } public void switchOn() { ON = true; col = colorFade(c1,c2,fade); } public void switchOff() { ON = false; col = c2; } public float getLevel() { return (ON?fade:0); } public void controlledBy(Button b) { CONTROL_SOURCE = CONTROL_SOURCE_BUTTON; controlButton = b; } public void controlledBy(Sequence s) { CONTROL_SOURCE = CONTROL_SOURCE_SEQUENCE; controlSequence = s; } public void update() { if (MODE==MODE_FLASHLIGHT) ON = false; if (CONTROL_SOURCE==CONTROL_SOURCE_BUTTON) { if (controlButton.buttonOnFlankEvent()) switchOn(); if (controlButton.buttonOffFlankEvent()) switchOff(); } else if (CONTROL_SOURCE==CONTROL_SOURCE_SEQUENCE) { switchOn(); fade = controlSequence.get(); col = colorFade(c1,c2,fade); } } private color colorFade(color c1, color c2, float p1) { float p2 = 1.0 - p1; float r = red(c1)*p1 + red(c2)*p2; float g = green(c1)*p1 + green(c2)*p2; float b = blue(c1)*p1 + blue(c2)*p2; float a = alpha(c1)*p1 + alpha(c2)*p2; return color(r,g,b,a); } public void draw() { if (APPEARANCE==APPEARANCE_NORMAL) { fill(col); noStroke(); pushMatrix(); translate(x,z,y); sphere(r); popMatrix(); } else if (APPEARANCE==APPEARANCE_UMBRELLA) { pushMatrix(); stroke(100,100,100); fill(180,180,180); translate(x,z/2.0,y); box(1,z,1); popMatrix(); pushMatrix(); translate(x,z,y); int sides=12; float rad=20; rotateY(rotZ); rotateX(-radians(75)); fill(col); noStroke(); sphere(r); stroke(0,0,0); for (int j=0;j<2;j++) { if (j==0) fill(32,32,32); else fill(col|0xFF000000); for (int i=0;i