#72 epic refactoring
This commit is contained in:
+7
-43
@@ -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 = []
|
||||
|
||||
|
||||
Reference in New Issue
Block a user