Some checks failed
		
		
	
	studiorailgun/Renderer/pipeline/head There was a failure building this commit
				
			
		
			
				
	
	
		
			96 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { Engine } from "/Scripts/types/engine";
 | 
						|
import { Hook } from "/Scripts/types/hook";
 | 
						|
import { Scene } from "/Scripts/types/scene";
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
 * Loads scenes
 | 
						|
 */
 | 
						|
export class SceneLoader {
 | 
						|
 | 
						|
 | 
						|
    
 | 
						|
    /**
 | 
						|
     * The parent engine object
 | 
						|
     */
 | 
						|
    engine: Engine
 | 
						|
 | 
						|
    /**
 | 
						|
     * The list of loaded scenes
 | 
						|
     */
 | 
						|
    loadedScenes: Scene[] = [ ]
 | 
						|
 | 
						|
    /**
 | 
						|
     * A record of tracked scene id to tracked scene object
 | 
						|
     */
 | 
						|
    sceneIdMap: Record<number,Scene> = { }
 | 
						|
 | 
						|
    /**
 | 
						|
     * A scene 
 | 
						|
     */
 | 
						|
    sceneIdIncrementer: number = 0
 | 
						|
 | 
						|
    /**
 | 
						|
     * Loads a scene
 | 
						|
     * @param sceneName The scene to load
 | 
						|
     * @returns The id assigned to the instance of the scene
 | 
						|
     */
 | 
						|
    loadScene(sceneName: string): number {
 | 
						|
        //load and instantiate scene
 | 
						|
        //@ts-ignore
 | 
						|
        const SourceSceneClass = require(sceneName).default
 | 
						|
        const sceneInstance: Scene = new SourceSceneClass()
 | 
						|
 | 
						|
        //creates an instance of the scene
 | 
						|
        let sceneInstanceId: number = this.createInstance(sceneInstance,true)
 | 
						|
 | 
						|
        //call on init for scene
 | 
						|
        if(sceneInstance.onCreate){
 | 
						|
            sceneInstance.onCreate(sceneInstanceId)
 | 
						|
        }
 | 
						|
 | 
						|
        return sceneInstanceId
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Registers all hooks in a scene to the hook manager
 | 
						|
     * @param scene The scene
 | 
						|
     * @returns The id assigned to the instance of the scene
 | 
						|
     */
 | 
						|
    createInstance(scene: Scene, isServerScene: boolean): number {
 | 
						|
        //add to the list of tracked scenes
 | 
						|
        const trackedScene: Scene = {
 | 
						|
            instanceId: this.sceneIdIncrementer++,
 | 
						|
            ...scene,
 | 
						|
        }
 | 
						|
        this.loadedScenes.push(trackedScene)
 | 
						|
        this.sceneIdMap[trackedScene.instanceId] = trackedScene
 | 
						|
 | 
						|
        //load all hooks from the scene
 | 
						|
        scene?.hooks?.forEach((hook: Hook) => {
 | 
						|
            this.engine.hookManager.registerHook(trackedScene,hook,isServerScene)
 | 
						|
        })
 | 
						|
 | 
						|
        return trackedScene.instanceId
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Deregisters all hooks in a scene from the hook manager
 | 
						|
     * @param scene The scene
 | 
						|
     */
 | 
						|
    deregisterScene(scene: Scene){
 | 
						|
        throw new Error("Unsupported Operation!")
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * Gets a tracked scene by its id
 | 
						|
     * @param sceneId The tracked scene
 | 
						|
     * @returns The tracked scene if it exists, null otherwise
 | 
						|
     */
 | 
						|
    getScene(sceneId: number){
 | 
						|
        return this.sceneIdMap[sceneId]
 | 
						|
    }
 | 
						|
    
 | 
						|
}
 |