function drawship(ctx, x, y,rot) { //ctx.strokeStyle = "black"; ctx.lineWidth = 3; ctx.save(); ctx.translate(x,y); ctx.rotate(rot); ctx.beginPath(); ctx.moveTo(20,0); ctx.lineTo(-20,10); ctx.lineTo(-16,7); ctx.lineTo(-16,-7); ctx.lineTo(-20,-10); ctx.closePath(); ctx.stroke(); if (ctx != _ctx) ctx.restore(); } var _ship = { x : 0, y : 0, dx : 0, dy : 0, angle : 0, da : 0, invulnerable : 180, reset : function() { this.x = _width/2; this.y = _height/2; this.dx = this.dy = this.da = 0; this.angle = 0; this.da = 0; this.invulnerable = 180; }, draw : function() { _ctx.strokeStyle = (this.invulnerable? "blue" : "black"); drawship(_ctx, this.x,this.y,this.angle); if (_thrusting) { _ctx.strokeStyle = "red"; _ctx.beginPath(); _ctx.moveTo(-18,6); _ctx.lineTo(-35,0); _ctx.lineTo(-18,-6); _ctx.moveTo(-18,6); _ctx.closePath(); _ctx.stroke(); } _ctx.restore(); }, update : function() { if (this.invulnerable > 0) this.invulnerable--; if (_thrusting) { this.dy += .15 * Math.sin(this.angle); this.dx += .15 * Math.cos(this.angle); } else { this.dx *= .997; this.dy *= .997; } this.x = this.x + this.dx; if (this.x <= -20) this.x = _width+20; else if (this.x > _width+20) this.x = -20; this.y = this.y + this.dy; if (this.y <= -20) this.y = _height+20; else if (this.y > _height+20) this.y = -20; this.angle = this.angle + this.da; if (_firing) { if (_time <= 0) { var b = new Bullet(this.x, this.y, this.angle, 20); _bullets.push(b); _time = 8; } } }, hit : function(r) { if (this.invulnerable > 0) return false; var rad = 20, t = Math.PI + Math.atan(.5); var x = rad * Math.cos(this.angle); var y = rad * Math.sin(this.angle); if (r.hit(this.x + x,this.y + y)) return true; rad = Math.sqrt(500); x = rad * Math.cos(this.angle+t); y = rad * Math.sin(this.angle+t); if (r.hit(this.x + x,this.y + y)) return true; x = rad * Math.cos(this.angle-t); y = rad * Math.sin(this.angle-t); if (r.hit(this.x + x,this.y + y)) return true; } };