class Ship extends Particle { constructor() { super(); this.pos = createVector(width/2, height/2); this.vel = createVector(); this.r = 10; this.angle = PI/-2; this.lives = 4; this.lifelock = false; this.dead = true; this.shield = false; this.specShield = false; this.powerup = null; this.animationDegree = 0; } main(lives) { if (lives.length === 0){ this.dead = true; } if (this.dead !== true) { this.display(); this.handleControls(); } } display() { this.show(); this.update(); this.edges(); }; handleCollision(entity) { if (int(dist(this.pos.x, this.pos.y, entity.pos.x, entity.pos.y)) <= entity.r + entity.shipOffset) { if (this.shield !== true){ explode(this.pos.x, this.pos.y, 50); this.die(); } } }; handleControls() { if (keyIsDown(RIGHT_ARROW)){ this.rotate(0.1); } else if (keyIsDown(LEFT_ARROW)){ this.rotate(-0.1); } if (keyIsDown(UP_ARROW)){ this.move(); } } move() { var force = p5.Vector.fromAngle(this.angle); this.vel.add(force); } rotate(degree){ this.angle += degree; } die(){ if (ship.shield !== true){ ship.pos = createVector(width/2, height/2); this.vel.mult(0); this.lives--; if (ship.lives === 0){ ship.dead = true; } this.shield = true; this.powerup = null; setTimeout(function(){ship.shield = false}, 3000); return lives.pop(); } } show(){ push(); noFill(); translate(this.pos.x, this.pos.y); strokeWeight(2); //make ship flash when shield is on if (this.shield === true && this.specShield === false){ if (frameCount % 60 >= 30){ stroke(22) } else { stroke(0,128,128); } } else if (this.specShield === true && this.shield === true){ stroke(0, random(255), random(255)); } else { stroke(0,128,128); } rotate(this.angle + PI/2); triangle(-this.r, this.r, this.r, this.r, 0, -this.r); pop(); } update(){ super.update(); this.vel.mult(0.99); this.vel.limit(4); } }