// Player float playerX, playerY; Boolean lightOn; float playerHeading; Boolean[] keyState; ArrayList chaser; // spawning int chaserLimit; void setup() { size(512, 512, P2D); playerX = width / 2; playerY = height / 2; lightOn = false; keyState = new Boolean[300]; for (int i = 0; i < 300; i ++) { keyState[i] = false; } ellipseMode(CENTER); chaser = new ArrayList(); chaserLimit = 16; frameRate(60); } void draw() { // update float dX = 0; float dY = 0; if ((keyState[39]) || (keyState[68])) { dX = PLAYER_SPEED; } if ((keyState[38]) || (keyState[87])) { dY = -PLAYER_SPEED; } if ((keyState[37]) || (keyState[65])) { dX = -PLAYER_SPEED; } if ((keyState[40]) || (keyState[83])) { dY = PLAYER_SPEED; } playerX += dX; playerY += dY; // turn light on if (mousePressed) { lightOn = true; } else { lightOn = false; } // update light angle playerHeading = atan2(mouseY - playerY, mouseX - playerX); // add chasers if (chaser.size() < chaserLimit) { float chaserHeading = random(TWO_PI); chaser.add(new Chaser( width / 2 + 0.75 * width * cos(chaserHeading), width / 2 + 0.75 * width * sin(chaserHeading))); } // increase chaser limit chaserLimit = 8 + (int) (frameCount / 120); // update chasers for (int i = 0; i < chaser.size(); i ++) { chaser.get(i).update(); } // remove inactive chasers int i2 = 0; while (i2 < chaser.size()) { if (chaser.get(i2).active) { i2 ++; } else { chaser.remove(i2); } } // draw background(64); if (lightOn) { drawLight(playerHeading); } drawLine(playerHeading); drawPlayer(playerX, playerY); for (int i = 0; i < chaser.size(); i ++) { chaser.get(i).draw(); } } void keyPressed() { keyState[keyCode] = true; print("Key " + keyCode + " pressed\n"); if (key == 'r') { setup(); } } void keyReleased() { keyState[keyCode] = false; } void drawPlayer(float x, float y) { stroke(0); if (lightOn) { fill(192); } else { fill(96); } ellipse(x, y, PLAYER_SIZE, PLAYER_SIZE); } void drawLine(float lightHeading) { if (lightOn) { stroke(255); } else { stroke(32); } line(playerX, playerY, mouseX, mouseY); } void drawLight(float lightHeading) { stroke(255); fill(192); triangle(playerX, playerY, playerX + BEAM_LENGTH * cos(lightHeading - LIGHT_ANGLE / 2), playerY + BEAM_LENGTH * sin(lightHeading - LIGHT_ANGLE / 2), playerX + BEAM_LENGTH * cos(lightHeading + LIGHT_ANGLE / 2), playerY + BEAM_LENGTH * sin(lightHeading + LIGHT_ANGLE / 2)); }