gamedesigner

This commit is contained in:
2025-03-19 18:45:40 +02:00
parent 86559bcacd
commit 73ca07bcc0
12 changed files with 367 additions and 25 deletions
+52
View File
@@ -10,6 +10,7 @@ class GameEngine {
const width = 1200, height = 800;
const camera = new THREE.PerspectiveCamera(70, width / height, 0.01, 10000);
this.raycaster = new THREE.Raycaster();
camera.position.set(1, 0, 1);
const scene = new THREE.Scene();
@@ -56,6 +57,10 @@ class GameEngine {
this.camera = camera;
this.controls = controls;
this.mixer = mixer;
this.activeObjects = new THREE.Group();
scene.add(this.activeObjects);
domNode.appendChild(renderer.domElement);
let texture = await this.loadTexture('/static/textures/bck.webp');
@@ -92,6 +97,13 @@ class GameEngine {
})
}
async loadPanorama(url){
let t = await this.loadTexture(url);
t.mapping = THREE.EquirectangularReflectionMapping;
this.scene.background = t;
this.scene.environment = t;
}
async captureScreenshot(type = 'image/webp', quality = 80){
return new Promise((resolve, reject)=>{
this.renderer.domElement.toBlob(resolve, type, quality)
@@ -107,6 +119,46 @@ class GameEngine {
stop(){
this.renderer.setAnimationLoop(null);
}
getMouseVector(mouseEvent, domElement){
//console.log(mouseEvent, domElement)
const mouse = new THREE.Vector2();
if (this.renderType == 'VR'){
let x;
if (mouseEvent.offsetX > window.innerWidth / 2){
x = (mouseEvent.offsetX - window.innerWidth / 2) * 2
}else {
x = mouseEvent.offsetX * 2;
}
mouse.x = ( x / window.innerWidth ) * 2 - 1;
mouse.y = - ( mouseEvent.offsetY / window.innerHeight ) * 2 + 1;
}else{
mouse.x = ( mouseEvent.offsetX / domElement.clientWidth ) * 2 - 1;
mouse.y = - ( mouseEvent.offsetY / domElement.clientHeight ) * 2 + 1;
}
return mouse;
}
intersect(mouseEvent, domElement, objects, recursive = false, returnInputObjects = true){
let mouse = this.getMouseVector(mouseEvent, domElement);
this.raycaster.setFromCamera(mouse, this.camera);
console.log(objects)
let intersects = this.raycaster.intersectObjects(objects, recursive);
if (returnInputObjects && recursive){
intersects.forEach(o=>{
while (o.object && !objects.includes(o.object)) {
o.object = o.object.parent;
}
})
}
return intersects;
}
autoScale(object, mk = 1){
let bb = new THREE.Box3().setFromObject(object);
let k = Math.max(bb.max.x - bb.min.x, bb.max.y - bb.min.y, bb.max.z - bb.min.z);
object.scale.multiplyScalar(mk/k);
}
}
export {GameEngine}