#72 epic refactoring

This commit is contained in:
2026-03-21 17:45:27 +02:00
parent da326ddf96
commit 8dd88174af
25 changed files with 665 additions and 672 deletions
+7 -43
View File
@@ -20,6 +20,7 @@ import { MotionEngine } from './MotionEngine.js';
import { Draggable } from './Draggable.js';
import { EventManager } from "./EventManager";
import { Telemetry } from './Telemetry.js';
import { clearObject } from './MeshUtils.js';
THREE.Cache.enabled = true
@@ -181,10 +182,7 @@ class GameEngine extends EventManager{
this.motionQueue = new MotionEngine();
this.assetPath = assetPath;
if (opts.telemetry){
this.tm = new Telemetry(opts.telemetry, opts.mode);
}
this.tm = new Telemetry(opts.mode);
// controls.enableDamping = true;
// controls.screenSpacePanning = true;
@@ -662,44 +660,8 @@ class GameEngine extends EventManager{
])
}
clearObject(o){
let disposables = []
o.traverse(object => {
if (object.isMesh) {
disposables.push(object);
}
if (object.isLight){
object.shadow?.map?.dispose();
object.shadow?.dispose();
object.dispose();
}
});
disposables.forEach(object=>{
object.removeFromParent();
object.geometry.dispose();
if (object.material.isMaterial) {
this.clearMaterial(object.material)
} else {
for (const material of object.material) this.clearMaterial(material)
}
})
}
clearMaterial(material) {
material.dispose();
for (const key of Object.keys(material)) {
const value = material[key]
if (value && typeof value == 'object' && 'minFilter' in value) {
//console.log('Disposing', value.name, this.renderer.info.memory.textures );
value.dispose();
//console.log('Disposed', value.name, this.renderer.info.memory.textures );
}
}
}
clearScene(){
this.hero?.dispose();
this.dashboard?.reset();
this.transformControls?.dispose();
this.pointerControls.dispose();
//this.activeObjects.clear();
@@ -709,7 +671,7 @@ class GameEngine extends EventManager{
this.gizmo?.dispose();
this.motionQueue.clearAll();
this.ambientSound.stop();
this.loadedObjects.forEach(o=>this.clearObject(o.scene))
this.loadedObjects.forEach(o=>clearObject(o.scene))
GameEngine.loadedTextures.forEach(t=>{
//console.log('Disposing', t.name, this.renderer.info.memory.textures );
t.dispose();
@@ -717,7 +679,7 @@ class GameEngine extends EventManager{
});
this.scene.background?.dispose?.();
this.scene.environment?.dispose?.();
this.clearObject(this.scene);
clearObject(this.scene);
this.scene = null;
this.tm?.setScene(null);
this.removeAllListenersOfType('beforeRender');
@@ -726,6 +688,7 @@ class GameEngine extends EventManager{
}
async resetScene(){
this.dashboard?.reset();//moved from clearscene to resetscene, because an updateText sync callback waits infinitely after gameengine destroy
this.clearScene();
await this.initScene();
}
@@ -741,14 +704,15 @@ class GameEngine extends EventManager{
this.stats?.dom?.remove();
this.renderer.domElement.removeEventListener('wheel', this._wheelEvent)
this.renderer.domElement.remove();
super.dispose();
//console.log('Engine Disposed', this.renderer.info.memory.textures );
}
static textureLoader = new THREE.TextureLoader();
static audioLoader = new THREE.AudioLoader();
static draco = new DRACOLoader().setDecoderPath('/3rdparty/draco/');
static gltfLoader = new GLTFLoader().setDRACOLoader(this.draco);
static ktxLoader = new KTX2Loader().setTranscoderPath( '/3rdparty/basis/' );
static gltfLoader = new GLTFLoader().setDRACOLoader(this.draco).setKTX2Loader(this.ktxLoader);
static loadedTextures = []