diff --git a/registration-system/view/signups/game1/js/character.js b/registration-system/view/signups/game1/js/character.js index dd965075127f7cb6e946864d5f142c50fad429aa..2ead572408ea081aadf5a37695c8127ca624c5d8 100644 --- a/registration-system/view/signups/game1/js/character.js +++ b/registration-system/view/signups/game1/js/character.js @@ -109,25 +109,26 @@ Char.prototype.animate = function() { }; Char.prototype.physics = function() { if (this.moveTarget && this.moveTarget.length == 0) return; + if (Vec.equals(this.translation, this.moveTarget[0])) { this.moveTarget.shift(); - return; - } - - var v = Vec.add(Vec.flipSign(this.translation), this.moveTarget[0]); - var d = Vec.length(v); + } else { + var stuckFixer = 0; + do { + var v = Vec.add(Vec.flipSign(this.translation), this.moveTarget[0]); + var d = Vec.length(v); - if (d > this.maxSpeed) { - var n = Vec.mul(v, 1/d); // normalized - v = Vec.mul(n, this.maxSpeed); - } + if (d > this.maxSpeed) { + var n = Vec.mul(v, 1 / d); // normalized + v = Vec.mul(n, this.maxSpeed + stuckFixer); + } + stuckFixer += 0.5; - var nextPosition = (d < g_smallValue) ? this.moveTarget[0] : Vec.add(this.translation, v); + var nextPosition = (d < g_smallValue) ? this.moveTarget[0] : Vec.add(this.translation, v); + } while (!this.pathFinder.canWalkOn(nextPosition[0], nextPosition[1])); - if (this.pathFinder.canWalkOn(nextPosition[0], nextPosition[1])) Vec.assign(this.translation, nextPosition); - else - this.moveTarget.shift(); + } 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 ef8d2ecf2c6f0501fce3c7525e391b02ef06b443..9918bc9406c66f864726f544a058cb6058ef2150 100644 --- a/registration-system/view/signups/game1/js/events.js +++ b/registration-system/view/signups/game1/js/events.js @@ -32,18 +32,28 @@ EventHandler.prototype.hasEventOn = function (trigger, x, y) { return this.getEventOn(trigger, x, y) !== undefined; }; -EventHandler.prototype.getEventOn = function(trigger, x, y) { +EventHandler.prototype.getEventOn = function(trigger, x, y, callback) { + if (!this.walkOnEvents) this.walkOnEvents = {}; // currently active events + for (var i = 0; i < this.eventNodes[trigger].length; ++i) { - if (this.eventNodes[trigger][i].path.isInside(x, y)) { - return this.eventNodes[trigger][i]; + var node = this.eventNodes[trigger][i]; + if (node.path.isInside(x, y)) { + if (!this.walkOnEvents[node.id]) { + this.walkOnEvents[node.id] = true; + callback(node, true); + } + } else { + delete this.walkOnEvents[node.id]; } } return undefined; }; EventHandler.prototype.triggerEventOn = function (trigger, x, y) { - var event = this.getEventOn(trigger, x, y); - if (event) this.handleEvent(event, {trigger: trigger, x: x, y: y}); + var self = this; + this.getEventOn(trigger, x, y, function(event, bEnter) { + self.handleEvent(event, {trigger: trigger, x: x, y: y, bEnter: bEnter}); + }); }; /** @@ -58,12 +68,10 @@ EventHandler.prototype.triggerEventOn = function (trigger, x, y) { * @param event */ EventHandler.prototype.handleEvent = function (event, context) { - if (context.trigger == 'walkon') - console.log('walkon'); - switch (event.type) { case 'achievement': - Game.achievements.triggerAchievement(event.id, context); + if (context.bEnter) + Game.achievements.triggerAchievement(event.id, context); break; case 'mapchange': Game.instance.nextMap(event.destination, event.target);