From b1de42dcb7ef520f16aa31f10106e6422feabb07 Mon Sep 17 00:00:00 2001 From: goynov Date: Mon, 2 Jun 2025 19:29:44 +0300 Subject: [PATCH] xr and gameplay --- src/components/AppHeader.vue | 2 + src/components/GameDesigner/GameDesigner.vue | 1 + src/components/GamePlaying/GamePlaying.vue | 214 +++++++++++++++++++ src/lib/gameEngine.js | 2 + src/pages/play/[[id]].vue | 44 ++++ src/pages/play/list.vue | 29 +++ src/plugins/lang.js | 2 + 7 files changed, 294 insertions(+) create mode 100644 src/components/GamePlaying/GamePlaying.vue create mode 100644 src/pages/play/[[id]].vue create mode 100644 src/pages/play/list.vue diff --git a/src/components/AppHeader.vue b/src/components/AppHeader.vue index 6e6ce32..a10db61 100644 --- a/src/components/AppHeader.vue +++ b/src/components/AppHeader.vue @@ -25,6 +25,8 @@ + + diff --git a/src/components/GameDesigner/GameDesigner.vue b/src/components/GameDesigner/GameDesigner.vue index c2d29f4..d59240f 100644 --- a/src/components/GameDesigner/GameDesigner.vue +++ b/src/components/GameDesigner/GameDesigner.vue @@ -175,6 +175,7 @@ export default { targetClick(e){ if (performance.now() - this.pointerDownTime < 200){ let intersects = gameEngine.intersect(e, this.$refs.target, gameEngine.activeObjects.children, true); + //console.log(intersects) if (intersects.length){ //console.log('attaching controls to', intersects[0].object) //gameEngine.transformControls.attach(intersects[0].object); diff --git a/src/components/GamePlaying/GamePlaying.vue b/src/components/GamePlaying/GamePlaying.vue new file mode 100644 index 0000000..f782c0c --- /dev/null +++ b/src/components/GamePlaying/GamePlaying.vue @@ -0,0 +1,214 @@ + + + \ No newline at end of file diff --git a/src/lib/gameEngine.js b/src/lib/gameEngine.js index 913db04..493c2fc 100644 --- a/src/lib/gameEngine.js +++ b/src/lib/gameEngine.js @@ -9,6 +9,7 @@ import { StereoEffect } from 'three/addons/effects/StereoEffect.js'; import { MapControls } from 'three/addons/controls/MapControls.js'; import { FirstPersonControls } from 'three/addons/controls/FirstPersonControls.js'; import { TransformControls } from 'three/addons/controls/TransformControls.js'; +import { ARButton } from 'three/addons/webxr/ARButton.js'; class GameEngine { async init(domNode) { @@ -140,6 +141,7 @@ class GameEngine { controls.rotateSpeed = 1 / gameEngine.camera.zoom; gameEngine.camera.updateProjectionMatrix(); }) + document.body.appendChild( ARButton.createButton( renderer, { } ) ); } $ = THREE; diff --git a/src/pages/play/[[id]].vue b/src/pages/play/[[id]].vue new file mode 100644 index 0000000..56dfb6e --- /dev/null +++ b/src/pages/play/[[id]].vue @@ -0,0 +1,44 @@ + + + \ No newline at end of file diff --git a/src/pages/play/list.vue b/src/pages/play/list.vue new file mode 100644 index 0000000..2580b99 --- /dev/null +++ b/src/pages/play/list.vue @@ -0,0 +1,29 @@ + + + \ No newline at end of file diff --git a/src/plugins/lang.js b/src/plugins/lang.js index 7b67cf7..ace008f 100644 --- a/src/plugins/lang.js +++ b/src/plugins/lang.js @@ -28,6 +28,7 @@ const lang = { gameRules: 'Rules', gameDesigner: 'Game studio', games: 'Games', + play: 'Play', darkMode: 'Dark mode', confirmDeletionOf: 'Confirm deletion of', yes: 'Yes', @@ -68,6 +69,7 @@ const lang = { gameRules: 'Правила', gameDesigner: 'Студио', games: 'Игри', + play: 'Играй', darkMode: 'Тъмен режим', confirmDeletionOf: 'Потвърдете изтриването на', yes: 'Да',