import { Angle, Color } from '../../numbers'; import { AgentSet, CellGrid } from '../../structures'; import { Agent, Cell } from '../../entities'; import { AgentStyle } from '../../entities/Agent'; export interface Render2DConstructor { root: HTMLElement; renderWidth: number; renderHeight: number; worldWidth: number; id?: string; title?: string; autoPlay?: boolean; frameRate?: number; onCellClick?: (position: [number, number], renderer: Render2D) => void; } export type ColorFunction = (entity: U) => { fill: Color; stroke?: Color; }; export type StyleFunction = (entity: T) => AgentStyle; export declare class Render2D { renderWidth: number; renderHeight: number; ctx: CanvasRenderingContext2D; frameRate: number; cellWidth: number; cellHeight: number; constructor(opts: Render2DConstructor); clear(): void; drawCellGrid(world: CellGrid, opts?: { colorFunction?: ColorFunction; }): void; /** * Draws agents on the canvas * @param agents */ drawAgentSet(agents: AgentSet, opts?: { colorFunction?: ColorFunction; styleFunction?: StyleFunction; }): void; drawAgent(agent: T, opts?: { colorFunction?: ColorFunction; styleFunction?: StyleFunction; }): void; drawCircle(x: number, y: number, options?: { radius?: number; rotation?: Angle; fill?: Color; stroke?: Color; lineWidth?: number; showRotation?: boolean; }): void; /** * Draws a unit rectangle centered at x,y */ drawRectangle(x: number, y: number, options?: { width?: number; height?: number; rotation?: Angle; fill?: Color; stroke?: Color; lineWidth?: number; }): void; drawLine(x1: number, y1: number, x2: number, y2: number, stroke: Color, options?: { lineWidth?: number; }): void; drawTriangle(x: number, y: number, options?: { width?: number; rotation?: Angle; fill?: Color; stroke?: Color; lineWidth?: number; }): void; drawPolygon(points: [number, number][], options?: { fill?: Color; stroke?: Color; lineWidth?: number; }): void; drawPolyline(points: [number, number][], stroke: Color, options?: { lineWidth?: number; }): void; } export default Render2D;