class Spinner extends Enemy { Spinner(PVector p, float time) { timer = time; radius = 20; pos = new PVector(p.x, p.y); } boolean tick() { timer -= warp_speed; if(timer < 0) pos.x -= warp_speed; if(bullet != null && inRadius(pos, bullet, radius) && timer < 0) { //make explosion explosions.add(new Explosion(pos, radius)); if(!muted) exploSound.trigger(); score += 100; bullet = null; return true; } if(pos.x < -radius) return true; return false; } void draw() { if(timer < 0) { noStroke(); fill(255, 128, 192); arc(pos.x, pos.y, radius, radius, timer/100, timer/100+3); arc(pos.x, pos.y, radius, radius, timer/100+PI, timer/100+PI+3); fill(128, 128, 128); ellipse(pos.x, pos.y, radius*0.6, radius*0.6); } else { if(timer < WARN_TIME) { // strokeWeight(2); noStroke(); fill(255, 128, 192, 255-255*timer/WARN_TIME); rectMode(RADIUS); rect(pos.x-timer/5, pos.y, timer/5, radius); } } } } class Waver extends Enemy { float amp; float start_y; Waver(PVector p, float time, float amplitude) { timer = time; radius = 30; amp = amplitude; pos = new PVector(p.x, p.y); start_y = p.y; } boolean tick() { timer -= warp_speed; if(timer < 0) { pos.x -= warp_speed; pos.y = start_y + amp * sin(timer / 100); } if(bullet != null && inRadius(pos, bullet, radius) && timer < 0) { //make explosion explosions.add(new Explosion(pos, radius)); if(!muted) exploSound.trigger(); score += 250; bullet = null; return true; } if(pos.x < -radius) return true; return false; } void draw() { if(timer < 0) { noStroke(); fill(128, 255, 192); ellipse(pos.x, pos.y, radius, abs(sin(timer / 50))*radius/2 + radius/2); fill(128, 128, 128); ellipse(pos.x, pos.y, radius*0.5, radius*0.5); } else { if(timer < WARN_TIME) { // strokeWeight(2); noStroke(); fill(128, 255, 192, 255-255*timer/WARN_TIME); rectMode(RADIUS); rect(pos.x-timer/5, pos.y, timer/5, radius); } } } } ///look at me copy and paste on a deadline! class Asteroid extends Enemy { Asteroid(PVector p, float time) { timer = time; radius = 20+random(30); pos = new PVector(p.x, p.y); } boolean tick() { timer -= warp_speed; if(timer < 0) pos.x -= warp_speed; if(bullet != null && inRadius(pos, bullet, radius) && timer < 0) { //make explosion explosions.add(new Explosion(pos, radius)); if(!muted) exploSound.trigger(); score += 100; bullet = null; return true; } if(pos.x < -radius) return true; return false; } void draw() { if(timer < 0) { noStroke(); fill(192, 128, 64); ellipse(pos.x, pos.y, radius, radius); } else { if(timer < WARN_TIME) { // strokeWeight(2); noStroke(); fill(192, 128, 64, 255-255*timer/WARN_TIME); rectMode(RADIUS); rect(pos.x - timer/5, pos.y, timer/5, radius); } } } } class MetalAsteroid extends Enemy { MetalAsteroid(PVector p, float time) { timer = time; radius = 50; pos = new PVector(p.x, p.y); } boolean tick() { timer -= warp_speed; if(timer < 0) pos.x -= warp_speed; if(bullet != null && inRadius(pos, bullet, radius) && timer < 0) { //make explosion if(!muted) dinkSound.trigger(); explosions.add(new Explosion(bullet, 10)); bullet = null; //return true; } if(pos.x < -radius) return true; return false; } void draw() { if(timer < 0) { noStroke(); fill(168, 168, 168); ellipse(pos.x, pos.y, radius, radius); } else { if(timer < WARN_TIME) { // strokeWeight(2); noStroke(); fill(168, 168, 168, 255-255*timer/WARN_TIME); rectMode(RADIUS); rect(pos.x - timer/5, pos.y, timer/5, radius); } } } } class Explosion extends Particle { float r; Explosion(PVector pos, float radius) { super(pos, new PVector(-warp_speed, 0), 60); r = radius; } void draw() { noStroke(); fill(color(255, 255 * life/maxlife * 2, 255 * life / maxlife, 255 * life / maxlife *2)); ellipse(pos.x, pos.y, r * 1.5* ((life/(float)maxlife)), r * 1.5 * ((life/(float)maxlife))); } }