/** * Placement Module * * Follows Module pattern for: * - Serialization support * - Maintainability * - Usability * - Runtime extensibility * * Core Principles Followed: * 1. ✅ Extends Module * 2. ✅ Uses {type, params} structure * 3. ✅ Uses registerType() for placement generators * 4. ✅ register() returns PlacementResolved * 5. ✅ Calls addDefinition() for all registrations * 6. ✅ Built-in placements registered in constructor * * PlacementResolved follows Selection/Effect pattern: * - PlacementResolved = { place: () => Position[] } * - Each call to place() generates fresh positions * - Ensures randomness for random/poisson placements * - No caching workarounds needed */ import { Position, Range, PlacementDefinition } from './types'; import { ECSContext } from "../../core/ecs"; import { Module } from "../Module"; /** Get a random number in a range */ export declare function randomInRange(range: Range): number; /** Resolve a count value (number or range) */ export declare function resolveCount(count: number | Range): number; /** Resolve a number or range to a value */ export declare function resolveValue(value: number | Range | undefined, defaultValue: number): number; /** * Resolved placement - a function that generates positions * Similar to SelectionResolved and EffectResolved patterns */ export interface PlacementResolved { place: () => Position[]; } export declare class PlacementModule extends Module { constructor(ctx: ECSContext); /** * Generate positions from a placement definition * * Resolves the placement definition to a PlacementResolved object, * then calls its place() method to generate positions. * * This follows the established pattern from Selection and Effect modules. * Each call to place() generates fresh positions, which is important for * non-deterministic placements (random, poisson) to vary between executions. */ generate(placement: PlacementDefinition): Position[]; } export declare const placementModule: (ctx: ECSContext) => PlacementModule; //# sourceMappingURL=placement.d.ts.map