@hiddentao/clockwork-engine
Version:
A TypeScript/PIXI.js game engine for deterministic, replayable games with built-in rendering
136 lines • 5.18 kB
TypeScript
/**
* Memory Rendering Layer
*
* Headless rendering implementation that tracks state without actual rendering.
* Used for testing, replay validation, and server-side game logic.
*/
import type { RenderingLayer, ViewportOptions } from "../RenderingLayer";
import type { BlendMode, Color, NodeId, SpritesheetId, TextureFiltering, TextureId } from "../types";
interface GraphicsCommand {
type: "rectangle" | "roundRect" | "circle" | "polygon" | "line" | "polyline";
data: any;
}
interface ViewportState {
screenWidth: number;
screenHeight: number;
worldWidth?: number;
worldHeight?: number;
position: {
x: number;
y: number;
};
zoom: number;
options: ViewportOptions;
}
export declare class MemoryRenderingLayer implements RenderingLayer {
private nextNodeId;
private nextTextureId;
private nextSpritesheetId;
private nodes;
private textures;
private spritesheets;
private tickCallbackManager;
private tickerSpeed;
private canvasSize;
createNode(): NodeId;
destroyNode(id: NodeId): void;
addChild(parent: NodeId, child: NodeId): void;
removeChild(parent: NodeId, child: NodeId): void;
setPosition(id: NodeId, x: number, y: number): void;
setRotation(id: NodeId, radians: number): void;
setScale(id: NodeId, scaleX: number, scaleY: number): void;
setAnchor(id: NodeId, anchorX: number, anchorY: number): void;
setAlpha(id: NodeId, alpha: number): void;
setVisible(id: NodeId, visible: boolean): void;
setZIndex(id: NodeId, z: number): void;
setSize(id: NodeId, width: number, height: number): void;
getSize(id: NodeId): {
width: number;
height: number;
};
setTint(id: NodeId, color: Color): void;
setBlendMode(id: NodeId, mode: BlendMode): void;
setTextureFiltering(id: NodeId, filtering: TextureFiltering): void;
getBounds(id: NodeId): {
x: number;
y: number;
width: number;
height: number;
};
setSprite(id: NodeId, textureId: TextureId): void;
setAnimatedSprite(id: NodeId, textureIds: TextureId[], ticksPerFrame: number): void;
playAnimation(id: NodeId, loop: boolean): void;
stopAnimation(id: NodeId): void;
setAnimationCompleteCallback(_id: NodeId, _callback: ((id: NodeId) => void) | null): void;
drawRectangle(id: NodeId, x: number, y: number, w: number, h: number, fill?: Color, stroke?: Color, strokeWidth?: number): void;
drawCircle(id: NodeId, x: number, y: number, radius: number, fill?: Color, stroke?: Color, strokeWidth?: number): void;
drawPolygon(id: NodeId, points: number[], fill?: Color, stroke?: Color, strokeWidth?: number): void;
drawRoundRect(id: NodeId, x: number, y: number, w: number, h: number, radius: number, fill?: Color, stroke?: Color, strokeWidth?: number): void;
drawLine(id: NodeId, x1: number, y1: number, x2: number, y2: number, color: Color, width?: number): void;
drawPolyline(id: NodeId, points: number[], color: Color, width?: number): void;
clearGraphics(id: NodeId): void;
loadTexture(url: string): Promise<TextureId>;
loadSpritesheet(imageUrl: string, jsonData: any): Promise<SpritesheetId>;
getTexture(spritesheet: SpritesheetId, frameName: string): TextureId | null;
setViewport(id: NodeId, options: ViewportOptions): void;
getViewportPosition(id: NodeId): {
x: number;
y: number;
};
setViewportPosition(id: NodeId, x: number, y: number): void;
setViewportZoom(id: NodeId, zoom: number): void;
getViewportZoom(id: NodeId): number;
worldToScreen(id: NodeId, x: number, y: number): {
x: number;
y: number;
};
screenToWorld(id: NodeId, x: number, y: number): {
x: number;
y: number;
};
onTick(callback: (deltaTicks: number) => void): void;
setTickerSpeed(speed: number): void;
getFPS(): number;
render(): void;
resize(width: number, height: number): void;
destroy(): void;
hasNode(id: NodeId): boolean;
getChildren(id: NodeId): NodeId[];
getPosition(id: NodeId): {
x: number;
y: number;
};
getRotation(id: NodeId): number;
getScale(id: NodeId): {
x: number;
y: number;
};
getAnchor(id: NodeId): {
x: number;
y: number;
};
getAlpha(id: NodeId): number;
getVisible(id: NodeId): boolean;
getZIndex(id: NodeId): number;
getTint(id: NodeId): Color | undefined;
getBlendMode(id: NodeId): BlendMode | undefined;
getTextureFiltering(id: NodeId): TextureFiltering | undefined;
getSpriteTexture(id: NodeId): TextureId | undefined;
getAnimationData(id: NodeId): {
textures: TextureId[];
ticksPerFrame: number;
loop: boolean;
playing: boolean;
};
isAnimationPlaying(id: NodeId): boolean;
getGraphics(id: NodeId): GraphicsCommand[];
getViewportData(id: NodeId): ViewportState | undefined;
getTickerSpeed(): number;
getCanvasSize(): {
width: number;
height: number;
};
tick(deltaTicks: number): void;
}
export {};
//# sourceMappingURL=MemoryRenderingLayer.d.ts.map