#12 initial commit

This commit is contained in:
2026-02-07 18:36:33 +02:00
parent c28286e305
commit 9cf14ff2a8
8 changed files with 141 additions and 64 deletions
@@ -2,7 +2,7 @@ import { getBoundingBox, getBoundingBoxCenterPoint, getBoundingBoxMaxLength, cen
import { EventManager } from '@/lib/EventManager';
class GenericObject extends EventManager{
emits = ['finish']
emits = ['finish', 'interaction']
constructor(engine, data){
super();
return new Promise(async(resolve, reject)=>{
@@ -41,6 +41,7 @@ class GenericObject extends EventManager{
})
}
}
this.dispatchEvent({type:'interaction'})
});
}
@@ -65,11 +65,15 @@ class InteractiveObject extends EventManager{
// })
this.io.forwardEvents?.(this);
if (this.emits?.includes('interaction')){
//process first interaction
this.io.once('interaction', ()=>{
if (obj.introText){
engine.dashboard.updateText(obj.introText, true)
}
})
this.io.addEventListener('interaction', ()=>{
engine.tm?.setGameObject(obj.$go?.id);
})
}
break;
}
@@ -38,7 +38,7 @@ const defaults = {
const tl = 4;
class MazeQuizGame extends EventManager {
emits = ['finish', 'sceneSwitch']
emits = ['finish', 'sceneSwitch', 'interaction']
constructor(engine, data) {
super();
this.data = data;
@@ -97,6 +97,7 @@ class MazeQuizGame extends EventManager {
await this.mazeObject.load();
this.object = this.mazeObject.object;
resolve(this)
this.dispatchEvent({type:'interaction'});
})
}
@@ -5,7 +5,7 @@ import { TextObject } from './TextObject';
import Utils from '#/app/Utils';
class SingleQuestion extends EventManager {
emits = ['finish']
emits = ['finish', 'interaction']
constructor(engine, data) {
super();
return new Promise(async (resolve, reject)=>{
@@ -20,8 +20,10 @@ class SingleQuestion extends EventManager {
qa.object.position.y = -0.15 * (i + 1);
answers.add(qa.object);
qa.object._answer = a;
engine.clickable.add(qa.object, (i) => {
engine.clickable.add(qa.object, () => {
//if (!container.visible) return;
this.dispatchEvent({type:'interaction'});
engine.tm?.post('answer', i, {answer: a, correct: a == ca});
if (qa.object._answer == ca) {
this.dispatchEvent({type:'finish'})
qa.object.outlineColor = new Color(0x55ff55);
@@ -5,10 +5,10 @@ import {
import { EventManager } from '@/lib/EventManager';
class VideoPlayer extends EventManager {
emits = ['finish']
emits = ['finish', 'interaction']
constructor(engine, data){
super();
let vi, plane;
let vi, plane, finished = false;
return new Promise((resolve, reject)=>{
vi = document.createElement('video');
vi.src = engine.assetPath + data.$go.asset.name;
@@ -31,7 +31,9 @@ class VideoPlayer extends EventManager {
vi.play();
}else{
vi.pause();
engine.tm?.post('paused', null, {time: vi.currentTime});
}
this.dispatchEvent({type:'interaction'})
});
const onPlay = ()=>{
@@ -61,6 +63,7 @@ class VideoPlayer extends EventManager {
vi.addEventListener('pause', onPause);
vi.addEventListener('ended', ()=>{
finished = true;
this.dispatchEvent({type:'finish'})
})
this.video = vi;