From 22c27a7a9e7eba3237fa3b89d35fde173efa5602 Mon Sep 17 00:00:00 2001 From: goynov Date: Mon, 10 Nov 2025 07:23:24 +0200 Subject: [PATCH] character collider fix --- src/lib/CharacterControls.js | 4 ++-- src/lib/Hero.js | 5 ++--- src/lib/Utils.js | 5 +++-- src/mixins/GameEnvironmentMixin.js | 8 ++++++++ 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/lib/CharacterControls.js b/src/lib/CharacterControls.js index 16baf72..adb168a 100644 --- a/src/lib/CharacterControls.js +++ b/src/lib/CharacterControls.js @@ -26,10 +26,10 @@ export class CharacterControls { this.characterController.setUp({x:0, y:1, z:0}); po.rigidBody.setTranslation(this.model.position) po.characterController = this.characterController; - // this.characterController.enableSnapToGround(0.5); + //this.characterController.enableSnapToGround(0.5); // // Don’t allow climbing slopes larger than 45 degrees. // this.characterController.setMaxSlopeClimbAngle(45 * Math.PI / 180); - // // Automatically slide down on slopes smaller than 30 degrees. + // Automatically slide down on slopes smaller than 30 degrees. // this.characterController.setMinSlopeSlideAngle(30 * Math.PI / 180); // this.characterController.enableAutostep(0.5, 0.2, true); this.characterController.setApplyImpulsesToDynamicBodies(true); diff --git a/src/lib/Hero.js b/src/lib/Hero.js index e2ab285..d923909 100644 --- a/src/lib/Hero.js +++ b/src/lib/Hero.js @@ -30,10 +30,10 @@ class Hero{ let bb = getBoundingBox(this.model); let size = getBoundingBoxSize(bb); - let center = getBoundingBoxCenterPoint(bb, this.model.position).negate(); + let center = getBoundingBoxCenterPoint(bb, this.model.position) let po = gameEngine.physics.add(this.model, 'kinematicPositionBased', false, undefined, 'capsule', { radius: size.x/2, halfHeight: size.y/2}) - po.collider.setTranslationWrtParent({x: center.x, y: -this.model.position.y, z: center.z}); + po.collider.setTranslationWrtParent({x: center.x, y: center.y + size.y/2, z: center.z}); //po.collider.setActiveEvents(RAPIER.ActiveEvents.COLLISION_EVENTS); this.characterControls = new CharacterControls(this.model, @@ -50,7 +50,6 @@ class Hero{ } update(){ - //return if (this.gameEngine.renderer.xr.isPresenting) return; if (this.ready && !this.disableInput) { diff --git a/src/lib/Utils.js b/src/lib/Utils.js index 99659ba..086bedc 100644 --- a/src/lib/Utils.js +++ b/src/lib/Utils.js @@ -65,8 +65,9 @@ export default { if (transformFn){ value = transformFn(key, value) } - if (value && typeof value === 'object' && !Array.isArray(value)) { - this.deepMerge(target[key] = target[key] || {}, value, transformFn); + if (value && typeof value === 'object') { + let dflt = Array.isArray(value) ? [] : {}; + this.deepMerge(target[key] = target[key] || dflt, value, transformFn); return; } target[key] = value; diff --git a/src/mixins/GameEnvironmentMixin.js b/src/mixins/GameEnvironmentMixin.js index 36b19b0..efbce82 100644 --- a/src/mixins/GameEnvironmentMixin.js +++ b/src/mixins/GameEnvironmentMixin.js @@ -126,6 +126,14 @@ export default { if (this.scene.data.$scene){ let env = await gameEngine.load(this.scene.data.$scene.asset.name); this.setObjectAttributes(l, this.scene.data, env.scene, env, 100); + if (this.env != 'GameDesigner'){ + env.scene.traverse(o=>{ + if (o.name == 'Sphere'){ + console.log('Fixing ground. TODO!!!') + gameEngine.physics.add(o, 'fixed', true, undefined) + } + }) + } gameEngine.activeObjects.add(env.scene); } if (this.scene.data.$intro && this.env == 'GamePlaying'){