From 7afefec63fad8d72253b18f6301b996af3c5704b Mon Sep 17 00:00:00 2001 From: goynov Date: Mon, 27 Oct 2025 08:42:23 +0200 Subject: [PATCH] a-maze-ing --- src/components/GamePlaying/GamePlaying.vue | 29 ++++++++++++++++--- .../InteractiveObjects/InteractiveObject.js | 1 + .../MazeQuizGame/MazeObject.js | 3 +- .../MazeQuizGame/MazeQuizGame.js | 13 +++++++-- src/lib/CharacterControls.js | 14 +++++---- 5 files changed, 47 insertions(+), 13 deletions(-) diff --git a/src/components/GamePlaying/GamePlaying.vue b/src/components/GamePlaying/GamePlaying.vue index d40e055..7ebb5f0 100644 --- a/src/components/GamePlaying/GamePlaying.vue +++ b/src/components/GamePlaying/GamePlaying.vue @@ -225,10 +225,31 @@ export default { // vp.object.rotation.y += -Math.PI/2; let maze = new MazeQuizGame(gameEngine, {}, [ - {q: 'Атанасовското езеро е дълго около 10км.', a:['Вярно', 'Невярно'], h: 'Грешен отговор. Атанасовското езеро е дълго около 10км.'}, - {q: 'Колко дълбоко е Атанасовското езеро?', a:['Около 35см', 'Около 3.5м', 'Метър и половина'], h: 'Атанасовското езеро е дълбоко средно около 35см.'}, - {q: 'Колко вида птици се наблюдават в Атанасовското езеро?', a: ['Повече от 330 вида', 'Над 10 вида', 'Над 450 вида'], h: 'В Атанасовското езеро са наблюдавани над 330 вида птици'}, - {q: 'Какво е Via Pontica?', a: ['Миграционният път на птиците, минаващ покрай Бургаските езера', 'Рядък вид птица', 'Местност в гр. Бургас'], h: 'Via Pontica наричаме миграционния път на птиците'}, + { + q: 'Атанасовското езеро е дълго около 10км.', + a:['Вярно', 'Невярно'], + h: 'Грешен отговор. Атанасовското езеро е дълго около 10км.' + }, + { + q: 'Колко дълбоко е Атанасовското езеро?', + a:['Около 35см', 'Около 3.5м', 'Метър и половина'], + h: 'Грешен отговор. Атанасовското езеро е дълбоко средно около 35см.' + }, + { + q: 'Колко вида птици се наблюдават в Атанасовското езеро?', + a: ['Повече от 330 вида', 'Над 10 вида', 'Над 450 вида'], + h: 'Грешен отговор. В Атанасовското езеро са наблюдавани над 330 вида птици' + }, + { + q: 'Какво е Via Pontica?', + a: ['Миграционният път на птиците, минаващ покрай Бургаските езера', 'Рядък вид птица', 'Местност в гр. Бургас'], + h: 'Грешен отговор. Via Pontica наричаме миграционния път на птиците' + }, + { + q: 'Къдроглавият пеликан...', + a: ['...има огромен жълт клюн', '...има малък розов клюн', '...не се среща в България'], + h: 'Грешен отговор. Къдроглавият пеликан има огромен жълт клюн' + }, ]) maze.load().then(o=>{ gameEngine.activeObjects.add(o); diff --git a/src/components/InteractiveObjects/InteractiveObject.js b/src/components/InteractiveObjects/InteractiveObject.js index 18b0734..f9c4b71 100644 --- a/src/components/InteractiveObjects/InteractiveObject.js +++ b/src/components/InteractiveObjects/InteractiveObject.js @@ -48,6 +48,7 @@ class InteractiveObject { resolve(mesh); break; case 'gltf': + console.log('loadingg', obj.value) new GLTFLoader().load(obj.value, (gltf) => { let gltfObj = gltf.scene; gltf.scene.traverse(function (object) { diff --git a/src/components/InteractiveObjects/MazeQuizGame/MazeObject.js b/src/components/InteractiveObjects/MazeQuizGame/MazeObject.js index b66496b..275b4ad 100644 --- a/src/components/InteractiveObjects/MazeQuizGame/MazeObject.js +++ b/src/components/InteractiveObjects/MazeQuizGame/MazeObject.js @@ -126,7 +126,8 @@ class MazeObject { addRoom(['floor', 'door', def.r ? 'door' : 'wall', def.f ? 'door' : 'wall', def.l ? 'door' : 'wall'], def, offsetZ) - def.objects && def.objects.forEach(async obj => { + console.log('loadingggg', def.objects) + def.objects?.forEach(async obj => { obj.room = room; // let go = new GameObject(obj, context); let go = new InteractiveObject(obj, context) diff --git a/src/components/InteractiveObjects/MazeQuizGame/MazeQuizGame.js b/src/components/InteractiveObjects/MazeQuizGame/MazeQuizGame.js index 06f497f..a191dfd 100644 --- a/src/components/InteractiveObjects/MazeQuizGame/MazeQuizGame.js +++ b/src/components/InteractiveObjects/MazeQuizGame/MazeQuizGame.js @@ -30,7 +30,16 @@ class MazeQuizGame { generate(questions, idx = 0, len){ let cq = questions[idx] - if (!cq) return {}; + if (!cq) return { + len:3, + objects:[ + { + type: 'gltf', + position:[0,.25,len + .52], scale: [0.037, 0.037, 0.037], rotation: [0, Math.PI/4, 0], + value: '/static/meshes/award.glb' + } + ] + }; len = len || Math.round(Math.random()*tl) + 2; // let l = { @@ -64,7 +73,7 @@ class MazeQuizGame { } if (i == 0){ mo[d] = { - len: 4, + len: 3, [dd]: this.generate(questions, idx + 1, 3) } }else{ diff --git a/src/lib/CharacterControls.js b/src/lib/CharacterControls.js index d33609a..ca04911 100644 --- a/src/lib/CharacterControls.js +++ b/src/lib/CharacterControls.js @@ -82,7 +82,7 @@ export class CharacterControls { this.directionVelocity = this.directionVelocity * 2.5 * Math.abs(input[0]) this.direction += input[0] * delta * 2.5 //this.directionVelocity; this.model.rotation.y = this.direction; - this.walkDirection.set(input[0], 0, input[1]) + this.walkDirection.set(input[0]*0.33, 0, input[1]) this.walkDirection.applyAxisAngle(this.rotateAngle, this.direction) this.walkDirection.normalize(); @@ -127,11 +127,13 @@ export class CharacterControls { cameraPosition.lerp(cameraDesiredPosition, delta*2) this.camera.position.copy(cameraPosition) - this.camera.lookAt(new THREE.Vector3( - this.model.position.x, - 2, - this.model.position.z - )) + // this.camera.lookAt(new THREE.Vector3( + // this.model.position.x, + // 2, + // this.model.position.z + // )) + this.orbitControl.target.set(this.model.position.x, 2, this.model.position.z) + this.camera.lookAt(this.orbitControl.target) } getInput(pointerControls) {