diff --git a/src/components/AssetsManagement/AssetPreview.vue b/src/components/AssetsManagement/AssetPreview.vue
index c47ae23..fb035c4 100644
--- a/src/components/AssetsManagement/AssetPreview.vue
+++ b/src/components/AssetsManagement/AssetPreview.vue
@@ -75,7 +75,7 @@ export default{
this.animations = gltf.animations.map(a => ({
name: a.name, id: a.uuid
}));
- //gameEngine.autoScale(gltf.scene);
+ gameEngine.autoScale(gltf.scene);
let bb = new gameEngine.$.Box3().setFromObject(gltf.scene);
gltf.scene.traverse(function (o) {
o.frustumCulled = false;
diff --git a/src/components/AssetsManagement/AssetSelector.vue b/src/components/AssetsManagement/AssetSelector.vue
index 7e16359..f0f4390 100644
--- a/src/components/AssetsManagement/AssetSelector.vue
+++ b/src/components/AssetsManagement/AssetSelector.vue
@@ -20,7 +20,7 @@ export default {
data(){
return {
query: {
- type: { $in: this.$p.objectTypes.filter(t=>t.type == this.type || !this.type).map(t=>t.value) }
+ type: { $in: this.$p.objectTypes.filter(t=>!this.type || this.type.includes(t.type)).map(t=>t.value) }
},
activatorProps:{},
dialog: false
diff --git a/src/components/GameDesigner/GameDesigner.vue b/src/components/GameDesigner/GameDesigner.vue
index 929f109..7bfc423 100644
--- a/src/components/GameDesigner/GameDesigner.vue
+++ b/src/components/GameDesigner/GameDesigner.vue
@@ -163,7 +163,7 @@ export default {
}
for (let i of this.scene.data.items || []) {
let gltf = await gameEngine.load(`/asset/default/${i.data.$go.asset.name}`);
- this.setObjectAttributes(l, i.data, gltf, 10);
+ this.setObjectAttributes(l, i.data, gltf, 1);
gameEngine.activeObjects.add(gltf.scene);
//console.log(JSON.stringify(l));
//window.gameEngine = gameEngine;
@@ -175,6 +175,9 @@ export default {
// gameEngine.activeObjects.add(camera);
// this.setObjectAttributes(l, { id: 'camera', 'title': 'Main camera' }, { scene: camera })
// cameraHelper.update();
+
+ //this is needed cause when mounted canvas has different size
+ this.resize();
},
async expandScenarioData(scene){
scene.data.$environment = (await this.$api.gameObject.load(scene.data.environment)).data
diff --git a/src/components/GamePlaying/GamePlaying.vue b/src/components/GamePlaying/GamePlaying.vue
index 9f81b4d..71f3583 100644
--- a/src/components/GamePlaying/GamePlaying.vue
+++ b/src/components/GamePlaying/GamePlaying.vue
@@ -22,7 +22,7 @@
-
+
@@ -166,7 +166,7 @@ export default {
}
for (let i of this.scene.data.items || []) {
let gltf = await gameEngine.load(`/asset/default/${i.data.$go.asset.name}`);
- this.setObjectAttributes(l, i.data, gltf, 10);
+ this.setObjectAttributes(l, i.data, gltf, 1);
gameEngine.activeObjects.add(gltf.scene);
if (i.data.$go.type == 'player3d'){
let hero = new Hero(gltf, i.data.$go);
diff --git a/src/components/SceneDesigner/GameObject.vue b/src/components/SceneDesigner/GameObject.vue
index 1c0b1cf..e556431 100644
--- a/src/components/SceneDesigner/GameObject.vue
+++ b/src/components/SceneDesigner/GameObject.vue
@@ -11,7 +11,7 @@
-
+
Choose game object
diff --git a/src/components/SceneDesigner/Scene.vue b/src/components/SceneDesigner/Scene.vue
index 68aa897..ebf862b 100644
--- a/src/components/SceneDesigner/Scene.vue
+++ b/src/components/SceneDesigner/Scene.vue
@@ -9,7 +9,7 @@
-
+
Choose environment
diff --git a/src/components/SceneDesigner/SceneDesigner.vue b/src/components/SceneDesigner/SceneDesigner.vue
index 3818054..8fca09d 100644
--- a/src/components/SceneDesigner/SceneDesigner.vue
+++ b/src/components/SceneDesigner/SceneDesigner.vue
@@ -105,7 +105,7 @@ export default {
target: null,
assetSelector: {
active: false,
- type: 'Scene'
+ type: ['Scene']
},
dialog: false,
expandDrawer: false,
diff --git a/src/components/SceneDesigner/Task.vue b/src/components/SceneDesigner/Task.vue
index 458bb84..4e470fd 100644
--- a/src/components/SceneDesigner/Task.vue
+++ b/src/components/SceneDesigner/Task.vue
@@ -11,7 +11,7 @@
-
+
Choose task description
diff --git a/src/lib/Hero.js b/src/lib/Hero.js
index 92fd9e6..f3769aa 100644
--- a/src/lib/Hero.js
+++ b/src/lib/Hero.js
@@ -20,7 +20,7 @@ class Hero{
this.actionIdle = this.mixer.clipAction( this.object.animations.find(a=>a.name=='idle') );
this.actionIdle.play();
this.activeAction = this.actionIdle;
- this.pointerControls = new PointerControls(gameEngine.cameraPivot, this.model, gameEngine.renderer.domElement);
+ this.pointerControls = new PointerControls(gameEngine.camera, this.model, gameEngine.renderer.domElement);
gameEngine.hero = this;
// Character Collider
@@ -96,6 +96,7 @@ class Hero{
}
update(){
+ return;
let { inputVelocity, velocity, euler, quat, v, targetQuaternion, clock } = this;
let pc = this.pointerControls;
pc.update();
diff --git a/src/lib/gameEngine.js b/src/lib/gameEngine.js
index 866ee7b..71d797f 100644
--- a/src/lib/gameEngine.js
+++ b/src/lib/gameEngine.js
@@ -92,7 +92,7 @@ class GameEngine {
this.activeObjects = new THREE.Group();
scene.add(this.activeObjects);
- const controls = new OrbitControls(this.camera, renderer.domElement, this.activeObjects);
+ const controls = new OrbitControls(this.camera, renderer.domElement);
if (opts.gizmo) {
const gizmo = new ViewportGizmo(this.camera, renderer, {
container: '.renderer-gizmo',
@@ -181,8 +181,8 @@ class GameEngine {
c1.userData.active = false;
c1.addEventListener('connected', e => {
c1.gamepad = e.data.gamepad;
- this.session = this.renderer.xr.getSession();
- this.session.addEventListener('selectstart', this.onControllerEvent.bind(this));
+ // this.session = this.renderer.xr.getSession();
+ // this.session.addEventListener('selectstart', this.onControllerEvent.bind(this));
})
this.scene.add(c1);
@@ -213,13 +213,15 @@ class GameEngine {
line.name = 'line';
line.scale.z = 5;
+ this.controllerLine = line;
+
this.xrController1 = c1
this.xrController2 = c2
}
initCameraPivot() {
const pivot = new THREE.Object3D()
- pivot.position.set(0, 1, 10)
+ pivot.position.set(0, 0, 0)
const yaw = new THREE.Object3D()
const pitch = new THREE.Object3D()
@@ -264,10 +266,10 @@ class GameEngine {
if (gameEngine.xrController1?.gamepad) {
let gp = gameEngine.xrController1.gamepad;
if (gp.axes[3] != 0) {
- gameEngine.scene.position.z += gp.axes[3] * delta;
+ gameEngine.activeObjects.position.z += gp.axes[3] * delta;
}
if (gp.axes[2] != 0) {
- gameEngine.scene.position.x += gp.axes[2] * delta;
+ gameEngine.activeObjects.position.x += gp.axes[2] * delta;
}
}
if (gameEngine.xrController2?.gamepad) {
@@ -279,12 +281,12 @@ class GameEngine {
// }
if (gp.axes[2] != 0) {
if (gp1.buttons[4]?.pressed) {
- gameEngine.scene.position.y += gp.axes[2] * delta;
+ gameEngine.activeObjects.position.y += gp.axes[2] * delta;
} else if (gp1.buttons[5]?.pressed) {
- let sc = gameEngine.scene.scale.x * (gp.axes[2] * delta * 0.5 + 1);
- gameEngine.scene.scale.set(sc, sc, sc);
+ let sc = gameEngine.activeObjects.scale.x * (gp.axes[2] * delta * 0.5 + 1);
+ gameEngine.activeObjects.scale.set(sc, sc, sc);
} else {
- gameEngine.scene.rotation.y += gp.axes[2] * delta * 0.5;
+ gameEngine.activeObjects.rotation.y += gp.axes[2] * delta * 0.5;
}
}
if (gp.buttons[4]?.pressed) {
@@ -306,45 +308,55 @@ class GameEngine {
onControllerEvent(event) {
//this.handleXrAction(event, this);
- event.type !== 'move' && console.log(event)
- // const controller = event.target;
- // if (controller.userData.active === false) return;
- // this.raycaster.setFromXRController(controller);
- // switch (event.type) {
- // case 'selectstart':
- // this.transformControls.pointerDown(null);
- // break;
- // case 'selectend':
- // this.transformControls.pointerUp(null);
- // break;
- // case 'move':
- // this.transformControls.pointerHover(null);
- // this.transformControls.pointerMove(null);
- // break;
- // }
+ //event.type !== 'move' && console.log(event)
+ const controller = event.target;
+ //console.log(event)
+ if (!controller.userData) return
+ if (controller.userData.active === false) return;
+ this.transformControls.getRaycaster().setFromXRController(controller);
+ switch (event.type) {
+ case 'selectstart':
+ this.transformControls.pointerDown(null);
+ break;
+ case 'selectend':
+ this.transformControls.pointerUp(null);
+ break;
+ case 'move':
+ this.transformControls.pointerHover(null);
+ this.transformControls.pointerMove(null);
+ break;
+ }
}
onSelect(event) {
- // const controller = event.target;
- // this.xrController1.userData.active = false;
- // this.xrController2.userData.active = false;
+ const controller = event.target;
+ this.xrController1.userData.active = false;
+ this.xrController2.userData.active = false;
- // if (controller === this.xrController1) {
- // this.xrController1.userData.active = true;
- // this.xrController1.add(line);
- // }
+ if (controller === this.xrController1) {
+ this.xrController1.userData.active = true;
+ this.xrController1.add(this.controllerLine);
+ }
- // if (controller === this.xrController2) {
- // this.xrController2.userData.active = true;
- // this.xrController2.add(line);
- // }
+ if (controller === this.xrController2) {
+ this.xrController2.userData.active = true;
+ this.xrController2.add(this.controllerLine);
+ }
- // this.raycaster.setFromXRController(controller);
- // const intersects = this.raycaster.intersectObjects(this.activeObjects.children);
+ this.raycaster.setFromXRController(controller);
+ const intersects = this.raycaster.intersectObjects(this.activeObjects.children, true);
- // if (intersects.length > 0) {
- // this.transformControls.attach(intersects[0].object);
- // }
+ intersects.forEach(o => {
+ while (o.object && !this.activeObjects.children.includes(o.object)) {
+ o.object = o.object.parent;
+ }
+ })
+
+ if (intersects.length > 0) {
+ setTimeout(() => {
+ this.transformControls.attach(intersects[0].object);
+ }, 100);
+ }
}
$ = THREE;
@@ -430,6 +442,7 @@ class GameEngine {
}
})
}
+ //console.log('intersects', intersects);
return intersects;
}
diff --git a/src/plugins/params.js b/src/plugins/params.js
index 4e09187..dc73206 100644
--- a/src/plugins/params.js
+++ b/src/plugins/params.js
@@ -27,6 +27,7 @@ export default {
}, {
value: 'player3d',
icon: 'human-greeting',
+ type: 'Player',
render: true,
color: 'yellow-accent-4'
}, {