diff --git a/package.json b/package.json index 2d4901d3943dd6a8d752ced976608016fe96ce45..ba711d11f86b83de502735e3c0267ca4475c0c70 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ }, "dependencies": { "aframe-billboard-component": "^1.0.0", - "aframe-extras": "^3.12.4", + "aframe-extras": "^4.0.0", "aframe-input-mapping-component": "https://github.com/johnshaughnessy/aframe-input-mapping-component#feature/map-to-array", "aframe-physics-extras": "https://github.com/infinitelee/aframe-physics-extras#fix/physics-collider-crash", "aframe-physics-system": "https://github.com/donmccurdy/aframe-physics-system", diff --git a/src/assets/environments/FloorNav_mesh.glb b/src/assets/environments/FloorNav_mesh.glb index ce12d15b22618becf0f6bab06ed466ea79e968c6..0ee9f5067c1492feb2ccb45d8f757bd28a9096c5 100644 Binary files a/src/assets/environments/FloorNav_mesh.glb and b/src/assets/environments/FloorNav_mesh.glb differ diff --git a/src/components/character-controller.js b/src/components/character-controller.js index 8aaa2240a24bf169bd72f6e957f54031f436e7eb..6c588daa4c61108e7e503a5980d512a1619d72c4 100644 --- a/src/components/character-controller.js +++ b/src/components/character-controller.js @@ -1,5 +1,6 @@ const CLAMP_VELOCITY = 0.01; const MAX_DELTA = 0.2; +const EPS = 10e-6; // Does not have any type of collisions yet. AFRAME.registerComponent("character-controller", { @@ -74,6 +75,8 @@ AFRAME.registerComponent("character-controller", { const position = new THREE.Vector3(); const currentPosition = new THREE.Vector3(); const movementVector = new THREE.Vector3(); + const end = new THREE.Vector3(); + const clampedEnd = new THREE.Vector3(); return function(t, dt) { const deltaSeconds = dt / 1000; @@ -120,9 +123,23 @@ AFRAME.registerComponent("character-controller", { z: root.rotation.z * THREE.Math.RAD2DEG }); - this.el.setAttribute("position", root.position); - this.pendingSnapRotationMatrix.identity(); // Revert to identity + + //copied from aframe-extras movement-controls + if (this.velocity.lengthSq() > EPS) { + let start = root.position; + end.copy(this.velocity).multiplyScalar(dt / 1000).add(start); + const nav = this.el.sceneEl.systems.nav; + this.navGroup = this.navGroup || nav.getGroup(start); + this.navNode = this.navNode || nav.getNode(start, this.navGroup); + this.navNode = nav.clampStep(start, end, this.navGroup, this.navNode, clampedEnd); + root.position.copy(clampedEnd); + root.position.x += this.velocity.x * dt / 1000; + root.position.y += this.velocity.y * dt / 1000; + root.z += this.velocity.z * dt / 1000; + } else { + this.el.setAttribute("position", root.position); + } }; })(), diff --git a/src/room.html b/src/room.html index 52fd9ddd2a9ab2cdc4b54dba0f0093c55dee0d7f..ad4cd0e01c3e3bc50e50281b5e91395f5a5af9f6 100644 --- a/src/room.html +++ b/src/room.html @@ -126,7 +126,7 @@ class="collidable" class="collidable" super-spawner="template: #interactable-template;" - position="2.5 1.2 0" + position="2.9 1.2 0" body="mass: 0; type: static; shape: box;" ></a-entity> @@ -168,7 +168,7 @@ class="left-controller" hand-controls2="left" tracked-controls - teleport-controls="cameraRig: #player-rig; teleportOrigin: #player-camera; button: action_teleport_" + teleport-controls="cameraRig: #player-rig; teleportOrigin: #player-camera; button: action_teleport_; collisionEntities: #floor-nav" haptic-feedback ></a-entity> @@ -177,7 +177,7 @@ class="right-controller" hand-controls2="right" tracked-controls - teleport-controls="cameraRig: #player-rig; teleportOrigin: #player-camera; button: action_teleport_" + teleport-controls="cameraRig: #player-rig; teleportOrigin: #player-camera; button: action_teleport_; collisionEntities: #floor-nav" haptic-feedback ></a-entity> @@ -252,6 +252,7 @@ <a-gltf-entity id="floor-nav" + nav-mesh src="#floor-nav-mesh" visible="false" position="0 0 0" diff --git a/src/room.js b/src/room.js index b09ff896a09145e54bb76ea45f9f659606eaa022..f248dfaa0c0a03980d14b8dd6530a3eaaf5ba113 100644 --- a/src/room.js +++ b/src/room.js @@ -65,6 +65,7 @@ import "./elements/a-progressive-asset"; import "aframe-physics-system"; import "aframe-physics-extras"; +import "aframe-extras/src/pathfinding"; import "super-hands"; import "./components/super-networked-interactable"; import "./components/networked-counter"; diff --git a/yarn.lock b/yarn.lock index 7a0884a0ae0198f5d8f079ca59c2141f478966b8..83d077c76dead4deff857a2f331aeb0801285dca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -131,12 +131,11 @@ aframe-billboard-component@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/aframe-billboard-component/-/aframe-billboard-component-1.0.0.tgz#10ce2482729eef7386c5844d65917581a62d3adc" -aframe-extras@^3.12.4: - version "3.13.1" - resolved "https://registry.yarnpkg.com/aframe-extras/-/aframe-extras-3.13.1.tgz#f8b6ef18c29e92538d05d94913640942a307c46c" +aframe-extras@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/aframe-extras/-/aframe-extras-4.0.0.tgz#fc851e2a1312c30a4d4addc3e0fa2dbf3e723ead" dependencies: - aframe-physics-system "^1.4.3" - three-pathfinding "^0.2.2" + three-pathfinding "^0.5.5" "aframe-input-mapping-component@https://github.com/johnshaughnessy/aframe-input-mapping-component#feature/map-to-array": version "0.1.2" @@ -152,13 +151,6 @@ aframe-lerp-component@^1.1.0: version "0.1.2" resolved "https://github.com/infinitelee/aframe-physics-extras#49b2d5d3c0caac905783aee51d9e89dbdf7199b8" -aframe-physics-system@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/aframe-physics-system/-/aframe-physics-system-1.4.3.tgz#c6927e847081bfe546658314aa4c04958ef27934" - dependencies: - cannon "github:donmccurdy/cannon.js#v0.6.2-dev1" - three-to-cannon "^1.1.1" - "aframe-physics-system@https://github.com/donmccurdy/aframe-physics-system": version "3.0.1" resolved "https://github.com/donmccurdy/aframe-physics-system#08a98a4c3d77c4c38a1fa27067aa0d894447902e" @@ -7576,11 +7568,11 @@ textextensions@2: version "2.2.0" resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.2.0.tgz#38ac676151285b658654581987a0ce1a4490d286" -three-pathfinding@^0.2.2: - version "0.2.3" - resolved "https://registry.yarnpkg.com/three-pathfinding/-/three-pathfinding-0.2.3.tgz#469bb26fb6b331f536c9ec88fde78e9c9219f637" +three-pathfinding@^0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/three-pathfinding/-/three-pathfinding-0.5.5.tgz#ff05a8f8cfba343b3b07c05c25d11b0d161911f8" -three-to-cannon@^1.1.1, three-to-cannon@^1.2.0: +three-to-cannon@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/three-to-cannon/-/three-to-cannon-1.2.0.tgz#92b9a756a270851aa98c3058c51ef15891507c01"