diff --git a/registration-system/view/signups/game1/js/camera.js b/registration-system/view/signups/game1/js/camera.js index 21b4c62fa64b1b8defa3cb8bf5d1b3b07566c782..8f82c4ad858bffbc3206003ced1f467ca3f3e5dc 100644 --- a/registration-system/view/signups/game1/js/camera.js +++ b/registration-system/view/signups/game1/js/camera.js @@ -51,9 +51,11 @@ Camera.prototype.updatePosition = function() { var translation = Vec.add(Vec.flipSign(this.translation), Vec.mul(Game.config.size, 0.5)); // move subject to center if(translation[0] > 0) translation[0] = 0; if(translation[1] > 0) translation[1] = 0; - // @TODO: rework for firefox - //if(translation[0] < (Game.config.size[0] - svg.clientWidth)) translation[0] = Game.config.size[0] - svg.clientWidth; - //if(translation[1] < (Game.config.size[1] - svg.clientHeight)) translation[1] = Game.config.size[1] - svg.clientHeight; + + var width = $(svg).width(); + var height = $(svg).height(); + if(translation[0] < (Game.config.size[0] - width)) translation[0] = Game.config.size[0] - width; + if(translation[1] < (Game.config.size[1] - height)) translation[1] = Game.config.size[1] - height; root.style.left = translation[0]+'px'; root.style.top = translation[1]+'px'; }; diff --git a/registration-system/view/signups/game1/js/character.js b/registration-system/view/signups/game1/js/character.js index 2ead572408ea081aadf5a37695c8127ca624c5d8..17ecc8f8fcf1b4830bc9e0f98c2bbccd6a61543f 100644 --- a/registration-system/view/signups/game1/js/character.js +++ b/registration-system/view/signups/game1/js/character.js @@ -24,8 +24,8 @@ function Char(svg, options) { }); } Char.prototype.findSpawn = function(spawnId) { - // [1320, svgFlipY(svg[0][0], 500)] - var spawn = this.svg.select(spawnId ? '#'+spawnId : "#player_spawn"); + if (!spawnId) spawnId = 'player_spawn'; + var spawn = this.svg.select('#'+spawnId); if (!spawn[0][0]) console.error("Could not find spawn: #" + spawnId); var bbox = spawn[0][0].getBBox(); return Vec.add(getTranslation(spawn[0][0], this.svg[0][0]), [bbox.x, bbox.y]); @@ -79,9 +79,13 @@ Char.prototype.animate = function() { direction = (ySpeed >= 0) ? 0 : 2; } + var currentFrame = this.currentFrame; + if (currentFrame > 0 && Game.config.moonWalk) + currentFrame = this.frames.length - currentFrame; + // hide last visible frame - if (this.frames && this.frames[this.currentFrame]) { - var lastFrame = this.frames[this.currentFrame]; + if (this.frames && this.frames[currentFrame]) { + var lastFrame = this.frames[currentFrame]; lastFrame.style.display = 'none'; } // change animation @@ -104,8 +108,12 @@ Char.prototype.animate = function() { this.currentFrame += 1; // walk this.currentFrame %= this.frames.length; + var currentFrame = this.currentFrame; + if (currentFrame > 0 && Game.config.moonWalk) + currentFrame = this.frames.length - currentFrame; + // show current frame - this.frames[this.currentFrame].style.display = 'block'; + this.frames[currentFrame].style.display = 'block'; }; Char.prototype.physics = function() { if (this.moveTarget && this.moveTarget.length == 0) return; @@ -127,7 +135,10 @@ Char.prototype.physics = function() { var nextPosition = (d < g_smallValue) ? this.moveTarget[0] : Vec.add(this.translation, v); } while (!this.pathFinder.canWalkOn(nextPosition[0], nextPosition[1])); - Vec.assign(this.translation, nextPosition); + if (stuckFixer >= 3.0) + this.setMoveTarget(this.translation[0], this.translation[1]); + else + Vec.assign(this.translation, nextPosition); } Game.eventHandler.triggerEventOn('walkon', this.translation[0], this.translation[1]); diff --git a/registration-system/view/signups/game1/js/events.js b/registration-system/view/signups/game1/js/events.js index 9918bc9406c66f864726f544a058cb6058ef2150..9560ac3eb556da7b4a8aaa50527afa4206364c98 100644 --- a/registration-system/view/signups/game1/js/events.js +++ b/registration-system/view/signups/game1/js/events.js @@ -29,29 +29,36 @@ function EventHandler(svg) { } EventHandler.prototype.hasEventOn = function (trigger, x, y) { - return this.getEventOn(trigger, x, y) !== undefined; + return this.getEventOn(trigger, x, y, function() {}); }; EventHandler.prototype.getEventOn = function(trigger, x, y, callback) { if (!this.walkOnEvents) this.walkOnEvents = {}; // currently active events + var hasEvent = false; for (var i = 0; i < this.eventNodes[trigger].length; ++i) { var node = this.eventNodes[trigger][i]; if (node.path.isInside(x, y)) { - if (!this.walkOnEvents[node.id]) { + hasEvent = true; + if (trigger == 'walkon' && !this.walkOnEvents[node.id]) { this.walkOnEvents[node.id] = true; callback(node, true); + } else { + callback(node); } } else { - delete this.walkOnEvents[node.id]; + if (trigger == 'walkon' && this.walkOnEvents[node.id]) { + delete this.walkOnEvents[node.id]; + callback(node, false); + } } } - return undefined; + return hasEvent; }; EventHandler.prototype.triggerEventOn = function (trigger, x, y) { var self = this; - this.getEventOn(trigger, x, y, function(event, bEnter) { + return this.getEventOn(trigger, x, y, function(event, bEnter) { self.handleEvent(event, {trigger: trigger, x: x, y: y, bEnter: bEnter}); }); }; @@ -70,8 +77,7 @@ EventHandler.prototype.triggerEventOn = function (trigger, x, y) { EventHandler.prototype.handleEvent = function (event, context) { switch (event.type) { case 'achievement': - if (context.bEnter) - Game.achievements.triggerAchievement(event.id, context); + Game.achievements.triggerAchievement(event.id, context); break; case 'mapchange': Game.instance.nextMap(event.destination, event.target); diff --git a/registration-system/view/signups/game1/js/game.js b/registration-system/view/signups/game1/js/game.js index c1cbf18001e4fdbda828f015adc5a3aeb8fe835b..f699e23da693299f86d3fdc7b8626a1b859e93ec 100644 --- a/registration-system/view/signups/game1/js/game.js +++ b/registration-system/view/signups/game1/js/game.js @@ -89,8 +89,9 @@ Game.prototype.loadMap = function(map, spawn) { svg.on("click", function(d) { var xy = getMouseXY(); if (xy) { - Game.char.setMoveTarget(xy.x, xy.y); - Game.eventHandler.triggerEventOn('click', xy.x, xy.y); + if (!Game.eventHandler.triggerEventOn('click', xy.x, xy.y)) { + Game.char.setMoveTarget(xy.x, xy.y); + } } }).on('mouseenter', function () { mousePointer.style('display', 'block') @@ -101,6 +102,7 @@ Game.prototype.loadMap = function(map, spawn) { mousePointer.attr('cx', xy.x); mousePointer.attr('cy', xy.y); var colour = Game.char.pathFinder.canWalkOn(xy.x, xy.y) ? 'green' : 'red'; + if (Game.eventHandler.hasEventOn('click', xy.x, xy.y)) colour = 'blue'; mousePointer.style("fill", colour); }); diff --git a/registration-system/view/signups/game1/maps/map_landing.svg b/registration-system/view/signups/game1/maps/map_landing.svg index 86107aa353520c3d7c5acf265a6f8b0772815140..aad02f82218d1ac78809fefec17097feb0eea803 100644 Binary files a/registration-system/view/signups/game1/maps/map_landing.svg and b/registration-system/view/signups/game1/maps/map_landing.svg differ diff --git a/registration-system/view/signups/game1/test.html b/registration-system/view/signups/game1/test.html index 7451f50b3679c47d239fc1d04146e36d3f578111..291b9bf45767c34245041f2127734f0a2385bec3 100644 --- a/registration-system/view/signups/game1/test.html +++ b/registration-system/view/signups/game1/test.html @@ -70,6 +70,7 @@ pathFindingGridSize: UrlComponents.isSet('verbosePF') ? 5 : 5, verbosePathFinder: UrlComponents.isSet('verbosePF'), usePathFinding: true, + moonWalk: false, size: [800, 600] }); game.run();