This commit is contained in:
2026-03-17 23:28:15 +02:00
parent 5ebdaa32f4
commit 6bc5b533ac
4 changed files with 56 additions and 35 deletions
@@ -77,6 +77,7 @@ class VideoPlayer extends EventManager {
} }
resolve(this); resolve(this);
console.log('VI', vi)
}) })
vi.src = engine.assetPath + data.$go.asset.name; vi.src = engine.assetPath + data.$go.asset.name;
}) })
+14 -10
View File
@@ -137,7 +137,7 @@ class GameEngine extends EventManager{
const geometry = new THREE.BufferGeometry().setFromPoints([new THREE.Vector3(0, 0, 0), new THREE.Vector3(0, 0, - 1)]); const geometry = new THREE.BufferGeometry().setFromPoints([new THREE.Vector3(0, 0, 0), new THREE.Vector3(0, 0, - 1)]);
let line = new THREE.Line(geometry); let line = new THREE.Line(geometry);
line.scale.z = 5; line.scale.z = 7;
this.controllerLine = line; this.controllerLine = line;
} }
@@ -247,20 +247,22 @@ class GameEngine extends EventManager{
domNode.appendChild(renderer.domElement); domNode.appendChild(renderer.domElement);
renderer.domElement.addEventListener('wheel', (event) => { this._wheelEvent = ((event) => {
event.preventDefault(); event.preventDefault();
if (gameEngine.hero){ if (this.hero){
if (!gameEngine.pointerControls.isLocked){ if (!this.pointerControls.isLocked){
gameEngine.hero.cameraZ += event.deltaY / 100; this.hero.cameraZ += event.deltaY / 100;
} }
}else{ }else{
gameEngine.camera.zoom -= event.deltaY / (1000 / gameEngine.camera.zoom); this.camera.zoom -= event.deltaY / (1000 / this.camera.zoom);
gameEngine.camera.zoom = Math.max(gameEngine.camera.zoom, .01); this.camera.zoom = Math.max(this.camera.zoom, .01);
//controls.rotateSpeed = 1 / Math.sqrt(gameEngine.camera.zoom); //controls.rotateSpeed = 1 / Math.sqrt(gameEngine.camera.zoom);
gameEngine.camera.updateProjectionMatrix(); this.camera.updateProjectionMatrix();
gameEngine.orbitControls.panSpeed = 1 / gameEngine.camera.zoom; this.orbitControls.panSpeed = 1 / this.camera.zoom;
} }
}) }).bind(this)
renderer.domElement.addEventListener('wheel', this._wheelEvent)
GameEngine.ktxLoader.detectSupport(renderer); GameEngine.ktxLoader.detectSupport(renderer);
} }
@@ -685,6 +687,7 @@ class GameEngine extends EventManager{
clearScene(){ clearScene(){
this.hero?.dispose(); this.hero?.dispose();
this.dashboard?.reset(); this.dashboard?.reset();
this.transformControls?.dispose();
this.pointerControls.dispose(); this.pointerControls.dispose();
//this.activeObjects.clear(); //this.activeObjects.clear();
this.physics.stop(); this.physics.stop();
@@ -722,6 +725,7 @@ class GameEngine extends EventManager{
this.arBtn?.remove(); this.arBtn?.remove();
this.xrBtn?.remove(); this.xrBtn?.remove();
this.stats?.dom?.remove(); this.stats?.dom?.remove();
this.renderer.domElement.removeEventListener('wheel', this._wheelEvent)
this.renderer.domElement.remove(); this.renderer.domElement.remove();
//console.log('Engine Disposed', this.renderer.info.memory.textures ); //console.log('Engine Disposed', this.renderer.info.memory.textures );
} }
+16 -8
View File
@@ -15,25 +15,30 @@ class Hero{
set cameraZ(v){ set cameraZ(v){
this.#cameraZ = Math.min(Math.max(v, 1), 12); this.#cameraZ = Math.min(Math.max(v, 1), 12);
if (this.#cameraZ == 1){ if (this.#cameraZ == 1 && !this.fpv){
if (this.engine.renderer.xr.isPresenting){ if (this.engine.renderer.xr.isPresenting){
this.#cameraZ = 0; this.#cameraZ = 0;
this.fpv = true; this.fpv = true;
this.cameraY = this.size.y*0.9;
this.camera.rotation.set(0,0,0); this.camera.rotation.set(0,0,0);
}else{ }else{
this.engine.pointerControls.lock(true).then(()=>{ this.engine.pointerControls.lock(true).then(()=>{
this.#cameraZ = 0; this.#cameraZ = 0;
this.fpv = true; this.fpv = true;
this.cameraY = this.size.y*0.9;
this.engine.pointerControls.once('unlock', ()=>{ this.engine.pointerControls.once('unlock', ()=>{
this.fpv = false; this.fpv = false;
this.cameraY = this.size.y*1.5;
}) })
}).catch(err=>{ }).catch(err=>{
console.log(err); console.log(err);
}) })
} }
}else if(this.fpv){ }else if(this.#cameraZ > 1 && this.fpv){
this.fpv = false; this.fpv = false;
this.cameraY = this.size.y*1.5;
} }
//this.engine.dashboard.updateText(this.#cameraZ);
} }
fadeDuration = 0.2 fadeDuration = 0.2
@@ -116,6 +121,9 @@ class Hero{
//this.camera = this.engine.cameraWorld; //this.camera = this.engine.cameraWorld;
// this.engine.activeObjects.position.x = -this.camera.position.x; // this.engine.activeObjects.position.x = -this.camera.position.x;
// this.engine.activeObjects.position.z = -this.camera.position.z; // this.engine.activeObjects.position.z = -this.camera.position.z;
}else if (this.engine.renderer.xr.isPresenting){
this.cameraMode = 'rotate'
this.engine.cameraRig.position.y = - this.engine.camera.position.y;
}else{ }else{
this.cameraMode = 'rotate' this.cameraMode = 'rotate'
this.engine.cameraRig.position.y = 0; this.engine.cameraRig.position.y = 0;
@@ -277,9 +285,9 @@ class Hero{
let cameraDesiredPosition; let cameraDesiredPosition;
if (this.cameraMode == 'rotate'){ if (this.cameraMode == 'rotate'){
cameraDesiredPosition = new Vector3( cameraDesiredPosition = new Vector3(
this.model.position.x + this.#cameraZ* Math.sin(this.model.rotation.y + Math.PI + this.cameraDelta + this.cameraIdleDelta), this.model.position.x + this.cameraZ* Math.sin(this.model.rotation.y + Math.PI + this.cameraDelta + this.cameraIdleDelta),
this.model.position.y + (this.fpv? this.size.y*0.9 : this.cameraY), this.model.position.y + this.cameraY,
this.model.position.z + this.#cameraZ* Math.cos(this.model.rotation.y + Math.PI + this.cameraDelta + this.cameraIdleDelta) this.model.position.z + this.cameraZ* Math.cos(this.model.rotation.y + Math.PI + this.cameraDelta + this.cameraIdleDelta)
) )
} else { } else {
// cameraDesiredPosition = new Vector3( // cameraDesiredPosition = new Vector3(
@@ -288,9 +296,9 @@ class Hero{
// this.model.position.z - this.#cameraZ // this.model.position.z - this.#cameraZ
// ) // )
cameraDesiredPosition = new Vector3( cameraDesiredPosition = new Vector3(
this.model.position.x + this.#cameraZ* Math.sin(0+ Math.PI + this.cameraDelta + this.cameraIdleDelta), this.model.position.x + this.cameraZ* Math.sin(0+ Math.PI + this.cameraDelta + this.cameraIdleDelta),
this.model.position.y + (this.fpv? this.size.y*0.9 : this.cameraY), this.model.position.y + this.cameraY,
this.model.position.z + this.#cameraZ* Math.cos(0+ Math.PI + this.cameraDelta + this.cameraIdleDelta) this.model.position.z + this.cameraZ* Math.cos(0+ Math.PI + this.cameraDelta + this.cameraIdleDelta)
) )
} }
+23 -15
View File
@@ -31,7 +31,7 @@ class PointerControls extends EventManager {
this._onPointerlockChange = onPointerlockChange.bind( this ); this._onPointerlockChange = onPointerlockChange.bind( this );
this._onPointerlockError = onPointerlockError.bind( this ); this._onPointerlockError = onPointerlockError.bind( this );
const onKeyDown = (event) => { this.onKeyDown = (event) => {
this.kb[event.code] = true; this.kb[event.code] = true;
switch (event.code) { switch (event.code) {
case 'Space': case 'Space':
@@ -41,32 +41,36 @@ class PointerControls extends EventManager {
} }
}; };
const onKeyUp = (event) => { this.onKeyUp = (event) => {
this.kb[event.code] = false; this.kb[event.code] = false;
}; };
this.dom.ownerDocument.addEventListener('keydown', onKeyDown); this.fnClick = () => {
this.dom.ownerDocument.addEventListener('keyup', onKeyUp);
this.dom.addEventListener('click', () => {
this.isLocked && this.clicked && this.clicked(); this.isLocked && this.clicked && this.clicked();
}); }
this.dom.addEventListener('mousedown', () => { this.fnMouseDown = () => {
this.isLocked && this.onpointer && this.onpointer('start'); this.isLocked && this.onpointer && this.onpointer('start');
}); }
this.dom.addEventListener('mousemove', () => { this.fnMouseMove = () => {
this.isLocked && this.onpointer && this.onpointer('drag'); this.isLocked && this.onpointer && this.onpointer('drag');
}); }
this.dom.addEventListener('mouseup', () => { this.fnMouseUp = () => {
this.isLocked && this.onpointer && this.onpointer('end'); this.isLocked && this.onpointer && this.onpointer('end');
}); }
this.update = () => { }; this.update = () => { };
this.object = engine.cameraWorld; this.object = engine.cameraWorld;
this.dom.ownerDocument.addEventListener('keydown', this.onKeyDown);
this.dom.ownerDocument.addEventListener('keyup', this.onKeyUp);
this.dom.addEventListener('click', this.fnClick);
this.dom.addEventListener('mousedown', this.fnMouseDown);
this.dom.addEventListener('mousemove', this.fnMouseMove);
this.dom.addEventListener('mouseup', this.fnMouseUp);
this.dom.ownerDocument.addEventListener( 'wheel', this._onMouseWheel ); this.dom.ownerDocument.addEventListener( 'wheel', this._onMouseWheel );
this.dom.ownerDocument.addEventListener( 'mousemove', this._onMouseMove ); this.dom.ownerDocument.addEventListener( 'mousemove', this._onMouseMove );
this.dom.ownerDocument.addEventListener( 'pointerlockchange', this._onPointerlockChange ); this.dom.ownerDocument.addEventListener( 'pointerlockchange', this._onPointerlockChange );
@@ -74,12 +78,16 @@ class PointerControls extends EventManager {
} }
dispose() { dispose() {
this.dom.ownerDocument.removeEventListener( 'keydown', this.onKeyDown );
this.dom.ownerDocument.removeEventListener( 'keyup', this.onKeyUp );
this.dom.removeEventListener('click', this.fnClick);
this.dom.removeEventListener('mousedown', this.fnMouseDown);
this.dom.removeEventListener('mousemove', this.fnMouseMove);
this.dom.removeEventListener('mouseup', this.fnMouseUp);
this.dom.ownerDocument.removeEventListener( 'wheel', this._onMouseWheel ); this.dom.ownerDocument.removeEventListener( 'wheel', this._onMouseWheel );
this.dom.ownerDocument.removeEventListener( 'mousemove', this._onMouseMove ); this.dom.ownerDocument.removeEventListener( 'mousemove', this._onMouseMove );
this.dom.ownerDocument.removeEventListener( 'pointerlockchange', this._onPointerlockChange ); this.dom.ownerDocument.removeEventListener( 'pointerlockchange', this._onPointerlockChange );
this.dom.ownerDocument.removeEventListener( 'pointerlockerror', this._onPointerlockError ); this.dom.ownerDocument.removeEventListener( 'pointerlockerror', this._onPointerlockError );
this.dom.ownerDocument.removeEventListener( 'keydown', this.onKeyDown );
this.dom.ownerDocument.removeEventListener( 'keyup', this.onKeyUp );
} }
get moveForward(){ get moveForward(){