Game.roundPos = function(pos) {
new_pos = {x: Math.round(pos.x), y: Math.round(pos.y)};
return new_pos;
}
this.getNextPosition = function(dir, dt) {
var next = {x: this.position.x, y: this.position.y};
if(dir == Game.Direction.Left) {
next.x = next.x - dt;
next.y = Math.round(next.y);
} else if(dir == Game.Direction.Right) {
next.x = next.x + dt;
next.y = Math.round(next.y);
} if(dir == Game.Direction.Up) {
next.y = next.y - dt;
next.x = Math.round(next.x);
} if(dir == Game.Direction.Down) {
next.y = next.y + dt;
next.x = Math.round(next.x);
}
return next;
}
this.update = function(dt) {
if(this.direction === null) return;
var world = this.world;
var next = this.getNextPosition(this.direction, dt);
var pos = Game.roundPos(next);
if(!world.isWall(pos.x, pos.y) && !world.isBase(pos.x, pos.y)) {
this.position = next;
} else {
this.direction = null;
}
// rest of the code... not important for this problem.
}
R2FtZS5yb3VuZFBvcyA9IGZ1bmN0aW9uKHBvcykgewogIG5ld19wb3MgPSB7eDogTWF0aC5yb3VuZChwb3MueCksIHk6IE1hdGgucm91bmQocG9zLnkpfTsKICByZXR1cm4gbmV3X3BvczsKfQoKdGhpcy5nZXROZXh0UG9zaXRpb24gPSBmdW5jdGlvbihkaXIsIGR0KSB7CiAgIHZhciBuZXh0ID0ge3g6IHRoaXMucG9zaXRpb24ueCwgeTogdGhpcy5wb3NpdGlvbi55fTsKICAgaWYoZGlyID09IEdhbWUuRGlyZWN0aW9uLkxlZnQpIHsKICAgICAgbmV4dC54ID0gbmV4dC54IC0gZHQ7CiAgICAgIG5leHQueSA9IE1hdGgucm91bmQobmV4dC55KTsKICAgfSBlbHNlIGlmKGRpciA9PSBHYW1lLkRpcmVjdGlvbi5SaWdodCkgewogICAgICBuZXh0LnggPSBuZXh0LnggKyBkdDsKICAgICAgbmV4dC55ID0gTWF0aC5yb3VuZChuZXh0LnkpOwogICB9IGlmKGRpciA9PSBHYW1lLkRpcmVjdGlvbi5VcCkgewogICAgICBuZXh0LnkgPSBuZXh0LnkgLSBkdDsKICAgICAgbmV4dC54ID0gTWF0aC5yb3VuZChuZXh0LngpOwogICB9IGlmKGRpciA9PSBHYW1lLkRpcmVjdGlvbi5Eb3duKSB7CiAgICAgIG5leHQueSA9IG5leHQueSArIGR0OwogICAgICBuZXh0LnggPSBNYXRoLnJvdW5kKG5leHQueCk7CiAgIH0KICAgcmV0dXJuIG5leHQ7Cn0KCnRoaXMudXBkYXRlID0gZnVuY3Rpb24oZHQpIHsKICAgaWYodGhpcy5kaXJlY3Rpb24gPT09IG51bGwpIHJldHVybjsKCiAgIHZhciB3b3JsZCA9IHRoaXMud29ybGQ7CiAgIHZhciBuZXh0ID0gdGhpcy5nZXROZXh0UG9zaXRpb24odGhpcy5kaXJlY3Rpb24sIGR0KTsKICAgdmFyIHBvcyA9IEdhbWUucm91bmRQb3MobmV4dCk7CgogICBpZighd29ybGQuaXNXYWxsKHBvcy54LCBwb3MueSkgICYmICF3b3JsZC5pc0Jhc2UocG9zLngsIHBvcy55KSkgewogICAgIHRoaXMucG9zaXRpb24gPSBuZXh0OwogICB9IGVsc2UgewogICAgIHRoaXMuZGlyZWN0aW9uID0gbnVsbDsKICAgfQoKICAgLy8gcmVzdCBvZiB0aGUgY29kZS4uLiBub3QgaW1wb3J0YW50IGZvciB0aGlzIHByb2JsZW0uCgp9