Button button; Lamp audienceLamp1, audienceLamp2; Room audienceRoom; Lamp studioLamp1, studioLamp2, studioLamp3; Room studioRoom; Sequence studioLightSequence; Projector projector; Sequence projectorSequence; Model model; float user1LookX = 400; float user1LookY = 0; float user1LookZ = -135; float user1PosX = 400; float user1PosY = 700; float user1PosZ = -135; float user2LookX = 400; float user2LookY = 300; float user2LookZ = -30; float user2PosX = 550; float user2PosY = 435; float user2PosZ = -530; float user3LookX = 500; float user3LookY = 200; float user3LookZ = -40; float user3PosX = 200; float user3PosY = 530; float user3PosZ = -100; /* Lamp lampStudio; */ int DRAW_MODE_TOP = 0; int DRAW_MODE_FRONT = 1; int DRAW_MODE_USER1 = 2; int DRAW_MODE_USER2 = 3; int DRAW_MODE_USER3 = 4; int DRAW_MODE = DRAW_MODE_USER1; void setup() { size(800,600,P3D); // SETUP SEQUENCES: studioLightSequence = new Sequence(); studioLightSequence.setLength(5.0); studioLightSequence.noLoop(); studioLightSequence.setMode(Sequence.MODE_SINUSOIDAL_LONG); studioLightSequence.toEnd(); projectorSequence = new Sequence(); projectorSequence.setLength(5.0); projectorSequence.noLoop(); projectorSequence.setMode(Sequence.MODE_SINUSOIDAL_LONG); projectorSequence.setOutMode(Sequence.OUTMODE_INVERT); projectorSequence.toEnd(); // BUTTON button = new Button(); button.setScreenPos(400,550); button.setScreenSize(10); button.setScreenColor(color(255,0,0)); // SETUP ROOMS AND PROJECTOR: // make studio room: studioRoom = new Room(); studioRoom.setScreenRectangle(250,150,550,300,0,150); // x,y,x,y,z,z studioRoom.setColor(color(80,80,80)); studioRoom.setFloorColor(color(180,180,180)); studioRoom.setFrontWall(Room.FRONT_WALL_HAS_HOLE); studioRoom.setHoleRectangle(320,480,15,135); // x,x,z,z projector = new Projector(); projector.setProjectorPos(390,170,135); projector.setProjectorBox(20,20,8); projector.setScreenPos(320,300,15); projector.setScreenSize(160,120); projector.controlledBy(projectorSequence); // make audience room: audienceRoom = new Room(); audienceRoom.setScreenRectangle(100,301,700,600,0,170); audienceRoom.setColor(color(90,90,90)); audienceRoom.setBackWall(Room.BACK_WALL_HAS_HOLE); audienceRoom.setFrontWall(Room.FRONT_WALL_IGNORE); audienceRoom.setHoleRectangle(320,480,15,135); //audienceRoom.setHoleRectangle(250,550,0,150); model = new Model(); model.controlledBy(projectorSequence); // studio lamp: studioLamp1 = new Lamp(); studioLamp1.setScreenPos(320,170,140); studioLamp1.setScreenSize(3); studioLamp1.setOnColor(color(255,255,255,255)); studioLamp1.setOffColor(color(255,255,255,32)); studioLamp1.setMode(Lamp.MODE_NORMAL); studioLamp1.switchOn(); studioLamp1.controlledBy(studioLightSequence); studioLamp2 = new Lamp(); studioLamp2.setScreenPos(420,280,140); studioLamp2.setScreenSize(3); studioLamp2.setOnColor(color(255,255,255,255)); studioLamp2.setOffColor(color(255,255,255,32)); studioLamp2.setMode(Lamp.MODE_NORMAL); studioLamp2.switchOn(); studioLamp2.controlledBy(studioLightSequence); studioLamp3 = new Lamp(); studioLamp3.setScreenPos(490,250,140); studioLamp3.setScreenSize(3); studioLamp3.setOnColor(color(255,255,255,255)); studioLamp3.setOffColor(color(255,255,255,32)); studioLamp3.setMode(Lamp.MODE_NORMAL); studioLamp3.switchOn(); studioLamp3.controlledBy(studioLightSequence); // make audienceLamp audienceLamp1 = new Lamp(); audienceLamp1.setScreenPos(280,450,130); audienceLamp1.setScreenSize(5); audienceLamp1.setOnColor(color(255,255,255,255)); audienceLamp1.setOffColor(color(150,150,150,192)); audienceLamp1.setMode(Lamp.MODE_FLASHLIGHT); audienceLamp1.setAppearance(Lamp.APPEARANCE_UMBRELLA); audienceLamp1.setRotZ(-radians(25)); audienceLamp1.switchOff(); audienceLamp1.controlledBy(button); audienceLamp2 = new Lamp(); audienceLamp2.setScreenPos(520,450,130); audienceLamp2.setScreenSize(5); audienceLamp2.setOnColor(color(255,255,255,255)); audienceLamp2.setOffColor(color(150,150,150,192)); audienceLamp2.setMode(Lamp.MODE_FLASHLIGHT); audienceLamp2.setAppearance(Lamp.APPEARANCE_UMBRELLA); audienceLamp2.setRotZ(radians(25)); audienceLamp2.switchOff(); audienceLamp2.controlledBy(button); } void keyPressed() { if (key=='t') { DRAW_MODE = DRAW_MODE_TOP; } else if (key=='f') { DRAW_MODE = DRAW_MODE_FRONT; } else if (key=='1') { DRAW_MODE = DRAW_MODE_USER1; } else if (key=='2') { DRAW_MODE = DRAW_MODE_USER2; } else if (key=='3') { DRAW_MODE = DRAW_MODE_USER3; } } void draw() { background(128,128,128); button.update(); if (button.buttonOnFlankEvent()) { studioLightSequence.start(); projectorSequence.start(); } audienceLamp1.update(); audienceLamp2.update(); studioLamp1.update(); studioLamp2.update(); studioLamp3.update(); projector.update(); studioRoom.updateBrightness(0.1+0.9*studioLightSequence.get()); audienceRoom.updateBrightness(0.6+0.4*audienceLamp1.getLevel()); projector.updateBoxBrightness(0.1+0.9*studioLightSequence.get()); model.updateBrightness(0.1+0.9*studioLightSequence.get()); studioLightSequence.step(0.04); projectorSequence.step(0.04); // CAMERA: float ox = 5 * (width/2.0-mouseX); float oy = 5 * (height/2.0 - mouseY); if (DRAW_MODE == DRAW_MODE_TOP) { camera(width/2.0 + ox,-700,oy+height/2.0,width/2.0,0,height/2.0, 0,0,1); } else if (DRAW_MODE == DRAW_MODE_FRONT) { camera(ox+width/2.0,-height/2.0+oy,800,width/2.0,0,0,0,1,0); } else if (DRAW_MODE == DRAW_MODE_USER1) { if (mousePressed) user1PosX+=(pmouseX-mouseX); if (mousePressed) user1PosZ+=(pmouseY-mouseY); camera(user1PosX,user1PosZ,user1PosY,user1LookX,user1LookZ,user1LookY,0,1,0); } else if (DRAW_MODE == DRAW_MODE_USER2) { if (mousePressed) user2PosX+=(pmouseX-mouseX); if (mousePressed) user2PosZ+=(pmouseY-mouseY); camera(user2PosX,user2PosZ,user2PosY,user2LookX,user2LookZ,user2LookY,0,1,0); } else if (DRAW_MODE == DRAW_MODE_USER3) { camera(user3PosX,user3PosZ,user3PosY,user3LookX,user3LookZ,user3LookY,0,1,0); } // coordinate system: /* stroke(0,0,0,128); line(-1500,0,0,1500,0,0); line(-1500,0,height,1500,0,height); line(0,-1500,0,0,1500,0); line(0,0,-1500,0,0,1500); line(width,0,-1500,width,0,1500); */ studioRoom.draw(); audienceRoom.draw(); model.draw(); projector.draw(); studioLamp1.draw(); studioLamp2.draw(); studioLamp3.draw(); audienceLamp1.draw(); audienceLamp2.draw(); /* button.draw(); float w = projector.getOutImage().width*0.5; float h = projector.getOutImage().height*0.5; image(projector.getOutImage(),400-80,300-30,160,120); */ }