diff --git a/src/components/GamePlay/GamePlay.vue b/src/components/GamePlay/GamePlay.vue index ebbe275..b5ddf9a 100644 --- a/src/components/GamePlay/GamePlay.vue +++ b/src/components/GamePlay/GamePlay.vue @@ -24,6 +24,9 @@ export default { mode: 'GamePlay' }); manager = await new GameManager(engine, this.id); + manager.addEventListener('the-end', _=>{ + this.$router.push('/'); + }) window.addEventListener('resize', this.resize); manager.loadScene(manager.scenarioData.scenes[0].data.id) }, @@ -39,7 +42,6 @@ export default { }, methods:{ - targetClick(e){ engine.onClick(e, this.$refs.target); }, diff --git a/src/components/InteractiveObjects/SceneSwitcher.vue b/src/components/InteractiveObjects/SceneSwitcher.vue index cc3cfb9..56b2a5b 100644 --- a/src/components/InteractiveObjects/SceneSwitcher.vue +++ b/src/components/InteractiveObjects/SceneSwitcher.vue @@ -31,7 +31,9 @@ export default { }, computed:{ scenes(){ - return this.modelValue.__root.scenes.map(s=>({title: s.data.title, value: s.data.id})) + let sc = this.modelValue.__root.scenes.map(s=>({title: s.data.title, value: s.data.id})) + sc.push({title: `-- ${this.l.end} --`, value: '__end__'}); + return sc; }, }, methods:{ diff --git a/src/components/SceneDesigner/GameObject.vue b/src/components/SceneDesigner/GameObject.vue index 1da1f27..e455711 100644 --- a/src/components/SceneDesigner/GameObject.vue +++ b/src/components/SceneDesigner/GameObject.vue @@ -9,7 +9,7 @@ - + {{ modelValue.title }} diff --git a/src/lib/GameManager.js b/src/lib/GameManager.js index ec52125..1b2ddbf 100644 --- a/src/lib/GameManager.js +++ b/src/lib/GameManager.js @@ -2,9 +2,10 @@ import { InteractiveObject } from "@/components/InteractiveObjects/InteractiveOb import { VideoPlayer } from '@/components/InteractiveObjects/VideoPlayer'; import { Hero } from "./Hero"; import { api } from "./Api"; - -class GameManager{ +import { EventManager } from "./EventManager"; +class GameManager extends EventManager{ constructor(engine, gameData, scenarioData, opts = {}){ + super(); this.engine = engine return new Promise(async (resolve, reject)=>{ if (typeof gameData != 'object'){ @@ -116,7 +117,11 @@ class GameManager{ io.addEventListener('sceneSwitch', (e)=>{ //this.scenesList = [this.scenes.find(s=>s.data.id == e.scene)] //switch to next scene: - this.loadScene(e.scene); + if (e.scene == '__end__'){ + this.dispatchEvent({ type: 'the-end' }); + }else{ + this.loadScene(e.scene); + } iobjs.forEach(di=>di.io.dispose?.()); }) } diff --git a/src/plugins/lang.js b/src/plugins/lang.js index 044da83..a99535f 100644 --- a/src/plugins/lang.js +++ b/src/plugins/lang.js @@ -43,6 +43,7 @@ const lang = { sphere: 'Sphere', sensor: 'Sensor', }, + end: 'The End', completionPoints: 'Completion points', completionElements: 'Following elements should be completed', minActivationScore: 'Minimum level score for activation', @@ -205,6 +206,7 @@ const lang = { sphere: 'Сфера', sensor: 'Преминаване', }, + end: 'Край', completionPoints: 'Брой точки', completionElements: 'Изпълнени елементи преди активиране', minActivationScore: 'Минимален брой точки за активиране',