PlayerDriver.prototype.movePlayer = function(direction) { if (this.collideFlag) return; var player = this.entities.queryTag('player')[0]; var v = player.newtonian.velocity var h = player.steering.heading; var speed = 25; var v = Vec2.aquire(); switch (direction) { case PlayerDriver.directions.stop: h.set(0, 0); break; case PlayerDriver.directions.up: h.add( v.set(0, -speed)); break; case PlayerDriver.directions.down: h.add( v.set(0, speed)); break; case PlayerDriver.directions.left: h.add( v.set(-speed, 0)); break; case PlayerDriver.directions.right: h.add( v.set(speed, 0)); break; } h.limit(100); Vec2.release(v); };
LevelSystem.prototype.onFinishLevel = function(player, fEntity) { var finish = fEntity.finish; dist.assign(fEntity.position.location).sub(player.position.location); // constrain movement player.newtonian.acceleration .assign(dist) .smult(100); // constrain speed player.newtonian.velocity .normalize(dist.magnitude()*5); if (!finish.timeOut && !finish.finished) { finish.timeOut = 1500; this.messanger.trigger(fEntity, 'finish-start'); } if (finish.finished) { this.currentLevel++; this.loadLevel(); } };
function bounceEntity(entity) { var v = Vec2.aquire(); var aVel = entity.newtonian.velocity; v.assign(aVel).rotate(Math.PI).smult(3); entity.newtonian.velocity.assign(v); entity.steering.heading.set(0, 0); Vec2.release(v); }
CollisionSystem.prototype.update = function(dt, time) { var entities = this.entities.queryComponents(FILTER); var player = this.entities.queryTag('player')[0]; var pSpatial = player.spatial.hwidth; // brute force, only check player for (var n = 0; n < entities.length; n++) { var entity = entities[n]; if (entity === player) continue; var coincident = Vec2.rectIntersect( entity.position.location, entity.spatial.hwidth, player.position.location, player.spatial.hwidth); if (coincident) this.messanger.trigger(player, CollisionSystem.COINCIDENT, entity); } // if we're hitting a wall var m = this.maps; var p = player; var onMap = Vec2.rectContains( p.position.location, p.spatial.hwidth, m.position, m.hwidth) if (!onMap) { this.messanger.trigger(player, CollisionSystem.OUT_OF_BOUNDS); } };