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]
|
|
}
|
|
|
|
}
|