@hiddentao/clockwork-engine
Version:
A TypeScript/PIXI.js game engine for deterministic, replayable games with built-in rendering
167 lines • 5.87 kB
TypeScript
import { EventEmitter } from "./EventEmitter";
import { GameEventManager } from "./GameEventManager";
import type { GameEngineInterface, GameObject } from "./GameObject";
import { GameObjectGroup } from "./GameObjectGroup";
import type { GameRecorder } from "./GameRecorder";
import type { Loader } from "./Loader";
import { PRNG } from "./PRNG";
import { Timer } from "./Timer";
import { AssetLoader } from "./assets/AssetLoader";
import { CollisionGrid } from "./geometry";
import type { PlatformLayer } from "./platform";
import { type GameConfig, GameState } from "./types";
export declare enum GameEngineEventType {
STATE_CHANGE = "stateChange"
}
export interface GameEngineEvents extends Record<string, (...args: any[]) => void> {
[GameEngineEventType.STATE_CHANGE]: (newState: GameState, oldState: GameState) => void;
}
export interface GameEngineOptions {
loader: Loader;
platform: PlatformLayer;
assetLoader?: AssetLoader;
}
export declare abstract class GameEngine extends EventEmitter<GameEngineEvents> implements GameEngineInterface {
protected gameObjectGroups: Map<string, GameObjectGroup>;
protected totalTicks: number;
protected state: GameState;
protected seed: string;
protected gameConfig: GameConfig;
protected prng: PRNG;
protected timer: Timer;
protected eventManager: GameEventManager;
protected recorder: GameRecorder | undefined;
protected collisionTree: CollisionGrid;
protected loader: Loader;
protected platform: PlatformLayer;
protected assetLoader?: AssetLoader;
constructor(options: GameEngineOptions);
protected setState(newState: GameState): void;
/**
* Reset the game engine to initial state
* Clears all game objects, resets tick counter, and prepares for new game
* If assetLoader is configured, preloads all registered assets before setup()
* @param gameConfig Game configuration containing seed and initial state
*/
reset(gameConfig: GameConfig): Promise<void>;
/**
* Abstract method for game-specific initialization
* Override in subclasses to create initial game objects and configure game state
* Called automatically during reset() to set up the game world
* @param gameConfig Game configuration containing seed and initial state
*/
abstract setup(gameConfig: GameConfig): Promise<void>;
/**
* Start the game by transitioning from READY to PLAYING state
* Enables game loop processing and begins gameplay
* @throws Error if engine is not in READY state
*/
start(): void;
/**
* Pause the game by transitioning from PLAYING to PAUSED state
* Stops game loop processing while maintaining current state
* @throws Error if engine is not in PLAYING state
*/
pause(): void;
/**
* Resume the game by transitioning from PAUSED to PLAYING state
* Restarts game loop processing from paused state
* @throws Error if engine is not in PAUSED state
*/
resume(): void;
/**
* End the game by transitioning to ENDED state
* Stops all game processing and marks game as finished
* @throws Error if engine is not in PLAYING or PAUSED state
*/
end(): void;
/**
* Update the game state for the current tick
* Processes inputs, timers, and game objects in deterministic order
* @param deltaTicks Number of ticks to advance the simulation
*/
update(deltaTicks: number): void;
/**
* Register a GameObject with the engine
* Automatically creates and manages groups by type
* @param gameObject The game object to register
* @param overrideType Optional type to use instead of gameObject.getType()
*/
registerGameObject(gameObject: GameObject, overrideType?: string): void;
/**
* Get a GameObjectGroup by type
* Returns undefined if no objects of that type have been registered
*/
getGameObjectGroup(type: string): GameObjectGroup | undefined;
/**
* Get all registered object types
*/
getRegisteredTypes(): string[];
/**
* Get the current game state
*/
getState(): GameState;
/**
* Get the seed used for this game session
*/
getSeed(): string;
/**
* Get the game configuration
*/
getGameConfig(): GameConfig;
/**
* Get the total number of ticks processed
*/
getTotalTicks(): number;
/**
* Get the PRNG instance for deterministic random numbers
*/
getPRNG(): PRNG;
/**
* Clear all destroyed GameObjects from all groups
* @returns Total number of destroyed objects removed
*/
clearDestroyedGameObjects(): number;
/**
* Schedule a one-time callback to execute after the specified number of ticks
*/
setTimeout(callback: () => void, ticks: number): number;
/**
* Schedule a repeating callback to execute every specified number of ticks
*/
setInterval(callback: () => void, ticks: number): number;
/**
* Cancel a timer
*/
clearTimer(id: number): boolean;
/**
* Get the timer system
*/
getTimer(): Timer;
/**
* Get the event manager
*/
getEventManager(): GameEventManager;
/**
* Set the game recorder for recording gameplay
* Also sets the recorder on the event manager
*/
setGameRecorder(recorder: GameRecorder | undefined): void;
/**
* Get the collision tree for spatial collision detection
*/
getCollisionTree(): CollisionGrid;
/**
* Get the loader instance for data loading
*/
getLoader(): Loader;
/**
* Get the platform layer
*/
getPlatform(): PlatformLayer;
/**
* Get the asset loader for managing game assets
*/
getAssetLoader(): AssetLoader | undefined;
}
//# sourceMappingURL=GameEngine.d.ts.map