diff --git a/packages/core/src/application/nanoforge-application.ts b/packages/core/src/application/nanoforge-application.ts index 04d0ce22..691a3dbb 100644 --- a/packages/core/src/application/nanoforge-application.ts +++ b/packages/core/src/application/nanoforge-application.ts @@ -17,6 +17,8 @@ export abstract class NanoforgeApplication { private _core?: Core; private readonly _options: IApplicationOptions; + protected abstract get type(): "client" | "server"; + constructor(options?: Partial) { this.applicationConfig = new ApplicationConfig(); @@ -47,6 +49,7 @@ export abstract class NanoforgeApplication { this._core = new Core( this.applicationConfig, new EditableApplicationContext(this.applicationConfig.libraryManager), + this.type === "server", ); return this._core.init(options, this._options); } diff --git a/packages/core/src/application/nanoforge-client.ts b/packages/core/src/application/nanoforge-client.ts index 1ddfe4ac..fc6f909d 100644 --- a/packages/core/src/application/nanoforge-client.ts +++ b/packages/core/src/application/nanoforge-client.ts @@ -7,6 +7,10 @@ import { import { NanoforgeApplication } from "./nanoforge-application"; export class NanoforgeClient extends NanoforgeApplication { + protected get type(): "client" { + return "client"; + } + public useGraphics(library: IGraphicsLibrary) { this.applicationConfig.useGraphicsLibrary(library); } diff --git a/packages/core/src/application/nanoforge-server.ts b/packages/core/src/application/nanoforge-server.ts index 74cca8a8..86d488b9 100644 --- a/packages/core/src/application/nanoforge-server.ts +++ b/packages/core/src/application/nanoforge-server.ts @@ -1,3 +1,7 @@ import { NanoforgeApplication } from "./nanoforge-application"; -export class NanoforgeServer extends NanoforgeApplication {} +export class NanoforgeServer extends NanoforgeApplication { + protected get type(): "server" { + return "server"; + } +} diff --git a/packages/core/src/core/core.ts b/packages/core/src/core/core.ts index 59955628..bcd4e623 100644 --- a/packages/core/src/core/core.ts +++ b/packages/core/src/core/core.ts @@ -22,10 +22,12 @@ export class Core { private readonly context: ApplicationContext; private options?: IApplicationOptions; private _configRegistry?: ConfigRegistry; + private _isServer; - constructor(config: ApplicationConfig, context: ApplicationContext) { + constructor(config: ApplicationConfig, context: ApplicationContext, isServer: boolean) { this.config = config; this.context = context; + this._isServer = isServer; } public async init(options: IRunOptions, appOptions: IApplicationOptions): Promise { @@ -52,12 +54,23 @@ export class Core { this.runClear(this.getClearContext()); return; } + }; + + const renderClient = () => { + render(); cancelAnimationFrame(requestAnimationFrameHandle); requestAnimationFrameHandle = requestAnimationFrame(runner); }; + const renderServer = () => { + render(); + }; + context.application.setIsRunning(true); - const intervalHandle = setInterval(render, 1000 / this.options.tickRate); + const intervalHandle = setInterval( + this._isServer ? renderServer : renderClient, + 1000 / this.options.tickRate, + ); } private getInitContext(options: IRunOptions): InitContext {