diff --git a/packages/common/src/context/contexts/executions/execution.context.ts b/packages/common/src/context/contexts/executions/execution.context.ts index 00e2a34..cfb920b 100644 --- a/packages/common/src/context/contexts/executions/execution.context.ts +++ b/packages/common/src/context/contexts/executions/execution.context.ts @@ -1,9 +1,15 @@ +import { type IRunnerLibrary } from "../../../library"; import { BaseContext } from "./base.context"; -export class ExecutionContext extends BaseContext { +export class ExecutionContext extends BaseContext { protected _isRunning: boolean = true; + protected _currentLibrary: T; get isRunning() { return this._isRunning; } + + get lib(): T { + return this._currentLibrary; + } } diff --git a/packages/common/src/library/libraries/abstracts/component-system.library.abstract.ts b/packages/common/src/library/libraries/abstracts/component-system.library.abstract.ts index 68a59d7..ce93ed7 100644 --- a/packages/common/src/library/libraries/abstracts/component-system.library.abstract.ts +++ b/packages/common/src/library/libraries/abstracts/component-system.library.abstract.ts @@ -6,5 +6,5 @@ export abstract class BaseComponentSystemLibrary extends Library implements IComponentSystemLibrary { - abstract run(context: ExecutionContext): Promise; + abstract run(context: ExecutionContext): Promise; } diff --git a/packages/common/src/library/libraries/abstracts/graphics.library.abstract.ts b/packages/common/src/library/libraries/abstracts/graphics.library.abstract.ts index bf95912..facb9db 100644 --- a/packages/common/src/library/libraries/abstracts/graphics.library.abstract.ts +++ b/packages/common/src/library/libraries/abstracts/graphics.library.abstract.ts @@ -3,5 +3,5 @@ import { type IGraphicsLibrary } from "../interfaces"; import { Library } from "../library"; export abstract class BaseGraphicsLibrary extends Library implements IGraphicsLibrary { - abstract run(context: ExecutionContext): Promise; + abstract run(context: ExecutionContext): Promise; } diff --git a/packages/common/src/library/libraries/interfaces/bases/runner.library.type.ts b/packages/common/src/library/libraries/interfaces/bases/runner.library.type.ts index 8c04831..28be752 100644 --- a/packages/common/src/library/libraries/interfaces/bases/runner.library.type.ts +++ b/packages/common/src/library/libraries/interfaces/bases/runner.library.type.ts @@ -2,5 +2,5 @@ import { type ExecutionContext } from "../../../../context"; import { type ILibrary } from "../../library.type"; export interface IRunnerLibrary extends ILibrary { - run(context: ExecutionContext): Promise; + run(context: ExecutionContext): Promise; } diff --git a/packages/core/src/common/context/contexts/executions/execution.editable-context.ts b/packages/core/src/common/context/contexts/executions/execution.editable-context.ts index d6b2d96..a425fc2 100644 --- a/packages/core/src/common/context/contexts/executions/execution.editable-context.ts +++ b/packages/core/src/common/context/contexts/executions/execution.editable-context.ts @@ -1,7 +1,11 @@ -import { ExecutionContext } from "@nanoforge/common"; +import { ExecutionContext, type IRunnerLibrary } from "@nanoforge/common"; -export class EditableExecutionContext extends ExecutionContext { +export class EditableExecutionContext extends ExecutionContext { setIsRunning(isRunning: boolean) { this._isRunning = isRunning; } + + setCurrentLibrary(library: T) { + this._currentLibrary = library; + } } diff --git a/packages/core/src/core/core.ts b/packages/core/src/core/core.ts index 73f7d35..7d1d78d 100644 --- a/packages/core/src/core/core.ts +++ b/packages/core/src/core/core.ts @@ -1,7 +1,6 @@ import { type ApplicationContext, ClearContext, - ExecutionContext, type IRunOptions, type IRunnerLibrary, InitContext, @@ -11,6 +10,7 @@ import { import { type ApplicationConfig } from "../application/application-config"; import type { IApplicationOptions } from "../application/application-options.type"; +import { EditableExecutionContext } from "../common/context/contexts/executions/execution.editable-context"; import { type EditableLibraryContext } from "../common/context/contexts/library.editable-context"; export class Core { @@ -63,8 +63,8 @@ export class Core { return new InitContext(this.context, this.config.libraryManager, options); } - private getExecutionContext(): ExecutionContext { - return new ExecutionContext(this.context, this.config.libraryManager); + private getExecutionContext(): EditableExecutionContext { + return new EditableExecutionContext(this.context, this.config.libraryManager); } private getClearContext(): ClearContext { @@ -78,8 +78,12 @@ export class Core { } } - private async runExecute(context: ExecutionContext, libraries: LibraryHandle[]) { + private async runExecute( + context: EditableExecutionContext, + libraries: LibraryHandle[], + ) { for (const handle of libraries) { + context.setCurrentLibrary(handle.library); await handle.library.run(context); } } diff --git a/packages/ecs/lib/libecs.d.ts b/packages/ecs/lib/libecs.d.ts index 6839d53..3186f04 100644 --- a/packages/ecs/lib/libecs.d.ts +++ b/packages/ecs/lib/libecs.d.ts @@ -1,17 +1,4 @@ // TypeScript bindings for emscripten-generated code. Automatically generated at compile time. -declare namespace RuntimeExports { - let HEAPF32: any; - let HEAPF64: any; - let HEAP_DATA_VIEW: any; - let HEAP8: any; - let HEAPU8: any; - let HEAP16: any; - let HEAPU16: any; - let HEAP32: any; - let HEAPU32: any; - let HEAP64: any; - let HEAPU64: any; -} interface WasmModule { } @@ -20,6 +7,8 @@ export interface ClassHandle { delete(): void; deleteLater(): this; isDeleted(): boolean; + // @ts-ignore - If targeting lower than ESNext, this symbol might not exist. + [Symbol.dispose](): void; clone(): this; } export interface container extends ClassHandle { @@ -85,5 +74,5 @@ interface EmbindModule { }; } -export type MainModule = WasmModule & typeof RuntimeExports & EmbindModule; +export type MainModule = WasmModule & EmbindModule; export default function MainModuleFactory (options?: unknown): Promise; diff --git a/packages/ecs/src/ecs-context.type.ts b/packages/ecs/src/ecs-context.type.ts new file mode 100644 index 0000000..a20c24b --- /dev/null +++ b/packages/ecs/src/ecs-context.type.ts @@ -0,0 +1,5 @@ +import { type ExecutionContext } from "@nanoforge/common"; + +import { type ECSLibrary } from "./ecs-library"; + +export type ECSContext = ExecutionContext; diff --git a/packages/ecs/src/ecs-library.ts b/packages/ecs/src/ecs-library.ts index cee7384..793a3e2 100644 --- a/packages/ecs/src/ecs-library.ts +++ b/packages/ecs/src/ecs-library.ts @@ -100,7 +100,7 @@ export class ECSLibrary extends BaseComponentSystemLibrary { this.registry.addSystem(system); } - getZipper(types: [Component]): [any] { + getZipper(types: [Component, ...Component[]]): [any, ...any[]] { return this.registry.getZipper(types); } } diff --git a/packages/ecs/src/index.ts b/packages/ecs/src/index.ts index bdc631f..739ae3b 100644 --- a/packages/ecs/src/index.ts +++ b/packages/ecs/src/index.ts @@ -1,3 +1,4 @@ import "../lib/libecs.wasm"; export * from "./ecs-library"; +export type { ECSContext } from "./ecs-context.type"; diff --git a/packages/sound/src/sound.library.ts b/packages/sound/src/sound.library.ts index 1a6b1a3..25ce81a 100644 --- a/packages/sound/src/sound.library.ts +++ b/packages/sound/src/sound.library.ts @@ -1,5 +1,4 @@ -import { BaseSoundLibrary } from "@nanoforge/common"; -import { NfNotFound } from "@nanoforge/common/src/exceptions"; +import { BaseSoundLibrary, NfNotFound } from "@nanoforge/common"; export class SoundLibrary extends BaseSoundLibrary { private muted: boolean;