var _rocks = []; var _nr = [0, 0, 3, 2]; var _rs = [0, 100, 50, 25]; function Rock(def) { var scalar = [1.0, 1.0, 0.8, 0.6]; if (typeof def == "object") { this.x = Math.floor(def.x); this.y = Math.floor(def.y); this.scale = def.scale-1; } else { do { this.x = R(0,_width); this.y = R(0,_height); } while (dist(this.x,this.y,_ship.x,_ship.y) < 1000); this.scale = 3; } this.angle = 0; this.spin = scalar[this.scale] * (R(-5,5)*Math.PI)/180; this.dx = ((Math.random()*10)-5) * scalar[this.scale]; this.dy = ((Math.random()*10)-5) * scalar[this.scale]; this.radius = 0; this.points = []; for(var i=0; i < 16; i++) { this.points[i] = Math.floor(Math.random()*8)+16; this.radius = Math.max(this.radius, this.points[i]); } this.radius *= this.scale; this.radiusq = this.radius * this.radius; this.lx = this.x - this.radius; this.ly = this.y - this.radius; this.gx = this.x + this.radius; this.gy = this.y + this.radius; this.draw = function() { _ctx.strokeStyle = "black"; _ctx.lineWidth = 2; _ctx.save(); _ctx.translate(this.x,this.y); this.angle = (this.angle + this.spin) % (Math.PI*2); _ctx.rotate(this.angle); _ctx.scale(this.scale, this.scale); _ctx.beginPath(); for(var i = 0; i < 16; i++) { if (i) _ctx.lineTo(this.points[i],0); else _ctx.moveTo(this.points[i],0); _ctx.rotate((Math.PI*2)/this.points.length); } _ctx.closePath(); _ctx.restore(); // _ctx.moveTo(this.x+this.radius, this.y); // _ctx.arc(this.x, this.y, this.radius, 0, 360); _ctx.stroke(); }; this.update = function() { 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.lx = this.x - this.radius; this.ly = this.y - this.radius; this.gx = this.x + this.radius; this.gy = this.y + this.radius; // this.angle = this.angle + this.spin; }; this.hit = function(x, y) { if (x < this.lx || x > this.gx) return false; if (y < this.ly || y > this.gy) return false; if (dist(x,y, this.x,this.y) <= this.radiusq) return true; return false; }; }