PFont font; PFont labels; int width = 700; int height = 700; color rittenhouse = #DD1C4B; color center_city = #FF9422; color olde_city = #FFFF00; color south_philly = #7ACE1E; color northern_liberties = #6BC0EB; color university_city = #A664A8; color selected = 0; color highlight = 255; int interval = 25; int row1 = 25; int row2 = 65; Bar village_whiskey = new Bar ("Village Whiskey", 8, 3, 11, rittenhouse); Bar good_dog = new Bar ("Good Dog", 5, 10, 9, rittenhouse); Bar cantina = new Bar ("Cantina At Distrito", 7, 5, 6, university_city); Bar black_sheep = new Bar ("The Black Sheep", 6, -2, 7, rittenhouse); Bar bards = new Bar ("The Bards", -3, 3, 6, rittenhouse); Bar devils_alley = new Bar ("Devil's Alley", 2, 7, 8, rittenhouse); Bar tria = new Bar ("Tria", 8, 4, 11, rittenhouse); Bar johnny_brendas = new Bar ("Johnny Brenda's", -3, 8, 5, northern_liberties); Bar ten_arts = new Bar ("10 Arts", 10, 3, 15, center_city); Bar misconduct = new Bar ("Misconduct Tavern", 5, -3, 10, rittenhouse); Bar blockley = new Bar ("The Blockley Pourhouse", -1, -6, 5, university_city); Bar smokes = new Bar ("Smokey Joe's", 0, -1, 4, university_city); Bar mad_mex = new Bar ("Mad Mex", -1, 4, 6, university_city); Bar varga_bar = new Bar ("Varga Bar", 7, 8, 8, center_city); Bar drinkers = new Bar ("Drinker's West", 1, 4, 5, university_city); Bar monks = new Bar ("Monk's Cafe", 5, 6, 7, rittenhouse); Bar fado = new Bar ("Fado Irish Pub", 2, 4, 7, rittenhouse); Bar tops = new Bar ("Top's", -8, 7, 3, rittenhouse); Bar fox_hound = new Bar ("Fox and Hound", 0, 1, 9, rittenhouse); Bar local = new Bar ("Local 44", 1, 8, 6, university_city); Bar continental = new Bar ("The Continental", 8, 0, 10, rittenhouse); Bar raven_lounge = new Bar ("Raven Lounge", -1, 9, 5, rittenhouse); Bar apothecary = new Bar ("APO", 9, 5, 11, center_city); Bar time = new Bar ("Time", 3, 8, 9, center_city); Bar bar = new Bar ("Bar (Drink About It)", -3, 4, 5, center_city); Bar mcgillins = new Bar ("McGillin's Olde Ale House", -1, 5, 4, center_city); Bar franklin = new Bar ("The Franklin", 8, 5, 12, rittenhouse); Bar dirty_franks = new Bar ("Dirty Frank's", -7, 7, 5, center_city); Bar moriartys = new Bar ("Moriarty's", 2, 5, 6, center_city); Bar fergies = new Bar ("Fergie's Pub", 0, -3, 4, center_city); Bar cavs = new Bar ("Cavanaugh's", -2, -2, 5, university_city); Bar lucys = new Bar ("Lucy's Hat Shop", -2, -5, 4, olde_city); Bar cuba_libre = new Bar ("Cuba Libre", 4, 4, 11, olde_city); Bar bleu_martini = new Bar ("Bleu Martini", 2, -6, 10, olde_city); Bar khyber = new Bar ("The Khyber", -5, 2, 5, olde_city); Bar brownies = new Bar ("Brownie's Irish Pub", -3, 0, 6, olde_city); Bar plough = new Bar ("The Plough and The Stars", 2, 1, 6, olde_city); Bar mad_river = new Bar ("Mad River", 0, -7, 7, olde_city); Bar blarneys = new Bar ("The Blarney Stone", -1, 3, 3, university_city); Bar legion = new Bar ("Legion", -8, 5, 5, university_city); Bar finn = new Bar ("Finn McCool's", -2, -4, 4, center_city); Bar mcglincheys = new Bar ("McGlinchey's", -7, 8, 5, rittenhouse); Bar dolphin = new Bar ("Dolphin Tavern", -10, 3, 4, south_philly); Bar caballitos = new Bar ("Cantina Los Caballitos", -5, 8, 5, south_philly); Bar republican = new Bar ("The Republican", -10, 5, 4, south_philly); Bar new_deck = new Bar ("New Deck Tavern", 1, 3, 5, university_city); Bar jollys = new Bar ("Jolly's Piano Bar", 5, 9, 10, rittenhouse); Bar rum_bar = new Bar ("Rum Bar", 2, -3, 8, rittenhouse); Bar grace_tavern = new Bar ("Grace Tavern", -2, 2, 5, south_philly); Bar doobies = new Bar ("Doobie's", -5, 7, 4, south_philly); Bar ten_stone = new Bar ("Ten Stone", 2, -1, 6, south_philly); Bar artful_dodger = new Bar ("The Artful Dodger", 3, -1, 5, olde_city); Bar xochitl = new Bar ("Xochitl", 6, 2, 9, olde_city); Bar dark_horse = new Bar ("The Dark Horse Pub", 1, 0, 7, olde_city); Bar eulogy = new Bar ("Eulogy Belgian Tavern", 1, 7, 6, olde_city); Bar sugarmoms = new Bar ("Sugar Mom's", -2, 9, 5, olde_city); Bar national_mechanics = new Bar ("National Mechanics", 3, 4, 8, olde_city); Bar irish_pol = new Bar ("The Irish Pol", -2, 3, 6, olde_city); Bar swanky_bubbles = new Bar ("Swanky Bubbles", 6, -5, 9, olde_city); Bar tom_drinkers = new Bar ("Tom Drinker's Tavern", 1, -7, 6, olde_city); Bar tattooed_mom = new Bar ("Tattooed Mom", -2, 7, 4, south_philly); Bar chicks_cafe = new Bar ("Chick's Cafe and\n Wine Bar", 9, 4, 11, south_philly); Bar southwark = new Bar ("Southwark", 9, 2, 11, south_philly); Bar makos = new Bar ("Mako's", -6, 2, 3, south_philly); Bar dock_street = new Bar ("Dock Street", 3, 3, 5, university_city); Bar copa = new Bar ("Copabanana", -4, -4, 3, university_city); Bar white_dog = new Bar ("White Dog", 5, 5, 7, university_city); Bar _1601 = new Bar ("1601", 3, -3, 4, south_philly); Bar pope = new Bar ("P.O.P.E.", 1, 5, 7, south_philly); Bar rays = new Bar ("Ray's Happy\n Birthday Bar", -6, 9, 3, south_philly); Bar dive = new Bar ("Dive", -7, 5, 5, south_philly); Bar royal_tavern = new Bar ("Royal Tavern", 1, -2, 6, south_philly); Bar twelve_steps = new Bar ("12 Steps Down", -5, 5, 5, south_philly); Bar _700 = new Bar ("700", -1, 0, 6, northern_liberties); Bar standard_tap = new Bar ("The Standard Tap", 5, 8, 5, northern_liberties); Bar dos_segundos = new Bar ("Cantina Dos Segundos", -2, 5, 6, northern_liberties); Bar pyt = new Bar ("P.Y.T.", 1, -3, 6, northern_liberties); Bar camino = new Bar ("El Camino Real", -2, 1, 6, northern_liberties); Bar nodding_head = new Bar ("Nodding Head", 4, -2, 5, rittenhouse); Bar oscars = new Bar ("Oscar's Tavern", -7, 6, 6, rittenhouse); Bar biba = new Bar ("Biba", 6, 3, 9, university_city); Bar tap_house = new Bar ("City Tap House", 2, 2, 8, university_city); Bar ranstead_room = new Bar ("The Ranstead Room", -7, 6, 12, rittenhouse); Bar oyster_house = new Bar ("Oyster House", -7, 6, 6, highlight); //Bar bob_barbaras = new Bar ("Bob and Barbara's", -7, 6, 6, rittenhouse); //Bar tritone = new Bar ("Tritone", -7, 6, 6, rittenhouse); //Bar macs_tavern = new Bar ("Mac's Tavern", -7, 6, 6, olde_city); Bar[] bars = { village_whiskey, good_dog, cantina, black_sheep, bards, devils_alley, tria, johnny_brendas, ten_arts, misconduct, blockley, smokes, mad_mex, varga_bar, drinkers, monks, fado, tops, fox_hound, local, continental, raven_lounge, apothecary, time, bar, mcgillins, franklin, dirty_franks, moriartys, fergies, cavs, lucys, cuba_libre, bleu_martini, khyber, brownies, plough, mad_river, blarneys, legion, finn, mcglincheys, dolphin, caballitos, republican, new_deck, jollys, rum_bar, grace_tavern, doobies, ten_stone, artful_dodger, xochitl, dark_horse, eulogy, sugarmoms, national_mechanics, irish_pol, swanky_bubbles, tom_drinkers, tattooed_mom, chicks_cafe, southwark, makos, dock_street, copa, white_dog, _1601, pope, rays, dive, royal_tavern, twelve_steps, _700, standard_tap, dos_segundos, pyt, camino, nodding_head, oscars, biba, tap_house, ranstead_room, oyster_house }; Bar[] currentBars = bars; void setup() { size(width, height+150); background(0); font = loadFont("MuseoSans-500-11.vlw"); labels = loadFont("MuseoSlab-500-14.vlw"); textFont(font); ellipseMode(RADIUS); noStroke(); smooth(); } void draw() { background(0); drawGraph(); if(selected != 0) currentBars = filterByNeighborhood(selected); else currentBars = bars; drawLegend(); drawBarDots(currentBars); drawBarLabels(currentBars); } void drawGraph() { stroke(255, 75); strokeWeight(3); line(width/2, 0, width/2, height); line(0, height/2, width, height/2); stroke(255, 50); strokeWeight(.5); for (int i = 1; i < 22; i++) { line(75+(interval*i), 100, 75+(interval*i), height-100); } for (int i = 1; i < 22; i++) { line(100, 75+(interval*i), width-100, 75+(interval*i)); } stroke(255); strokeWeight(1); //line(0, height, width, height); fill(255); textFont(labels); text("SKETCHY", 10, height/2+20); text("CLASSY", width-65, height/2+20); text("BAD", width/2+10, height-10); text("AWESOME", width/2+10, 15); textFont(font); } float getX(int classy) { return width/2 + classy*interval; } float getY(int awesome) { return height/2 - awesome*interval; } void drawBarDots(Bar[] barsToDraw) { if(barsToDraw.length == 0) return; noStroke(); Bar current = null; float x, y; float radius; for (int i = 0; i < barsToDraw.length; i++) { current = barsToDraw[i]; x = getX(current.classy); y = getY(current.awesome); radius = (float) current.price; if (hovering(x, y, current.price)) { fill(255); //radius = radius * 1.2; } else fill(current.neighborhood); ellipse(x, y, radius, radius); } } void drawBarLabels(Bar[] barsToDraw) { Bar current = null; float x, y; float offset_x, offset_y; for (int i = 0; i < barsToDraw.length; i++) { current = barsToDraw[i]; x = getX(current.classy); y = getY(current.awesome); offset_x = current.price/3; offset_y = current.price*1.5; if (hovering(x, y, current.price) || (current.neighborhood == 255)) { fill(255); text(current.name, x+(current.price)+offset_x, y+(current.price)-offset_y); } } } Bar[] filterByNeighborhood(color neighborhood) { Bar[] filteredBars = new Bar[0]; Bar current = null; int barsFound = 0; for (int i = 0; i < bars.length; i++){ current = bars[i]; if(current.neighborhood == neighborhood) { filteredBars = (Bar[]) expand(filteredBars, filteredBars.length+1); filteredBars[barsFound] = current; barsFound++; } } return filteredBars; } boolean hovering(float x, float y, int radius) { if(dist(mouseX, mouseY, x, y) < radius) { return true; } else return false; } void drawLegend() { fill(255); text("Neighborhoods:", 60, height+row1, 90, 20); //RITTENHOUSE if(mouseX >= 150 && mouseX <= 220 && mouseY >= height+row1-10 && mouseY <= height+row1+30) { fill(255); } else { if (selected != rittenhouse) { fill(rittenhouse); // currentBars = bars; } } if (selected == rittenhouse) fill(255); text("Rittenhouse Square", 150, height+row1, 70, 20); //CENTER CITY if(mouseX >= 230 && mouseX <= 305 && mouseY >= height+row1 && mouseY <= height+row1+20) { fill(255); } else { if (selected != center_city) { fill(center_city); // currentBars = bars; } } if (selected == center_city) fill(255); text("Center City", 230, height+row1, 75, 20); //OLDE CITY if(mouseX >= 305 && mouseX <= 370 && mouseY >= height+row1 && mouseY <= height+row1+20) { fill(255); } else { if (selected != olde_city) { fill(olde_city); //currentBars = bars; } } if (selected == olde_city) fill(255); text("Olde City", 305, height+row1, 65, 20); //SOUTH PHILLY if(mouseX >= 370 && mouseX <= 450 && mouseY >= height+row1 && mouseY <= height+row1+20) { fill(255); } else { if (selected != south_philly) { fill(south_philly); // currentBars = bars; } } if (selected == south_philly) fill(255); text("South Philly", 370, height+row1, 75, 20); //NORTHERN LIBERTIES if(mouseX >= 450 && mouseX <= 560 && mouseY >= height+row1 && mouseY <= height+row1+20) { fill(255); } else { if (selected != northern_liberties) { fill(northern_liberties); // currentBars = bars; } } if (selected == northern_liberties) fill(255); text("Northern Liberties", 450, height+row1, 110, 20); //UNIVERSITY CITY if(mouseX >= 560 && mouseX <= 660 && mouseY >= height+row1 && mouseY <= height+row1+20) { fill(255); } else { if (selected != university_city) { fill(university_city); //currentBars = bars; } } if (selected == university_city) fill(255); text("University City", 560, height+row1, 100, 20); fill(255); ellipse(220, height+row1+5, 2, 2); ellipse(295, height+row1+5, 2, 2); ellipse(360, height+row1+5, 2, 2); ellipse(440, height+row1+5, 2, 2); ellipse(550, height+row1+5, 2, 2); fill(255); float offset; text("Cost of an Average Drink:", 10, height+row2, 140, 20); for (int i = 0; i < 20; i++){ offset = 8 + i; ellipse(150+i*offset, height+row2+4, (i+1), (i+1)); } text("$1", 150, height+row2+39); text("$20", width-40, height+row2+39); stroke(255); strokeWeight(1); line(165, height+row2+35, width-45, height+row2+35); } void mousePressed() { if(mouseX >= 60 && mouseX <= 150 && mouseY >= height+row1-10 && mouseY <= height+row1+30) { selected = 0; } else if(mouseX >= 150 && mouseX <= 220 && mouseY >= height+row1-10 && mouseY <= height+row1+30) { if(selected != rittenhouse) { selected = rittenhouse; } else { selected = 0; } } else if(mouseX >= 230 && mouseX <= 305 && mouseY >= height+row1-10 && mouseY <= height+row1+30) { if(selected != center_city) { selected = center_city; } else { selected = 0; } } else if(mouseX >= 305 && mouseX <= 370 && mouseY >= height+row1-10 && mouseY <= height+row1+30) { if(selected != olde_city) { selected = olde_city; } else { selected = 0; } } else if(mouseX >= 370 && mouseX <= 450 && mouseY >= height+row1-10 && mouseY <= height+row1+30) { if(selected != south_philly) { selected = south_philly; } else { selected = 0; } } else if(mouseX >= 450 && mouseX <= 560 && mouseY >= height+row1-10 && mouseY <= height+row1+30) { if(selected != northern_liberties) { selected = northern_liberties; } else { selected = 0; } } else if(mouseX >= 560 && mouseX <= 660 && mouseY >= height+row1-10 && mouseY <= height+row1+30) { if(selected != university_city) { selected = university_city; } else { selected = 0; } } } void keyPressed() { if(key == 'r'){ if(selected != rittenhouse) { selected = rittenhouse; } else { selected = 0; } } else if(key == 'c'){ if(selected != center_city) { selected = center_city; } else { selected = 0; } } else if(key == 'o'){ if(selected != olde_city) { selected = olde_city; } else { selected = 0; } } else if(key == 's'){ if(selected != south_philly) { selected = south_philly; } else { selected = 0; } } else if(key == 'n'){ if(selected != northern_liberties) { selected = northern_liberties; } else { selected = 0; } } else if(key == 'u'){ if(selected != university_city) { selected = university_city; } else { selected = 0; } } else if(key == 'a'){ currentBars = bars; selected = 0; } }