import processing.video.*; import ddf.minim.*; PGraphics tram, street, keymaker, ste, deaths1, deaths2, gender, overdose; PImage tram_ph, street_ph, keymaker_ph, ste_ph, deaths1_ph, deaths2_ph, gender_ph, overdose_ph; PImage[] imgs = new PImage[3575]; PImage[] gender_imgs = new PImage[12]; //PImage[] imgs = new PImage[8]; String[] listFileNames(String dir) { File file = new File(dir); if (file.isDirectory()) { String names[] = file.list(); return names; } else { return null; } } String[] imagenames; boolean earthSaved; String earthText = "Click\nto Save\nthe Earth"; PImage ste_frame; Minim m; AudioPlayer s1, s2; int overdoseTime = 150; Movie ste_mov; Movie street_mov, street_loop, keymaker_mov, tram_mov; Movie gender_mov; Projection[] projections = new Projection[8]; int activeProjection; int resetTimer; int resetTime = 240000; //5 minutes in MS void startEnd() { if (millis() > resetTimer + resetTime) { reset(); resetTimer = millis(); } } void reset() { m.stop(); m = new Minim(this); s1 = m.loadFile(dataPath("")+"/ste/sound.mp3", 1024); s2 = m.loadFile(dataPath("")+"/street/mwen_meer.mp3", 1024); tram_mov.stop(); street_mov.stop(); street_loop.stop(); //gender_mov.stop(); keymaker_mov.stop(); keymaker_mov.play(); keymaker_mov.jump(0); keymaker_mov.pause(); streetLevel = 1; tramLife = true; overDoseLife = true; for (int i = 0; i < projections.length; i++) { projections[i].invisibility = 255; } earthSaved = false; earthText = "Click\nto Save\nthe Earth"; projections[2].activate(); level = 1; } int level = 0; int streetLevel = 1; void mouseClicked() { //projections[activeProjection].activate(); } void mousePressed() { switch(level) { case(0): keymaker_mov.play(); keymaker_mov.pause(); projections[2].activate(); level++; break; case(1): keymaker_mov.play(); break; case(2): level++; break; case(3): s1.play(); earthText = "Earth Saved"; earthSaved = true; level++; break; case(4): projections[3].deactivate(); street_mov.play(); //street_mov.jump(50); projections[1].activate(); s2.loop(); level++; break; case(6): street_mov.play(); break; case(7): projections[1].deactivate(); s2.setVolume(0.8); level+=2; projections[4].activate(); projections[5].activate(); break; //case(8): //level++; //break; case(9): level++; projections[4].deactivate(); projections[5].deactivate(); tram_mov.play(); tram_mov.pause(); projections[0].activate(); break; case(10): tram_mov.play(); break; case(12): keymaker_mov.play(); keymaker_mov.jump(0); keymaker_mov.pause(); for (int i = 0; i < projections.length; i++) { projections[i].activate(); } level++; break; case(13): reset(); break; default: break; } resetTimer = millis(); } void mouseReleased() { switch(level) { case(1): keymaker_mov.pause(); if (keymaker_mov.time()>9.4) { keymaker_mov.stop(); level+=2; projections[3].activate(); ste_mov.loop(); } break; case(6): if (street_mov.time() < 62.8) { street_mov.pause(); } else { street_mov.stop(); street_loop.loop(); streetLevel = 2; level++; } break; case(10): if (!playTram) tram_mov.pause(); break; default: break; } resetTimer = millis(); } //VideoControl tramControl, streetControl, keymakerControl; //Projection tram, street, keymaker; void setup() { //size(1920, 1080); fullScreen(); //pg_tram = createGraphics(540, 540); m = new Minim(this); imagenames = listFileNames(dataPath("") + "/ich"); for (int i = 0; i < imgs.length; i++) { imgs[i] = loadImage(dataPath("") + "/ich/" + imagenames[i]); } street = createGraphics(540, 540); street_mov = new Movie(this, dataPath("") + "/street.mp4"); street_loop = new Movie(this, dataPath("") + "/streetloop.mp4"); s2 = m.loadFile(dataPath("")+"/street/mwen_meer.mp3", 1024); //street_mov.loop(); keymaker = createGraphics(540, 540); keymaker_mov = new Movie(this, dataPath("") + "/keymaker.mp4"); //street_mov.loop(); tram = createGraphics(540, 540); tram_mov = new Movie(this, dataPath("") + "/tram.mp4"); ste = createGraphics(540, 540); ste.beginDraw(); ste.textAlign(CENTER); ste.imageMode(CENTER); ste.textSize(ste.width/7); ste.endDraw(); s1 = m.loadFile(dataPath("")+"/ste/sound.mp3", 1024); ste_frame = loadImage(dataPath("") + "/ste/Golden-Round-Frame-PNG.png"); ste_mov = new Movie(this, dataPath("") + "/ste/video.mp4"); deaths1 = createGraphics(270, 270); deaths1.beginDraw(); deaths1.noStroke(); deaths1.endDraw(); deaths2 = createGraphics(270, 270); deaths2.beginDraw(); deaths2.noStroke(); deaths2.endDraw(); gender = createGraphics(270, 270); //gender_mov = new Movie(this, dataPath("") + "/gender.mp4"); for (int i = 0; i < gender_imgs.length; i++) { gender_imgs[i] = loadImage(dataPath("") + "/gender/" + i + ".png"); } overdose = createGraphics(270, 270); overdose.beginDraw(); overdose.imageMode(CENTER); overdose.endDraw(); projections[0] = new Projection(0, 0, 0, 540, 540, tram); projections[1] = new Projection(1, 540, 0, 540, 540, street); projections[2] = new Projection(2, 1080, 0, 540, 540, keymaker); projections[3] = new Projection(3, 0, 540, 540, 540, ste); projections[4] = new Projection(4, 540, 540, 270, 270, deaths1); projections[5] = new Projection(5, 810, 540, 270, 270, deaths2); projections[6] = new Projection(6, 540, 810, 270, 270, gender); projections[7] = new Projection(7, 810, 810, 270, 270, overdose); //tram_ph = loadImage(dataPath("") + "/placeholders/tram.png"); //street_ph = loadImage(dataPath("") + "/placeholders/tram.png"); //keymaker_ph = loadImage(dataPath("") + "/placeholders/keymaker.png"); //ste_ph = loadImage(dataPath("") + "/placeholders/ste.png"); deaths1_ph = loadImage(dataPath("") + "/placeholders/deaths1.png"); deaths2_ph = loadImage(dataPath("") + "/placeholders/deaths2.png"); gender_ph = loadImage(dataPath("") + "/placeholders/gender.png"); overdose_ph = loadImage(dataPath("") + "/placeholders/overdose.png"); //projections[3].activate(); for (int i = 0; i < stars.length; i ++) { stars[i] = new Star(deaths1); stars2[i] = new Star(deaths2); } frameRate(30); keymaker_mov.play(); keymaker_mov.pause(); projections[2].activate(); level++; } boolean pauseStreet; boolean playTram; boolean tramLife = true; double tramWait; boolean playOverDose; boolean overDoseLife = true; double overDoseWait; void overDoseCooldown() { if (overDoseLife) { overDoseWait = millis(); overDoseLife = false; } if (millis() > overDoseWait + 15000) { playOverDose = false; level++; projections[7].deactivate(); projections[6].activate(); //gender_mov.play(); //gender_mov.pause(); } } void tramCooldown() { if (tramLife) { tramWait = millis(); tramLife = false; } if (millis() > tramWait + 7000) { playTram = false; level++; projections[0].deactivate(); projections[7].activate(); playOverDose = true; } } void movieEvent(Movie m) { m.read(); if (m == street_mov && m.time() > 53 && level == 5) { pauseStreet = true; } if (m == tram_mov && m.time() > 4 && level == 10) { playTram = true; } } /* if(level==5){ if(street_mov.time() > 59){ street_mov.pause(); } } */ float rotator; int randImgNo; int lag, previous; float imgSizeRatio = 0.0; int mousePrevious; void draw() { /* if (level == 12 || level == 13) { if (mouseX / 100 != mousePrevious) { float genderPos = map(mouseX, 0, width, 0, gender_mov.duration()); gender_mov.play(); gender_mov.jump(genderPos); gender_mov.pause(); } mousePrevious = mouseX / 100; } */ if (playTram) { tramCooldown(); } if (playOverDose) { overDoseCooldown(); } if (pauseStreet) { street_mov.jump(59.1); street_mov.pause(); level++; pauseStreet = false; } background(0); // TRAM tram.beginDraw(); tram.image(tram_mov, 0, 0, tram.width, tram.height); tram.endDraw(); // STREET street.beginDraw(); if (streetLevel == 1) street.image(street_mov, 0, 0, street.width, street.height); else if (streetLevel == 2) street.image(street_loop, 0, 0, street.width, street.height); street.endDraw(); // KEYMAKER keymaker.beginDraw(); keymaker.image(keymaker_mov, 0, 0, keymaker.width, keymaker.height); keymaker.endDraw(); // SAVE THE EARTH ste.beginDraw(); ste.clear(); ste.image(ste_mov, ste.width/2, ste.height/2, ste.width/1.777, ste.height/1.777); ste.fill(255); if (earthSaved) { ste.pushMatrix(); ste.translate(ste.width/2, ste.height/2); ste.rotate(rotator); ste.image(ste_frame, 0, 0, ste.width, ste.height); ste.popMatrix(); rotator+=0.01; } int steY = ste.height/2-int(!earthSaved)*100; for (int x = -1; x < 2; x++) { ste.text(earthText, ste.width/2+x, steY); ste.text(earthText, ste.width/2, steY); } if (earthSaved) { ste.fill(250, 230, 80); } ste.text(earthText, ste.width/2, steY); //ste.text(earthText, ste.width/2, ste.height/2-int(!earthSaved)*100); ste.endDraw(); // DEATHS 1 deaths1.beginDraw(); deaths1.background(255, 165, 15); paintStars(); deaths1.endDraw(); // DEATHS 2 deaths2.beginDraw(); deaths2.background(255, 165, 15); paintStars2(); deaths2.endDraw(); // GENDER gender.beginDraw(); //gender.image(gender_mov, 0, 0, gender.width, gender.height); gender.image(gender_imgs[int(map(mouseX,0,width,0,gender_imgs.length))], 0, 0, gender.width, gender.height); gender.endDraw(); // OVERDOSE int current = millis(); int ellapsed = current - previous; previous = current; lag += ellapsed; while (lag >= overdoseTime) { randImgNo = (int)(Math.random()*imgs.length); lag -= overdoseTime; float minSize = min(imgs[randImgNo].width, imgs[randImgNo].height); imgSizeRatio = 270.0/minSize; } overdose.beginDraw(); overdose.image(imgs[randImgNo], overdose.width/2, overdose.height/2, imgs[randImgNo].width*imgSizeRatio, imgs[randImgNo].height*imgSizeRatio); overdose.endDraw(); // PROJECTION OVERLAYS for (int i = 0; i < projections.length; i++) { projections[i].update(); projections[i].display(); } startEnd(); } int currentProjection; int activationTimer = 2000; class Projection { int id, x, y, w, h; boolean active; boolean deactivating; boolean wasActive; boolean spawned, activating; int flashBrightness = 255; int invisibility = 255; double activationTime; PGraphics pg; Projection(int id_, int x_, int y_, int w_, int h_, PGraphics pg_) { id = id_; x = x_; y = y_; w = w_; h = h_; pg = pg_; } void activate() { /* for (int i = id-1; i >= 0; i--) { projections[i].deactivate(); } activeProjection++; if (activeProjection >= projections.length) { activeProjection = 0; } */ activationTime = millis(); flashBrightness = 255; activating = true; active = true; invisibility = 0; } void deactivate() { active = false; activating = false; deactivating = true; } void update() { if (activating) { flashBrightness -= 10; if (millis() > activationTime + activationTimer) { activating = false; } } if (deactivating) { invisibility +=5; if (invisibility >= 127) { deactivating = false; } } } void display() { //tint(255); image(pg, x, y, w, h); if (activating) { fill(255, flashBrightness); } else { fill(0, invisibility); } rect(x, y, w, h); } }