import processing.opengl.*; import fuzzy.*; Scene scene; Terrain terrain; Wind wind; Plane plane; Sensors sensors; int frame = 0; TextWidget pauseDisplay; TextWidget crashDisplay; Graph g1, g2, g3, g4, g5, g6, g7; boolean dragged; void setup() { size(1071, 680, P3D); dragged = false; frameRate(25); scene = new Scene(); sensors = new Sensors(); terrain = new Terrain(); scene.registerObject(terrain); wind = new Wind(scene.WIDTH-50, 50, 2, 180); scene.registerObject(wind); plane = new Plane(0, 100, 5, 0, 0); plane.affectedBy(wind); sensors.registerSensor("height", new HeightSensor(plane, terrain)); sensors.registerSensor("power", new PowerSensor(plane)); sensors.registerSensor("speed", new SpeedSensor(plane)); //TextWidget heightWidget = new TextWidget(sensors.getSensor("height"), 10, 20, loadFont("Squid-18.vlw")); //TextWidget powerWidget = new TextWidget(sensors.getSensor("power"), 10, 35, loadFont("Squid-18.vlw")); //TextWidget speedWidget = new TextWidget(sensors.getSensor("speed"), 10, 50, loadFont("Squid-18.vlw")); scene.registerObject(plane); scene.registerObject(sensors.getSensor("height")); //scene.registerObject(heightWidget); //scene.registerObject(powerWidget); //scene.registerObject(speedWidget); g1 = new Graph(5, scene.HEIGHT + 15, "flugzeugRichtungInput", -90, 90); g1.addHedge(-100, -90, -70, -45); g1.addHedge(-60, -40, -20, 0); g1.addHedge(-30, -15, 15, 30); g1.addHedge(0, 20, 40, 60); g1.addHedge(45, 70, 90, 100); scene.registerObject(g1); g2 = new Graph(5, scene.HEIGHT + 15 + 125, "hoehe", 0, 1000); g2.addHedge(500, 700, 1000, 1030); g2.addHedge(300, 500, 550, 750); g2.addHedge(150, 300, 400, 550); g2.addHedge(50, 100, 150, 200); g2.addHedge(-1000, 0, 50, 100); scene.registerObject(g2); g3 = new Graph(275, scene.HEIGHT + 15, "windRichtung", 90, 270); g3.addHedge(110, 180, 180, 250); g3.addHedge(180, 270, 270, 270); g3.addHedge(90, 90, 90, 180); g3.addHedge(100, 140, 140, 180); g3.addHedge(180, 220, 220, 260); scene.registerObject(g3); g4 = new Graph(275, scene.HEIGHT + 15 + 125, "windStaerke", 0, 500); g4.addHedge(0, 0, 50, 100); g4.addHedge(50, 100, 150, 200); g4.addHedge(150, 200, 300, 350); g4.addHedge(300, 350, 400, 450); g4.addHedge(400, 450, 500, 500); scene.registerObject(g4); g5 = new Graph(545, scene.HEIGHT + 15, "flugzeugeGeschwindigkeit", 0, 1000); g5.addHedge(-30, 0, 100, 150); g5.addHedge(100, 200, 250, 350); g5.addHedge(300, 400, 600, 700); g5.addHedge(600, 700, 800, 900); g5.addHedge(800, 900, 1000, 1030); scene.registerObject(g5); g6 = new Graph(815, scene.HEIGHT + 15, "motorenstaerke", 0, 100); g6.isOutput = true; g6.addHedge( 0, 0, 10, 20); g6.addHedge( 10, 20, 30, 40); g6.addHedge( 30, 40, 60, 70); g6.addHedge( 60, 70, 80, 90); g6.addHedge( 80, 90, 100, 100); scene.registerObject(g6); g7 = new Graph(815, scene.HEIGHT + 15 + 125, "flugzeugRichtungOutput", -90, 90); g7.isOutput = true; g7.addHedge(-100, -90, -70, -45); g7.addHedge(-60, -40, -20, 0); g7.addHedge(-30, -15, 15, 30); g7.addHedge(0, 20, 40, 60); g7.addHedge(45, 70, 90, 100); scene.registerObject(g7); pauseDisplay = new TextWidget("Pause: Leertaste druecken zum fortfahren", 10, height - 10, loadFont("BitstreamVeraSans-Bold-20.vlw")); crashDisplay = new TextWidget("Das Flugzeug ist abgestuerzt!", 10, height / 2, loadFont("BitstreamVeraSans-Bold-20.vlw")); } void draw() { frame++; background(255); if (scene.started) control(); scene.draw(); if(!scene.started) { pauseDisplay.draw(); } if(scene.crashed) { crashDisplay.draw(); } } void debug(String msg) { println("[" + millis() + "] " + msg); } void keyPressed() { if (key == CODED) { switch(keyCode) { case UP: wind.angle = constrain(wind.angle+1, 90, 270); break; case DOWN: wind.angle = constrain(wind.angle-1, 90, 270); break; case RIGHT: wind.power = constrain(wind.power-0.1, 0, 10); break; case LEFT: wind.power = constrain(wind.power+0.1, 0, 10); break; default: } } else if (key == ' ') { scene.toggle(); } else if (key == 'r') { terrain.reset(); } } void mouseClicked() { plane.posX = constrain(mouseX, 0, scene.WIDTH); plane.posY = constrain(mouseY, 0, scene.HEIGHT - terrain.heightAt((int) plane.posX)); } void mouseDragged() { terrain.addPoint(mouseX, mouseY); dragged = true; } void mouseReleased() { if(dragged) { dragged = false; terrain.addPoint(terrain.points[0][0], terrain.points[0][1]); } }