asteroids/models/asteroid.js
2025-12-30 17:18:16 -05:00

82 lines
2.1 KiB
JavaScript

class Asteroid extends Particle {
constructor(x, y, size) {
super(x, y);
this.size = size;
this.vel = p5.Vector.random2D();
this.vel.mult(2);
this.tmpvel = createVector();
this.shipOffset = 7; // offset distance between ship for collision calc
//change sides, size, and velocity depending on the size of the rock
if (this.size === 'full'){
this.r = 50;
this.s = 7;
this.vel.mult(1);
this.p = 20;
} else if (this.size === 'small'){
this.r = 30;
this.s = 13;
this.vel.mult(1.25);
this.p = 30;
} if (this.size === 'tiny'){
this.r = 13;
this.s = 6;
this.vel.mult(1.5);
this.p = 50;
}
}
display() {
this.show();
this.update();
this.edges();
};
//double and shrink when rock is hit... destroy if size is 'tiny'
break() {
if (this.size === 'full') {
return [
rock.push(new Asteroid(this.pos.x, this.pos.y, 'small')),
rock.push(new Asteroid(this.pos.x, this.pos.y, 'small'))
];
} else if (this.size === 'small') {
return [
rock.push(new Asteroid(this.pos.x, this.pos.y, 'tiny')),
rock.push(new Asteroid(this.pos.x, this.pos.y, 'tiny'))
];
}
if (this.size === 'tiny') {
return [];
}
};
getShot(entity, idx) {
if (int(dist(entity.pos.x, entity.pos.y, this.pos.x, this.pos.y)) <= this.r) {
handlePoints(this.p);
explode(this.pos.x, this.pos.y, 40);
this.break();
pew.shift(entity);
rock.splice(idx, 1);
}
}
show() {
push();
stroke(255);
noFill();
translate(this.pos.x, this.pos.y);
polygon(0, 0, this.r, this.s);
pop();
}
update(){
this.vel.limit(limiter);
this.pos.add(this.vel);
}
}