var drawCrossHair = exports.drawCrossHair = function (display, target) { if (!CROSSHAIR_MOVE) { CROSSHAIR_MOVE = gamejs.image.load('images/circle-02.png'); } display.blit(CROSSHAIR_MOVE, $v.subtract(target, $v.divide(CROSSHAIR_MOVE.getSize(),2))); return; }
Bomb.prototype.draw = function(display, viewRect) { if (!viewRect.collideRect(this.rect)) { return false; } if (this.dying === true) { display.blit( this.animation.image, $v.subtract( $v.subtract(this.rect.topleft, $v.multiply(this.animation.image.getSize(),0.6)), viewRect.topleft ) ); } else { display.blit(this.image, $v.subtract(this.rect.topleft, viewRect.topleft)); } }
/** * tick */ function tick () { // event handling gamejs.event.get().forEach(function(event) { var direction = {}; direction[gamejs.event.K_UP] = [0, -1]; direction[gamejs.event.K_DOWN] = [0, 1]; direction[gamejs.event.K_LEFT] = [-1, 0]; direction[gamejs.event.K_RIGHT] = [1, 0]; if (event.type === gamejs.event.KEY_DOWN) { var delta = direction[event.key]; if (delta) { spearPosition = $v.add(spearPosition, delta); } } else if (event.type === gamejs.event.MOUSE_MOTION) { if (display.rect.collidePoint(event.pos)) { spearPosition = $v.subtract(event.pos, spear.getSize()); } } }); // draw display.clear(); display.blit(unit, unitPosition); display.blit(spear, spearPosition); // collision // the relative offset is automatically calculated by // the higher-level gamejs.sprite.collideMask(spriteA, spriteB) var relativeOffset = $v.subtract(spearPosition, unitPosition); var hasMaskOverlap = mUnit.overlap(mSpear, relativeOffset); if (hasMaskOverlap) { display.blit(font.render('COLLISION', '#ff0000'), [250, 50]); } display.blit(font.render('Move with mouse or cursor keys.'), [10, 250]) };
this.AI = function(){ var dist = $v.distance(self.game.player.position, self.position); //Player is far - try to catch him if(dist > 32){ var delta = $v.divide($v.subtract(self.game.player.position, self.position), dist/self.speed); self.move(delta); } else{ self.attack(self.game.player); } };
Camera.prototype.updatePosition = function(char) { var t = $v.subtract(char.pos, this.pos); if(t[0] !== this.cameraCenterPos[0]) { this.pos[0] = char.pos[0] - this.cameraCenterPos[0]; if(this.pos[0] > (this.sizeOfWorld[0] - this.cameraWidth)) this.pos[0] = (this.sizeOfWorld[0] - this.cameraWidth); if(this.pos[0] < 0) this.pos[0] = 0; } if(t[1] !== this.cameraCenterPos[1]) { this.pos[1] = char.pos[1] - this.cameraCenterPos[1]; if(this.pos[1] > this.sizeOfWorld[1] - this.cameraHeight) this.pos[1] = (this.sizeOfWorld[1] - this.cameraHeight); if(this.pos[1] < 0) this.pos[1] = 0; } };
gamejs.event.get().forEach(function(event) { var direction = {}; direction[gamejs.event.K_UP] = [0, -1]; direction[gamejs.event.K_DOWN] = [0, 1]; direction[gamejs.event.K_LEFT] = [-1, 0]; direction[gamejs.event.K_RIGHT] = [1, 0]; if (event.type === gamejs.event.KEY_DOWN) { var delta = direction[event.key]; if (delta) { spearPosition = $v.add(spearPosition, delta); } } else if (event.type === gamejs.event.MOUSE_MOTION) { if (display.rect.collidePoint(event.pos)) { spearPosition = $v.subtract(event.pos, spear.getSize()); } } });
this.AI = function(){ var direction = {}; direction[0] = [0, -1]; direction[1] = [0, 1]; direction[2] = [-1, 0]; direction[3] = [1, 0]; var dist = $v.distance(self.game.player.position, self.position); //Player is far enough, do random things if(dist > 100){ var delta = $v.multiply(direction[Math.floor(Math.random() * 4)], self.speed); self.move(delta); } else{ var delta = $v.divide($v.subtract(self.position, self.game.player.position), dist/self.speed); self.move(delta); } };
Room.prototype.update = function(ms) { this._update_room_map(); for (var i = 0; i < this._robots.length; i++) { var r = this._robots[i]; var rz = new gamejs.Rect(r.rect); if (r.state == enemy.Enemy.StateEnum.DEAD) continue; r.update(ms); } var GRAVITY = 800.0; var eps = 1e-2; var limit = 100; var forces = new Array(); for (var i = 0; i < this._robots.length; i++) { var sum = [0,0]; for (var j = 0; j < this._robots.length; j++) if (i != j) { var r1 = this._robots[i]; var r2 = this._robots[j]; var dir = vectors.subtract(r1.center(), r2.center()); var d = vectors.len(dir); var zz = false; if (d <= eps) { zz = true; var ang = Math.random() * 3.141592653589879 * 2; dir = [Math.sin(ang), Math.cos(ang)]; } if (d < limit) d = limit; dir = vectors.unit(dir); var add_force = vectors.multiply(dir, GRAVITY / (d*d)); sum = vectors.add(sum, add_force); } forces[i] = sum; } for (var i = 0; i < this._robots.length; i++) { this._robots[i]._make_sliding_move(forces[i][0], forces[i][1]); } }
function handle (event) { /** MOUSE 0 DOWN **/ if ((event.type === gamejs.event.MOUSE_DOWN) && (event.button === 0)) { selectDown = event.pos; /** MOUSE 0 UP **/ } else if ((event.type === gamejs.event.MOUSE_UP) && (event.button === 0) ) { var pos = event.pos; var vehiclesClicked = vehicles.collidePoint(event.pos); if (selectRect) { selectedVehicles = vehicles.sprites().filter(function(v) { return (v.rect.collideRect(selectRect)); }); } else if (vehiclesClicked && vehiclesClicked.length) { // vehicle select? selectedVehicles = [vehiclesClicked[0]]; sounds.unitSelected(); gamejs.log('vehicle selected ', selectedVehicles); } else if (selectedVehicles) { var centers = selectedVehicles.map(function(v) { return v.rect.center; }); // put selected vehicles on a line var centroid = $m.centroid(centers); var path = $v.subtract(centroid, pos); var targetDelta = $v.unit($v.rotate(path, Math.PI/2)); var poses = []; if (selectedVehicles.length) { for (var i=0;i<selectedVehicles.length;i++) { var f = i - selectedVehicles.length/2; var t = $v.add(pos, $v.multiply(targetDelta, f * 50)); poses.push(t); } } selectedVehicles.forEach(function(v, idx) { v.behaviour.type = 'arrival'; v.behaviour.target = poses[idx] }); sounds.unitMove(); gamejs.log('Vehicle order confirmed ', pos); } selectRect = null; selectDown = null; /** MOUSE MOTION **/ } else if ((event.type === gamejs.event.MOUSE_MOTION) && selectDown) { var delta = [event.pos[0] - selectDown[0], event.pos[1] - selectDown[1]]; if ($v.len(delta) > 10) { selectRect = new gamejs.Rect(selectDown, [event.pos[0] - selectDown[0], event.pos[1] - selectDown[1]]); selectedVehicles = null; } else { selectRect = null; } /** MOUSE 0 UP **/ } else if((event.type === gamejs.event.MOUSE_UP) && event.button === 2) { selectRect = null; selectDown = null; selectedVehicles = null; sounds.unitDeselect(); /** KEY UP **/ } else if((event.type === gamejs.event.KEY_UP)) { if (selectedVehicles) { var fireWeapon = false; selectedVehicles.forEach(function(v) { v.weapons.forEach(function(w) { if (w.key === event.key && w.cooldownStatus >= w.cooldownDuration) { if (w.type === 'ProjectileCloud') { custom({type: 'spawnProjectileCloud', arguments: [v.rect.center, v.orientationVector]}); w.cooldownStatus = 0; fireWeapon = true; } else if(w.type.indexOf('Laser') > -1) { // FIXME custom({type: ' w.cooldownStatus = 0; w.isActive = true; fireWeapon = true; } } }); }); if (!fireWeapon) { if (event.key == gamejs.event.K_s) { selectedVehicles.forEach(function(v) { v.behaviour.type = 'stop'; }); } } } } };
Ship.prototype.point_to = function(coords) { var diff = $v.subtract(coords, [this._x, this._y]); console.log(diff) // this.rotation = Math.atan2(diff[1], diff[0]) * 180 / Math.PI // this.image = gamejs.transform.rotate(this.originalImage, this.rotation); };