gamedesigner
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
<template>
|
||||
<v-btn-toggle variant="tonal" density="compact" class="mx-auto" v-model="mode" color="blue">
|
||||
<!-- <v-btn size="small" class="text-none" value="default"
|
||||
prepend-icon="mdi-cursor-default-click">Pointer</v-btn> -->
|
||||
<v-btn size="small" class="text-none" value="translate" prepend-icon="mdi-cursor-move">Move</v-btn>
|
||||
<v-btn size="small" class="text-none" value="rotate" prepend-icon="mdi-rotate-orbit">Rotate</v-btn>
|
||||
<v-btn size="small" class="text-none" value="scale" prepend-icon="mdi-resize">Scale</v-btn>
|
||||
</v-btn-toggle>
|
||||
<div class="container my-3">
|
||||
<div ref="target" @click="targetClick" @pointerdown="targetPointerDown"></div>
|
||||
</div>
|
||||
<v-navigation-drawer location="right">
|
||||
<v-list v-model:selected="scenesList" selectable>
|
||||
<v-list-item v-for="(s, i) in scenes" :key="i" :title="s.data.title" :value="s"></v-list-item>
|
||||
</v-list>
|
||||
</v-navigation-drawer>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
import { GameEngine } from '@/lib/gameEngine';
|
||||
|
||||
let gameEngine = null;
|
||||
|
||||
export default {
|
||||
props:{
|
||||
modelValue: Object,
|
||||
scenario: Object
|
||||
},
|
||||
data(){
|
||||
return {
|
||||
scenesList: [],
|
||||
mode: 'translate',
|
||||
pointerDownTime: 0
|
||||
}
|
||||
},
|
||||
computed:{
|
||||
scenes(){
|
||||
return this.scenario.scenes || [];
|
||||
},
|
||||
scene(){
|
||||
return this.scenesList[0];
|
||||
},
|
||||
object(){
|
||||
return this.modelValue;
|
||||
},
|
||||
},
|
||||
watch:{
|
||||
async scene(n){
|
||||
await this.loadEnvironment();
|
||||
},
|
||||
mode(n){
|
||||
gameEngine.transformControls.setMode(n)
|
||||
}
|
||||
},
|
||||
async mounted(){
|
||||
gameEngine = new GameEngine();
|
||||
this.gameEngine = gameEngine;
|
||||
await gameEngine.init(this.$refs.target);
|
||||
gameEngine.scene.add(gameEngine.transformControls.getHelper())
|
||||
},
|
||||
methods:{
|
||||
async loadEnvironment(){
|
||||
await this.expandScenarioData();
|
||||
if (!this.object.gd){
|
||||
this.object.gd = {
|
||||
items: []
|
||||
};
|
||||
}
|
||||
if (this.scene.data.$environment.type == 'panorama2d'){
|
||||
await gameEngine.loadPanorama(`/asset/default/${this.scene.data.$environment.asset.name}`);
|
||||
}else{
|
||||
let env = await gameEngine.load(`/asset/default/${this.scene.data.$environment.asset.name}`);
|
||||
gameEngine.autoScale(env.scene, 10);
|
||||
gameEngine.activeObjects.add(env.scene);
|
||||
}
|
||||
for (let i of this.scene.data.items) {
|
||||
let gltf = await gameEngine.load(`/asset/default/${i.data.$go.asset.name}`);
|
||||
let o = gltf.scene;
|
||||
gameEngine.autoScale(o);
|
||||
gameEngine.activeObjects.add(o);
|
||||
const {position, scale, rotation} = o;
|
||||
i.gd = {position, scale, rotation};
|
||||
console.log(JSON.stringify(i.gd));
|
||||
window.gameEngine = gameEngine;
|
||||
//console.log(new gameEngine.$.Euler({"isEuler":true,"_x":0,"_y":0,"_z":0,"_order":"XYZ"}));
|
||||
}
|
||||
},
|
||||
async expandScenarioData(){
|
||||
this.scene.data.$environment = (await this.$api.gameObject.load(this.scene.data.environment)).data
|
||||
for (let i of this.scene.data.items) {
|
||||
i.data.$go = (await this.$api.gameObject.load(i.data.go)).data;
|
||||
}
|
||||
},
|
||||
targetPointerDown(){
|
||||
this.pointerDownTime = performance.now();
|
||||
},
|
||||
targetClick(e){
|
||||
if (performance.now() - this.pointerDownTime < 200){
|
||||
let intersects = gameEngine.intersect(e, this.$refs.target, gameEngine.activeObjects.children, true);
|
||||
if (intersects.length){
|
||||
console.log('attaching controls to', intersects[0].object)
|
||||
gameEngine.transformControls.attach(intersects[0].object);
|
||||
}else{
|
||||
gameEngine.transformControls.detach();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
Reference in New Issue
Block a user