a-maze-ing

This commit is contained in:
2025-10-27 08:42:23 +02:00
parent 7221733b47
commit 7afefec63f
5 changed files with 47 additions and 13 deletions
+25 -4
View File
@@ -225,10 +225,31 @@ export default {
// vp.object.rotation.y += -Math.PI/2; // vp.object.rotation.y += -Math.PI/2;
let maze = new MazeQuizGame(gameEngine, {}, [ let maze = new MazeQuizGame(gameEngine, {}, [
{q: 'Атанасовското езеро е дълго около 10км.', a:['Вярно', 'Невярно'], h: 'Грешен отговор. Атанасовското езеро е дълго около 10км.'}, {
{q: 'Колко дълбоко е Атанасовското езеро?', a:['Около 35см', 'Около 3.5м', 'Метър и половина'], h: 'Атанасовското езеро е дълбоко средно около 35см.'}, q: 'Атанасовското езеро е дълго около 10км.',
{q: 'Колко вида птици се наблюдават в Атанасовското езеро?', a: ['Повече от 330 вида', 'Над 10 вида', 'Над 450 вида'], h: 'В Атанасовското езеро са наблюдавани над 330 вида птици'}, a:['Вярно', 'Невярно'],
{q: 'Какво е Via Pontica?', a: ['Миграционният път на птиците, минаващ покрай Бургаските езера', 'Рядък вид птица', 'Местност в гр. Бургас'], h: 'Via Pontica наричаме миграционния път на птиците'}, 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=>{ maze.load().then(o=>{
gameEngine.activeObjects.add(o); gameEngine.activeObjects.add(o);
@@ -48,6 +48,7 @@ class InteractiveObject {
resolve(mesh); resolve(mesh);
break; break;
case 'gltf': case 'gltf':
console.log('loadingg', obj.value)
new GLTFLoader().load(obj.value, (gltf) => { new GLTFLoader().load(obj.value, (gltf) => {
let gltfObj = gltf.scene; let gltfObj = gltf.scene;
gltf.scene.traverse(function (object) { gltf.scene.traverse(function (object) {
@@ -126,7 +126,8 @@ class MazeObject {
addRoom(['floor', 'door', def.r ? 'door' : 'wall', def.f ? 'door' : 'wall', def.l ? 'door' : 'wall'], def, offsetZ) 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; obj.room = room;
// let go = new GameObject(obj, context); // let go = new GameObject(obj, context);
let go = new InteractiveObject(obj, context) let go = new InteractiveObject(obj, context)
@@ -30,7 +30,16 @@ class MazeQuizGame {
generate(questions, idx = 0, len){ generate(questions, idx = 0, len){
let cq = questions[idx] 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; len = len || Math.round(Math.random()*tl) + 2;
// let l = { // let l = {
@@ -64,7 +73,7 @@ class MazeQuizGame {
} }
if (i == 0){ if (i == 0){
mo[d] = { mo[d] = {
len: 4, len: 3,
[dd]: this.generate(questions, idx + 1, 3) [dd]: this.generate(questions, idx + 1, 3)
} }
}else{ }else{
+8 -6
View File
@@ -82,7 +82,7 @@ export class CharacterControls {
this.directionVelocity = this.directionVelocity * 2.5 * Math.abs(input[0]) this.directionVelocity = this.directionVelocity * 2.5 * Math.abs(input[0])
this.direction += input[0] * delta * 2.5 //this.directionVelocity; this.direction += input[0] * delta * 2.5 //this.directionVelocity;
this.model.rotation.y = this.direction; 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.applyAxisAngle(this.rotateAngle, this.direction)
this.walkDirection.normalize(); this.walkDirection.normalize();
@@ -127,11 +127,13 @@ export class CharacterControls {
cameraPosition.lerp(cameraDesiredPosition, delta*2) cameraPosition.lerp(cameraDesiredPosition, delta*2)
this.camera.position.copy(cameraPosition) this.camera.position.copy(cameraPosition)
this.camera.lookAt(new THREE.Vector3( // this.camera.lookAt(new THREE.Vector3(
this.model.position.x, // this.model.position.x,
2, // 2,
this.model.position.z // 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) { getInput(pointerControls) {