From 3e3d0ca85e6143255a70ecf82f3fc33dc5ea3395 Mon Sep 17 00:00:00 2001 From: Kevin Lee <kevin@infinite-lee.com> Date: Mon, 21 May 2018 17:43:17 -0700 Subject: [PATCH] Use the teleport "hitPoint" instead of "newPosition" when calculating navNode. made a separate "resetPositionOnNavMesh()" function specifically for use with teleport instead of cloberring everything into "setPositionOnNavMesh()". --- src/components/character-controller.js | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/components/character-controller.js b/src/components/character-controller.js index 2b86ff0a3..7b2145a4a 100644 --- a/src/components/character-controller.js +++ b/src/components/character-controller.js @@ -75,7 +75,9 @@ AFRAME.registerComponent("character-controller", { }, handleTeleport: function(event) { - this.setPositionOnNavMesh(event.detail.oldPosition, event.detail.newPosition, this.el.object3D, true); + const position = event.detail.newPosition; + const navPosition = event.detail.hitPoint; + this.resetPositionOnNavMesh(position, navPosition, this.el.object3D); }, tick: (function() { @@ -147,21 +149,26 @@ AFRAME.registerComponent("character-controller", { }; })(), - setPositionOnNavMesh: function(startPosition, endPosition, object3D, resetPosition = false) { + setPositionOnNavMesh: function(startPosition, endPosition, object3D) { const nav = this.el.sceneEl.systems.nav; if (nav.navMesh) { - if (!this.navGroup || resetPosition) { + if (!this.navGroup) { this.navGroup = nav.getGroup(endPosition); } - - if (!this.navNode || resetPosition) { - this.navNode = nav.getNode(endPosition, this.navGroup) || this.navNode; - } - + this.navNode = this.navNode || nav.getNode(endPosition, this.navGroup); this.navNode = nav.clampStep(startPosition, endPosition, this.navGroup, this.navNode, object3D.position); } }, + resetPositionOnNavMesh: function(position, navPosition, object3D) { + const nav = this.el.sceneEl.systems.nav; + if (nav.navMesh) { + this.navGroup = nav.getGroup(position); + this.navNode = nav.getNode(navPosition, this.navGroup) || this.navNode; + this.navNode = nav.clampStep(position, position, this.navGroup, this.navNode, object3D.position); + } + }, + updateVelocity: function(dt) { const data = this.data; const velocity = this.velocity; -- GitLab