more rearchitecting

This commit is contained in:
austin 2024-07-16 14:41:22 -04:00
parent 6791ce2f3b
commit 2c807ce4f5
5 changed files with 19 additions and 38 deletions

View File

@ -3,21 +3,21 @@ import { Scene } from "/Scripts/types/scene";
/** /**
* The main scene interface * The main scene interface
*/ */
const TestScene1: Scene = { class TestScene1 extends Scene {
/** /**
* Called when the scene is created * Called when the scene is created
* @param instanceId The scene instanceId * @param instanceId The scene instanceId
*/ */
onCreate: (instanceId: number) => { onCreate = (instanceId: number) => {
console.log('Hello from the scene! My ID is ' + instanceId) console.log('Hello from the scene! My ID is ' + instanceId)
console.log(Object.keys(this)) console.log(Object.keys(this))
}, }
/** /**
* All hooks for the scene * All hooks for the scene
*/ */
hooks: [ hooks = [
/** /**
* Equip item hook * Equip item hook
@ -29,7 +29,7 @@ const TestScene1: Scene = {
} }
}, },
], ]
} }

View File

@ -61,12 +61,10 @@ export class HookManager {
scene: scene, scene: scene,
} }
//add to flat array //add to flat array
console.log('push 1')
this.hooks.push(trackedHook) this.hooks.push(trackedHook)
//add to signal array //add to signal array
const hookSignal: string = hook.signal const hookSignal: string = hook.signal
const signalArray: Array<TrackedHook> = this.signalHookMap?.[hookSignal] ? this.signalHookMap?.[hookSignal] : [] const signalArray: Array<TrackedHook> = this.signalHookMap?.[hookSignal] ? this.signalHookMap?.[hookSignal] : []
console.log('push 2')
signalArray.push(trackedHook) signalArray.push(trackedHook)
this.signalHookMap[hookSignal] = signalArray this.signalHookMap[hookSignal] = signalArray
// //
@ -78,7 +76,6 @@ export class HookManager {
this.trackedScenes.push(scene) this.trackedScenes.push(scene)
} }
//add to scene tracking structures //add to scene tracking structures
console.log('push 3')
scene.sceneHooks.push(trackedHook) scene.sceneHooks.push(trackedHook)
const sceneSignalArray: Array<TrackedHook> = scene.signalHookMap?.[hookSignal] ? scene.signalHookMap?.[hookSignal] : [] const sceneSignalArray: Array<TrackedHook> = scene.signalHookMap?.[hookSignal] ? scene.signalHookMap?.[hookSignal] : []
sceneSignalArray.push(trackedHook) sceneSignalArray.push(trackedHook)

View File

@ -40,12 +40,8 @@ export class SceneLoader {
loadScene(sceneName: string): number { loadScene(sceneName: string): number {
//load and instantiate scene //load and instantiate scene
//@ts-ignore //@ts-ignore
const sourceScene: Scene = require(sceneName).default const SourceSceneClass = require(sceneName).default
const sceneInstance: Scene = { const sceneInstance: Scene = new SourceSceneClass()
...sourceScene,
sceneHooks: [ ],
signalHookMap: { },
}
//creates an instance of the scene //creates an instance of the scene
let sceneInstanceId: number = this.createInstance(sceneInstance,true) let sceneInstanceId: number = this.createInstance(sceneInstance,true)
@ -88,20 +84,6 @@ export class SceneLoader {
throw new Error("Unsupported Operation!") throw new Error("Unsupported Operation!")
} }
/**
* Checks if the manager is tracking a given scene
* @param scene The scene
* @returns true if it is being tracked already, false otherwise
*/
containsScene(scene: Scene): boolean {
this.loadedScenes.forEach(trackedScene => {
if(trackedScene.scene === scene){
return true
}
})
return false
}
/** /**
* Gets a tracked scene by its id * Gets a tracked scene by its id
* @param sceneId The tracked scene * @param sceneId The tracked scene

View File

@ -15,7 +15,7 @@ export function SynchronizedType() {
/** /**
* The namespace of a given scene * The namespace of a given scene
*/ */
export interface Scene extends Namespace { export class Scene implements Namespace {
/** /**
* The instance id of this scene * The instance id of this scene
@ -25,12 +25,12 @@ export interface Scene extends Namespace {
/** /**
* Values that are synchronized between the client and server. They are also stored to disk when the scene saves * Values that are synchronized between the client and server. They are also stored to disk when the scene saves
*/ */
persistentValues?: Record<string,any> persistentValues: Record<string,any> = { }
/** /**
* The hooks that are provided by this scene * The hooks that are provided by this scene
*/ */
readonly hooks?: Array<Hook> readonly hooks: Array<Hook> = [ ]
/** /**
* Invoked when the scene is created * Invoked when the scene is created
@ -38,13 +38,13 @@ export interface Scene extends Namespace {
readonly onCreate?: (instanceId: number) => void readonly onCreate?: (instanceId: number) => void
/** /**
* Internal use * The map of signal name -> array of hooks created by this scene to fire on that signal
*/ */
readonly sceneHooks?: Array<TrackedHook> readonly signalHookMap: Record<string,Array<TrackedHook>> = { }
/** /**
* Internal use * Internal use
*/ */
readonly signalHookMap?: Record<string,any> readonly sceneHooks: Array<TrackedHook> = [ ]
} }

View File

@ -248,14 +248,16 @@ public class ScriptEngine {
/** /**
* Initializes a scene script * Initializes a scene script
* @param scenePath The scene's init script path * @param scenePath The scene's init script path
* @return The id assigned to the scene instance from the script-side
*/ */
public void initScene(String scenePath){ public int initScene(String scenePath){
//add files to virtual filesystem in script engine //add files to virtual filesystem in script engine
registerFile(scenePath); registerFile(scenePath);
//load scene from javascript side //load scene from javascript side
Value sceneLoader = this.engineObject.getMember("sceneLoader"); Value sceneLoader = this.engineObject.getMember("sceneLoader");
Value loadFunc = sceneLoader.getMember("loadScene"); Value loadFunc = sceneLoader.getMember("loadScene");
loadFunc.execute(scenePath); Value result = loadFunc.execute(scenePath);
return result.asInt();
} }