class Ship { constructor(x, y) { this.x = x; this.y = y; this.angle = 0; // Physics variables this.v_x = 0; this.v_y = 0; this.a_x = 0; this.a_y = 0; // State variables this.rotating = 0; this.moving = false; this.breaking = false; } draw(ctx) { ctx.save(); ctx.translate(this.x, this.y); ctx.rotate(rad(this.angle)); ctx.strokeStyle = "rgb(255, 255, 255)"; ctx.beginPath(); ctx.moveTo(25, 0); ctx.lineTo(-15, -15); ctx.lineTo(-10, -5); ctx.lineTo(-10, 5); ctx.lineTo(-15, 15); ctx.closePath(); ctx.stroke(); if(this.moving) { ctx.beginPath(); ctx.fillStyle = "red"; ctx.moveTo(-10, -5); ctx.lineTo(-25, 0); ctx.lineTo(-10, 5); ctx.fill(); } ctx.restore(); } update() { this.angle += 5 * this.rotating; // Move the ship if necessary let r = rad(this.angle); if(this.moving == true) { this.a_x = 0.1 * Math.cos(r); this.a_y = 0.1 * Math.sin(r); } this.v_x = this.v_x + this.a_x; // this.v_y += this.a_y this.v_y = this.v_y + this.a_y; this.x = this.x + this.v_x; this.y = this.y + this.v_y; this.a_x = 0; this.a_y = 0; if(this.breaking) { this.v_x += 0.05 * Math.cos(r + Math.PI); this.v_y += 0.05 * Math.sin(r + Math.PI); } } shoot() { console.log("shoot"); return new Bullet(this.x, this.y, this.angle); } } function rad(angle) { return angle * Math.PI / 180.0 ; }