From 9796140defe1848a34bf6e2d6ae33bd73f3b43a0 Mon Sep 17 00:00:00 2001
From: Manuel Herrmann <it@icetruck.de>
Date: Sun, 27 Sep 2015 22:07:03 +0200
Subject: [PATCH] best pathfinder fix ever

---
 .../view/signups/game1/js/character.js        | 38 ++++++++++++++++++-
 1 file changed, 37 insertions(+), 1 deletion(-)

diff --git a/registration-system/view/signups/game1/js/character.js b/registration-system/view/signups/game1/js/character.js
index ae4045e..895268f 100644
--- a/registration-system/view/signups/game1/js/character.js
+++ b/registration-system/view/signups/game1/js/character.js
@@ -116,7 +116,43 @@ Char.prototype.animate = function() {
 	this.frames[currentFrame].style.display = 'block';
 };
 Char.prototype.physics = function() {
-	if (!this.moveTarget || this.moveTarget && this.moveTarget.length == 0) {
+	var x = this.translation[0];
+	var y = this.translation[1];
+	var self = this;
+	if (!this.pathFinder.canWalkOn(x-x%5, y-y%5)) {
+		console.log('stuck');
+		var queue = [[x-x%5, y-y%5, null, null]];
+
+		function recoverWalkable() {
+			var data = queue.shift();
+			var x = data[0];
+			var y = data[1];
+			var xDir = data[2];
+			var yDir = data[3];
+
+			if (self.pathFinder.canWalkOn(x, y)) {
+				Vec.assign(self.translation, [x, y]);
+				if (this.moveTarget && this.moveTarget.length > 0)
+				{
+					var lastTarget = self.moveTarget[self.moveTarget.length - 1];
+					self.setMoveTarget(lastTarget[0], lastTarget[1], self.onArrivalCallback.func, self.onArrivalCallback.params);
+				}
+				return true;
+			}
+			if (yDir !== false)
+				queue.push([x, y+5, false, true]);
+			if (yDir !== true)
+				queue.push([x, y-5, false, false]);
+			if (xDir !== false)
+				queue.push([x+5, y, true, false]);
+			if (xDir !== true)
+				queue.push([x-5, y, false, false]);
+		}
+		while (recoverWalkable() !== true) {}
+		console.log('stuck fixed');
+	}
+
+	if (!this.moveTarget || (this.moveTarget && this.moveTarget.length == 0)) {
 		try {
 			if (this.onArrivalCallback && typeof this.onArrivalCallback.func === 'function')
 				this.onArrivalCallback.func.apply(null, this.onArrivalCallback.params);
-- 
GitLab