/** * Combat Visualization Schema * * Defines data structures for rendering combat state visually. * Supports both ASCII grid rendering and frontend JSON consumption. * * Key Features: * - Grid-based position display * - Token visualization with size footprints * - Terrain and obstacle rendering * - AoE shape visualization (circle, cone, line) * - Movement path display * - Combat log entries * * @module schema/combat-visualization */ import { z } from 'zod'; /** * Token display state for visualization */ export declare const TokenDisplaySchema: z.ZodObject<{ id: z.ZodString; name: z.ZodString; label: z.ZodString; position: z.ZodOptional; }, "strip", z.ZodTypeAny, { x: number; y: number; z?: number | undefined; }, { x: number; y: number; z?: number | undefined; }>>; size: z.ZodEnum<["tiny", "small", "medium", "large", "huge", "gargantuan"]>; footprint: z.ZodNumber; isEnemy: z.ZodBoolean; isCurrentTurn: z.ZodBoolean; isDefeated: z.ZodBoolean; hp: z.ZodNumber; maxHp: z.ZodNumber; hpPercentage: z.ZodNumber; hpStatus: z.ZodEnum<["healthy", "wounded", "bloodied", "critical", "defeated"]>; initiative: z.ZodNumber; conditions: z.ZodArray; ac: z.ZodOptional; movementSpeed: z.ZodOptional; movementRemaining: z.ZodOptional; hasDashed: z.ZodOptional; }, "strip", z.ZodTypeAny, { id: string; name: string; conditions: string[]; hp: number; maxHp: number; size: "medium" | "tiny" | "small" | "large" | "huge" | "gargantuan"; initiative: number; isEnemy: boolean; label: string; footprint: number; isCurrentTurn: boolean; isDefeated: boolean; hpPercentage: number; hpStatus: "critical" | "wounded" | "healthy" | "defeated" | "bloodied"; position?: { x: number; y: number; z?: number | undefined; } | undefined; ac?: number | undefined; movementSpeed?: number | undefined; movementRemaining?: number | undefined; hasDashed?: boolean | undefined; }, { id: string; name: string; conditions: string[]; hp: number; maxHp: number; size: "medium" | "tiny" | "small" | "large" | "huge" | "gargantuan"; initiative: number; isEnemy: boolean; label: string; footprint: number; isCurrentTurn: boolean; isDefeated: boolean; hpPercentage: number; hpStatus: "critical" | "wounded" | "healthy" | "defeated" | "bloodied"; position?: { x: number; y: number; z?: number | undefined; } | undefined; ac?: number | undefined; movementSpeed?: number | undefined; movementRemaining?: number | undefined; hasDashed?: boolean | undefined; }>; export type TokenDisplay = z.infer; /** * Terrain tile for visualization */ export declare const TerrainTileSchema: z.ZodObject<{ x: z.ZodNumber; y: z.ZodNumber; type: z.ZodEnum<["obstacle", "difficult", "water", "pit", "lava", "cover_half", "cover_three_quarter"]>; symbol: z.ZodString; }, "strip", z.ZodTypeAny, { symbol: string; type: "water" | "obstacle" | "difficult" | "pit" | "lava" | "cover_half" | "cover_three_quarter"; x: number; y: number; }, { symbol: string; type: "water" | "obstacle" | "difficult" | "pit" | "lava" | "cover_half" | "cover_three_quarter"; x: number; y: number; }>; export type TerrainTile = z.infer; /** * Terrain layer for visualization */ export declare const TerrainLayerSchema: z.ZodObject<{ obstacles: z.ZodArray; symbol: z.ZodString; }, "strip", z.ZodTypeAny, { symbol: string; type: "water" | "obstacle" | "difficult" | "pit" | "lava" | "cover_half" | "cover_three_quarter"; x: number; y: number; }, { symbol: string; type: "water" | "obstacle" | "difficult" | "pit" | "lava" | "cover_half" | "cover_three_quarter"; x: number; y: number; }>, "many">; difficultTerrain: z.ZodDefault; symbol: z.ZodString; }, "strip", z.ZodTypeAny, { symbol: string; type: "water" | "obstacle" | "difficult" | "pit" | "lava" | "cover_half" | "cover_three_quarter"; x: number; y: number; }, { symbol: string; type: "water" | "obstacle" | "difficult" | "pit" | "lava" | "cover_half" | "cover_three_quarter"; x: number; y: number; }>, "many">>; }, "strip", z.ZodTypeAny, { obstacles: { symbol: string; type: "water" | "obstacle" | "difficult" | "pit" | "lava" | "cover_half" | "cover_three_quarter"; x: number; y: number; }[]; difficultTerrain: { symbol: string; type: "water" | "obstacle" | "difficult" | "pit" | "lava" | "cover_half" | "cover_three_quarter"; x: number; y: number; }[]; }, { obstacles: { symbol: string; type: "water" | "obstacle" | "difficult" | "pit" | "lava" | "cover_half" | "cover_three_quarter"; x: number; y: number; }[]; difficultTerrain?: { symbol: string; type: "water" | "obstacle" | "difficult" | "pit" | "lava" | "cover_half" | "cover_three_quarter"; x: number; y: number; }[] | undefined; }>; export type TerrainLayer = z.infer; /** * AoE shape types */ export declare const AoEShapeSchema: z.ZodEnum<["circle", "cone", "line", "cube", "sphere", "cylinder"]>; export type AoEShape = z.infer; /** * AoE visualization data */ export declare const AoEDisplaySchema: z.ZodObject<{ id: z.ZodString; shape: z.ZodEnum<["circle", "cone", "line", "cube", "sphere", "cylinder"]>; origin: z.ZodObject<{ x: z.ZodNumber; y: z.ZodNumber; z: z.ZodOptional; }, "strip", z.ZodTypeAny, { x: number; y: number; z?: number | undefined; }, { x: number; y: number; z?: number | undefined; }>; radiusFeet: z.ZodOptional; lengthFeet: z.ZodOptional; widthFeet: z.ZodOptional; angleDegrees: z.ZodOptional; direction: z.ZodOptional>; affectedTiles: z.ZodArray; }, "strip", z.ZodTypeAny, { x: number; y: number; z?: number | undefined; }, { x: number; y: number; z?: number | undefined; }>, "many">; blockedTiles: z.ZodOptional; }, "strip", z.ZodTypeAny, { x: number; y: number; z?: number | undefined; }, { x: number; y: number; z?: number | undefined; }>, "many">>; affectedParticipantIds: z.ZodArray; color: z.ZodOptional; symbol: z.ZodDefault; name: z.ZodOptional; }, "strip", z.ZodTypeAny, { symbol: string; id: string; shape: "cone" | "cube" | "cylinder" | "line" | "sphere" | "circle"; origin: { x: number; y: number; z?: number | undefined; }; affectedTiles: { x: number; y: number; z?: number | undefined; }[]; affectedParticipantIds: string[]; name?: string | undefined; direction?: { x: number; y: number; } | undefined; color?: string | undefined; radiusFeet?: number | undefined; lengthFeet?: number | undefined; widthFeet?: number | undefined; angleDegrees?: number | undefined; blockedTiles?: { x: number; y: number; z?: number | undefined; }[] | undefined; }, { id: string; shape: "cone" | "cube" | "cylinder" | "line" | "sphere" | "circle"; origin: { x: number; y: number; z?: number | undefined; }; affectedTiles: { x: number; y: number; z?: number | undefined; }[]; affectedParticipantIds: string[]; symbol?: string | undefined; name?: string | undefined; direction?: { x: number; y: number; } | undefined; color?: string | undefined; radiusFeet?: number | undefined; lengthFeet?: number | undefined; widthFeet?: number | undefined; angleDegrees?: number | undefined; blockedTiles?: { x: number; y: number; z?: number | undefined; }[] | undefined; }>; export type AoEDisplay = z.infer; /** * Movement path segment */ export declare const PathSegmentSchema: z.ZodObject<{ from: z.ZodObject<{ x: z.ZodNumber; y: z.ZodNumber; z: z.ZodOptional; }, "strip", z.ZodTypeAny, { x: number; y: number; z?: number | undefined; }, { x: number; y: number; z?: number | undefined; }>; to: z.ZodObject<{ x: z.ZodNumber; y: z.ZodNumber; z: z.ZodOptional; }, "strip", z.ZodTypeAny, { x: number; y: number; z?: number | undefined; }, { x: number; y: number; z?: number | undefined; }>; cost: z.ZodNumber; isDiagonal: z.ZodBoolean; isDifficultTerrain: z.ZodBoolean; }, "strip", z.ZodTypeAny, { from: { x: number; y: number; z?: number | undefined; }; to: { x: number; y: number; z?: number | undefined; }; cost: number; isDiagonal: boolean; isDifficultTerrain: boolean; }, { from: { x: number; y: number; z?: number | undefined; }; to: { x: number; y: number; z?: number | undefined; }; cost: number; isDiagonal: boolean; isDifficultTerrain: boolean; }>; export type PathSegment = z.infer; /** * Full movement path visualization */ export declare const MovementPathSchema: z.ZodObject<{ participantId: z.ZodString; path: z.ZodArray; }, "strip", z.ZodTypeAny, { x: number; y: number; z?: number | undefined; }, { x: number; y: number; z?: number | undefined; }>, "many">; segments: z.ZodArray; }, "strip", z.ZodTypeAny, { x: number; y: number; z?: number | undefined; }, { x: number; y: number; z?: number | undefined; }>; to: z.ZodObject<{ x: z.ZodNumber; y: z.ZodNumber; z: z.ZodOptional; }, "strip", z.ZodTypeAny, { x: number; y: number; z?: number | undefined; }, { x: number; y: number; z?: number | undefined; }>; cost: z.ZodNumber; isDiagonal: z.ZodBoolean; isDifficultTerrain: z.ZodBoolean; }, "strip", z.ZodTypeAny, { from: { x: number; y: number; z?: number | undefined; }; to: { x: number; y: number; z?: number | undefined; }; cost: number; isDiagonal: boolean; isDifficultTerrain: boolean; }, { from: { x: number; y: number; z?: number | undefined; }; to: { x: number; y: number; z?: number | undefined; }; cost: number; isDiagonal: boolean; isDifficultTerrain: boolean; }>, "many">; totalCost: z.ZodNumber; remainingMovement: z.ZodNumber; triggersOpportunityAttacks: z.ZodDefault>; isValid: z.ZodBoolean; }, "strip", z.ZodTypeAny, { path: { x: number; y: number; z?: number | undefined; }[]; participantId: string; segments: { from: { x: number; y: number; z?: number | undefined; }; to: { x: number; y: number; z?: number | undefined; }; cost: number; isDiagonal: boolean; isDifficultTerrain: boolean; }[]; totalCost: number; remainingMovement: number; triggersOpportunityAttacks: string[]; isValid: boolean; }, { path: { x: number; y: number; z?: number | undefined; }[]; participantId: string; segments: { from: { x: number; y: number; z?: number | undefined; }; to: { x: number; y: number; z?: number | undefined; }; cost: number; isDiagonal: boolean; isDifficultTerrain: boolean; }[]; totalCost: number; remainingMovement: number; isValid: boolean; triggersOpportunityAttacks?: string[] | undefined; }>; export type MovementPath = z.infer; /** * Combat log entry types */ export declare const CombatLogTypeSchema: z.ZodEnum<["round_start", "turn_start", "turn_end", "attack", "damage", "healing", "spell_cast", "movement", "condition_applied", "condition_removed", "death", "opportunity_attack", "saving_throw", "lair_action"]>; export type CombatLogType = z.infer; /** * Combat log entry */ export declare const CombatLogEntrySchema: z.ZodObject<{ id: z.ZodString; timestamp: z.ZodString; round: z.ZodNumber; type: z.ZodEnum<["round_start", "turn_start", "turn_end", "attack", "damage", "healing", "spell_cast", "movement", "condition_applied", "condition_removed", "death", "opportunity_attack", "saving_throw", "lair_action"]>; actorId: z.ZodOptional; actorName: z.ZodOptional; targetId: z.ZodOptional; targetName: z.ZodOptional; action: z.ZodString; details: z.ZodOptional>; diceRoll: z.ZodOptional; damage: z.ZodOptional; healing: z.ZodOptional; success: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "damage" | "healing" | "attack" | "opportunity_attack" | "death" | "spell_cast" | "lair_action" | "saving_throw" | "condition_applied" | "movement" | "round_start" | "turn_start" | "turn_end" | "condition_removed"; id: string; action: string; timestamp: string; round: number; success?: boolean | undefined; actorId?: string | undefined; targetId?: string | undefined; details?: Record | undefined; damage?: number | undefined; healing?: number | undefined; actorName?: string | undefined; targetName?: string | undefined; diceRoll?: string | undefined; }, { type: "damage" | "healing" | "attack" | "opportunity_attack" | "death" | "spell_cast" | "lair_action" | "saving_throw" | "condition_applied" | "movement" | "round_start" | "turn_start" | "turn_end" | "condition_removed"; id: string; action: string; timestamp: string; round: number; success?: boolean | undefined; actorId?: string | undefined; targetId?: string | undefined; details?: Record | undefined; damage?: number | undefined; healing?: number | undefined; actorName?: string | undefined; targetName?: string | undefined; diceRoll?: string | undefined; }>; export type CombatLogEntry = z.infer; /** * Turn order entry */ export declare const TurnOrderEntrySchema: z.ZodObject<{ id: z.ZodString; name: z.ZodString; initiative: z.ZodNumber; isEnemy: z.ZodBoolean; isDefeated: z.ZodBoolean; isCurrent: z.ZodBoolean; isLairAction: z.ZodDefault; hpPercentage: z.ZodNumber; }, "strip", z.ZodTypeAny, { id: string; name: string; initiative: number; isEnemy: boolean; isDefeated: boolean; hpPercentage: number; isCurrent: boolean; isLairAction: boolean; }, { id: string; name: string; initiative: number; isEnemy: boolean; isDefeated: boolean; hpPercentage: number; isCurrent: boolean; isLairAction?: boolean | undefined; }>; export type TurnOrderEntry = z.infer; /** * Full turn order display */ export declare const TurnOrderDisplaySchema: z.ZodObject<{ round: z.ZodNumber; currentIndex: z.ZodNumber; entries: z.ZodArray; hpPercentage: z.ZodNumber; }, "strip", z.ZodTypeAny, { id: string; name: string; initiative: number; isEnemy: boolean; isDefeated: boolean; hpPercentage: number; isCurrent: boolean; isLairAction: boolean; }, { id: string; name: string; initiative: number; isEnemy: boolean; isDefeated: boolean; hpPercentage: number; isCurrent: boolean; isLairAction?: boolean | undefined; }>, "many">; isLairActionPending: z.ZodDefault; }, "strip", z.ZodTypeAny, { entries: { id: string; name: string; initiative: number; isEnemy: boolean; isDefeated: boolean; hpPercentage: number; isCurrent: boolean; isLairAction: boolean; }[]; round: number; currentIndex: number; isLairActionPending: boolean; }, { entries: { id: string; name: string; initiative: number; isEnemy: boolean; isDefeated: boolean; hpPercentage: number; isCurrent: boolean; isLairAction?: boolean | undefined; }[]; round: number; currentIndex: number; isLairActionPending?: boolean | undefined; }>; export type TurnOrderDisplay = z.infer; /** * Grid cell for visualization */ export declare const GridCellSchema: z.ZodObject<{ x: z.ZodNumber; y: z.ZodNumber; symbol: z.ZodString; tokenId: z.ZodOptional; tokenLabel: z.ZodOptional; isObstacle: z.ZodDefault; isDifficultTerrain: z.ZodDefault; isInAoE: z.ZodDefault; isInPath: z.ZodDefault; isHighlighted: z.ZodDefault; highlightColor: z.ZodOptional; }, "strip", z.ZodTypeAny, { symbol: string; x: number; y: number; isDifficultTerrain: boolean; isObstacle: boolean; isInAoE: boolean; isInPath: boolean; isHighlighted: boolean; tokenId?: string | undefined; tokenLabel?: string | undefined; highlightColor?: string | undefined; }, { symbol: string; x: number; y: number; isDifficultTerrain?: boolean | undefined; tokenId?: string | undefined; tokenLabel?: string | undefined; isObstacle?: boolean | undefined; isInAoE?: boolean | undefined; isInPath?: boolean | undefined; isHighlighted?: boolean | undefined; highlightColor?: string | undefined; }>; export type GridCell = z.infer; /** * Complete grid state for ASCII rendering */ export declare const GridDisplaySchema: z.ZodObject<{ bounds: z.ZodObject<{ minX: z.ZodDefault; maxX: z.ZodDefault; minY: z.ZodDefault; maxY: z.ZodDefault; minZ: z.ZodOptional; maxZ: z.ZodOptional; }, "strip", z.ZodTypeAny, { minX: number; maxX: number; minY: number; maxY: number; minZ?: number | undefined; maxZ?: number | undefined; }, { minX?: number | undefined; maxX?: number | undefined; minY?: number | undefined; maxY?: number | undefined; minZ?: number | undefined; maxZ?: number | undefined; }>; width: z.ZodNumber; height: z.ZodNumber; cells: z.ZodArray; tokenLabel: z.ZodOptional; isObstacle: z.ZodDefault; isDifficultTerrain: z.ZodDefault; isInAoE: z.ZodDefault; isInPath: z.ZodDefault; isHighlighted: z.ZodDefault; highlightColor: z.ZodOptional; }, "strip", z.ZodTypeAny, { symbol: string; x: number; y: number; isDifficultTerrain: boolean; isObstacle: boolean; isInAoE: boolean; isInPath: boolean; isHighlighted: boolean; tokenId?: string | undefined; tokenLabel?: string | undefined; highlightColor?: string | undefined; }, { symbol: string; x: number; y: number; isDifficultTerrain?: boolean | undefined; tokenId?: string | undefined; tokenLabel?: string | undefined; isObstacle?: boolean | undefined; isInAoE?: boolean | undefined; isInPath?: boolean | undefined; isHighlighted?: boolean | undefined; highlightColor?: string | undefined; }>, "many">, "many">; viewport: z.ZodOptional>; }, "strip", z.ZodTypeAny, { width: number; height: number; bounds: { minX: number; maxX: number; minY: number; maxY: number; minZ?: number | undefined; maxZ?: number | undefined; }; cells: { symbol: string; x: number; y: number; isDifficultTerrain: boolean; isObstacle: boolean; isInAoE: boolean; isInPath: boolean; isHighlighted: boolean; tokenId?: string | undefined; tokenLabel?: string | undefined; highlightColor?: string | undefined; }[][]; viewport?: { minX: number; maxX: number; minY: number; maxY: number; } | undefined; }, { width: number; height: number; bounds: { minX?: number | undefined; maxX?: number | undefined; minY?: number | undefined; maxY?: number | undefined; minZ?: number | undefined; maxZ?: number | undefined; }; cells: { symbol: string; x: number; y: number; isDifficultTerrain?: boolean | undefined; tokenId?: string | undefined; tokenLabel?: string | undefined; isObstacle?: boolean | undefined; isInAoE?: boolean | undefined; isInPath?: boolean | undefined; isHighlighted?: boolean | undefined; highlightColor?: string | undefined; }[][]; viewport?: { minX: number; maxX: number; minY: number; maxY: number; } | undefined; }>; export type GridDisplay = z.infer; /** * Complete combat visualization state * This is the primary export for frontend consumption */ export declare const CombatVisualizationSchema: z.ZodObject<{ encounterId: z.ZodString; round: z.ZodNumber; status: z.ZodEnum<["active", "completed", "paused"]>; turnOrder: z.ZodObject<{ round: z.ZodNumber; currentIndex: z.ZodNumber; entries: z.ZodArray; hpPercentage: z.ZodNumber; }, "strip", z.ZodTypeAny, { id: string; name: string; initiative: number; isEnemy: boolean; isDefeated: boolean; hpPercentage: number; isCurrent: boolean; isLairAction: boolean; }, { id: string; name: string; initiative: number; isEnemy: boolean; isDefeated: boolean; hpPercentage: number; isCurrent: boolean; isLairAction?: boolean | undefined; }>, "many">; isLairActionPending: z.ZodDefault; }, "strip", z.ZodTypeAny, { entries: { id: string; name: string; initiative: number; isEnemy: boolean; isDefeated: boolean; hpPercentage: number; isCurrent: boolean; isLairAction: boolean; }[]; round: number; currentIndex: number; isLairActionPending: boolean; }, { entries: { id: string; name: string; initiative: number; isEnemy: boolean; isDefeated: boolean; hpPercentage: number; isCurrent: boolean; isLairAction?: boolean | undefined; }[]; round: number; currentIndex: number; isLairActionPending?: boolean | undefined; }>; gridBounds: z.ZodObject<{ minX: z.ZodDefault; maxX: z.ZodDefault; minY: z.ZodDefault; maxY: z.ZodDefault; minZ: z.ZodOptional; maxZ: z.ZodOptional; }, "strip", z.ZodTypeAny, { minX: number; maxX: number; minY: number; maxY: number; minZ?: number | undefined; maxZ?: number | undefined; }, { minX?: number | undefined; maxX?: number | undefined; minY?: number | undefined; maxY?: number | undefined; minZ?: number | undefined; maxZ?: number | undefined; }>; grid: z.ZodOptional; maxX: z.ZodDefault; minY: z.ZodDefault; maxY: z.ZodDefault; minZ: z.ZodOptional; maxZ: z.ZodOptional; }, "strip", z.ZodTypeAny, { minX: number; maxX: number; minY: number; maxY: number; minZ?: number | undefined; maxZ?: number | undefined; }, { minX?: number | undefined; maxX?: number | undefined; minY?: number | undefined; maxY?: number | undefined; minZ?: number | undefined; maxZ?: number | undefined; }>; width: z.ZodNumber; height: z.ZodNumber; cells: z.ZodArray; tokenLabel: z.ZodOptional; isObstacle: z.ZodDefault; isDifficultTerrain: z.ZodDefault; isInAoE: z.ZodDefault; isInPath: z.ZodDefault; isHighlighted: z.ZodDefault; highlightColor: z.ZodOptional; }, "strip", z.ZodTypeAny, { symbol: string; x: number; y: number; isDifficultTerrain: boolean; isObstacle: boolean; isInAoE: boolean; isInPath: boolean; isHighlighted: boolean; tokenId?: string | undefined; tokenLabel?: string | undefined; highlightColor?: string | undefined; }, { symbol: string; x: number; y: number; isDifficultTerrain?: boolean | undefined; tokenId?: string | undefined; tokenLabel?: string | undefined; isObstacle?: boolean | undefined; isInAoE?: boolean | undefined; isInPath?: boolean | undefined; isHighlighted?: boolean | undefined; highlightColor?: string | undefined; }>, "many">, "many">; viewport: z.ZodOptional>; }, "strip", z.ZodTypeAny, { width: number; height: number; bounds: { minX: number; maxX: number; minY: number; maxY: number; minZ?: number | undefined; maxZ?: number | undefined; }; cells: { symbol: string; x: number; y: number; isDifficultTerrain: boolean; isObstacle: boolean; isInAoE: boolean; isInPath: boolean; isHighlighted: boolean; tokenId?: string | undefined; tokenLabel?: string | undefined; highlightColor?: string | undefined; }[][]; viewport?: { minX: number; maxX: number; minY: number; maxY: number; } | undefined; }, { width: number; height: number; bounds: { minX?: number | undefined; maxX?: number | undefined; minY?: number | undefined; maxY?: number | undefined; minZ?: number | undefined; maxZ?: number | undefined; }; cells: { symbol: string; x: number; y: number; isDifficultTerrain?: boolean | undefined; tokenId?: string | undefined; tokenLabel?: string | undefined; isObstacle?: boolean | undefined; isInAoE?: boolean | undefined; isInPath?: boolean | undefined; isHighlighted?: boolean | undefined; highlightColor?: string | undefined; }[][]; viewport?: { minX: number; maxX: number; minY: number; maxY: number; } | undefined; }>>; tokens: z.ZodArray; }, "strip", z.ZodTypeAny, { x: number; y: number; z?: number | undefined; }, { x: number; y: number; z?: number | undefined; }>>; size: z.ZodEnum<["tiny", "small", "medium", "large", "huge", "gargantuan"]>; footprint: z.ZodNumber; isEnemy: z.ZodBoolean; isCurrentTurn: z.ZodBoolean; isDefeated: z.ZodBoolean; hp: z.ZodNumber; maxHp: z.ZodNumber; hpPercentage: z.ZodNumber; hpStatus: z.ZodEnum<["healthy", "wounded", "bloodied", "critical", "defeated"]>; initiative: z.ZodNumber; conditions: z.ZodArray; ac: z.ZodOptional; movementSpeed: z.ZodOptional; movementRemaining: z.ZodOptional; hasDashed: z.ZodOptional; }, "strip", z.ZodTypeAny, { id: string; name: string; conditions: string[]; hp: number; maxHp: number; size: "medium" | "tiny" | "small" | "large" | "huge" | "gargantuan"; initiative: number; isEnemy: boolean; label: string; footprint: number; isCurrentTurn: boolean; isDefeated: boolean; hpPercentage: number; hpStatus: "critical" | "wounded" | "healthy" | "defeated" | "bloodied"; position?: { x: number; y: number; z?: number | undefined; } | undefined; ac?: number | undefined; movementSpeed?: number | undefined; movementRemaining?: number | undefined; hasDashed?: boolean | undefined; }, { id: string; name: string; conditions: string[]; hp: number; maxHp: number; size: "medium" | "tiny" | "small" | "large" | "huge" | "gargantuan"; initiative: number; isEnemy: boolean; label: string; footprint: number; isCurrentTurn: boolean; isDefeated: boolean; hpPercentage: number; hpStatus: "critical" | "wounded" | "healthy" | "defeated" | "bloodied"; position?: { x: number; y: number; z?: number | undefined; } | undefined; ac?: number | undefined; movementSpeed?: number | undefined; movementRemaining?: number | undefined; hasDashed?: boolean | undefined; }>, "many">; terrain: z.ZodOptional; symbol: z.ZodString; }, "strip", z.ZodTypeAny, { symbol: string; type: "water" | "obstacle" | "difficult" | "pit" | "lava" | "cover_half" | "cover_three_quarter"; x: number; y: number; }, { symbol: string; type: "water" | "obstacle" | "difficult" | "pit" | "lava" | "cover_half" | "cover_three_quarter"; x: number; y: number; }>, "many">; difficultTerrain: z.ZodDefault; symbol: z.ZodString; }, "strip", z.ZodTypeAny, { symbol: string; type: "water" | "obstacle" | "difficult" | "pit" | "lava" | "cover_half" | "cover_three_quarter"; x: number; y: number; }, { symbol: string; type: "water" | "obstacle" | "difficult" | "pit" | "lava" | "cover_half" | "cover_three_quarter"; x: number; y: number; }>, "many">>; }, "strip", z.ZodTypeAny, { obstacles: { symbol: string; type: "water" | "obstacle" | "difficult" | "pit" | "lava" | "cover_half" | "cover_three_quarter"; x: number; y: number; }[]; difficultTerrain: { symbol: string; type: "water" | "obstacle" | "difficult" | "pit" | "lava" | "cover_half" | "cover_three_quarter"; x: number; y: number; }[]; }, { obstacles: { symbol: string; type: "water" | "obstacle" | "difficult" | "pit" | "lava" | "cover_half" | "cover_three_quarter"; x: number; y: number; }[]; difficultTerrain?: { symbol: string; type: "water" | "obstacle" | "difficult" | "pit" | "lava" | "cover_half" | "cover_three_quarter"; x: number; y: number; }[] | undefined; }>>; activeAoEs: z.ZodDefault; origin: z.ZodObject<{ x: z.ZodNumber; y: z.ZodNumber; z: z.ZodOptional; }, "strip", z.ZodTypeAny, { x: number; y: number; z?: number | undefined; }, { x: number; y: number; z?: number | undefined; }>; radiusFeet: z.ZodOptional; lengthFeet: z.ZodOptional; widthFeet: z.ZodOptional; angleDegrees: z.ZodOptional; direction: z.ZodOptional>; affectedTiles: z.ZodArray; }, "strip", z.ZodTypeAny, { x: number; y: number; z?: number | undefined; }, { x: number; y: number; z?: number | undefined; }>, "many">; blockedTiles: z.ZodOptional; }, "strip", z.ZodTypeAny, { x: number; y: number; z?: number | undefined; }, { x: number; y: number; z?: number | undefined; }>, "many">>; affectedParticipantIds: z.ZodArray; color: z.ZodOptional; symbol: z.ZodDefault; name: z.ZodOptional; }, "strip", z.ZodTypeAny, { symbol: string; id: string; shape: "cone" | "cube" | "cylinder" | "line" | "sphere" | "circle"; origin: { x: number; y: number; z?: number | undefined; }; affectedTiles: { x: number; y: number; z?: number | undefined; }[]; affectedParticipantIds: string[]; name?: string | undefined; direction?: { x: number; y: number; } | undefined; color?: string | undefined; radiusFeet?: number | undefined; lengthFeet?: number | undefined; widthFeet?: number | undefined; angleDegrees?: number | undefined; blockedTiles?: { x: number; y: number; z?: number | undefined; }[] | undefined; }, { id: string; shape: "cone" | "cube" | "cylinder" | "line" | "sphere" | "circle"; origin: { x: number; y: number; z?: number | undefined; }; affectedTiles: { x: number; y: number; z?: number | undefined; }[]; affectedParticipantIds: string[]; symbol?: string | undefined; name?: string | undefined; direction?: { x: number; y: number; } | undefined; color?: string | undefined; radiusFeet?: number | undefined; lengthFeet?: number | undefined; widthFeet?: number | undefined; angleDegrees?: number | undefined; blockedTiles?: { x: number; y: number; z?: number | undefined; }[] | undefined; }>, "many">>; activeMovementPath: z.ZodOptional; }, "strip", z.ZodTypeAny, { x: number; y: number; z?: number | undefined; }, { x: number; y: number; z?: number | undefined; }>, "many">; segments: z.ZodArray; }, "strip", z.ZodTypeAny, { x: number; y: number; z?: number | undefined; }, { x: number; y: number; z?: number | undefined; }>; to: z.ZodObject<{ x: z.ZodNumber; y: z.ZodNumber; z: z.ZodOptional; }, "strip", z.ZodTypeAny, { x: number; y: number; z?: number | undefined; }, { x: number; y: number; z?: number | undefined; }>; cost: z.ZodNumber; isDiagonal: z.ZodBoolean; isDifficultTerrain: z.ZodBoolean; }, "strip", z.ZodTypeAny, { from: { x: number; y: number; z?: number | undefined; }; to: { x: number; y: number; z?: number | undefined; }; cost: number; isDiagonal: boolean; isDifficultTerrain: boolean; }, { from: { x: number; y: number; z?: number | undefined; }; to: { x: number; y: number; z?: number | undefined; }; cost: number; isDiagonal: boolean; isDifficultTerrain: boolean; }>, "many">; totalCost: z.ZodNumber; remainingMovement: z.ZodNumber; triggersOpportunityAttacks: z.ZodDefault>; isValid: z.ZodBoolean; }, "strip", z.ZodTypeAny, { path: { x: number; y: number; z?: number | undefined; }[]; participantId: string; segments: { from: { x: number; y: number; z?: number | undefined; }; to: { x: number; y: number; z?: number | undefined; }; cost: number; isDiagonal: boolean; isDifficultTerrain: boolean; }[]; totalCost: number; remainingMovement: number; triggersOpportunityAttacks: string[]; isValid: boolean; }, { path: { x: number; y: number; z?: number | undefined; }[]; participantId: string; segments: { from: { x: number; y: number; z?: number | undefined; }; to: { x: number; y: number; z?: number | undefined; }; cost: number; isDiagonal: boolean; isDifficultTerrain: boolean; }[]; totalCost: number; remainingMovement: number; isValid: boolean; triggersOpportunityAttacks?: string[] | undefined; }>>; recentLog: z.ZodDefault; actorId: z.ZodOptional; actorName: z.ZodOptional; targetId: z.ZodOptional; targetName: z.ZodOptional; action: z.ZodString; details: z.ZodOptional>; diceRoll: z.ZodOptional; damage: z.ZodOptional; healing: z.ZodOptional; success: z.ZodOptional; }, "strip", z.ZodTypeAny, { type: "damage" | "healing" | "attack" | "opportunity_attack" | "death" | "spell_cast" | "lair_action" | "saving_throw" | "condition_applied" | "movement" | "round_start" | "turn_start" | "turn_end" | "condition_removed"; id: string; action: string; timestamp: string; round: number; success?: boolean | undefined; actorId?: string | undefined; targetId?: string | undefined; details?: Record | undefined; damage?: number | undefined; healing?: number | undefined; actorName?: string | undefined; targetName?: string | undefined; diceRoll?: string | undefined; }, { type: "damage" | "healing" | "attack" | "opportunity_attack" | "death" | "spell_cast" | "lair_action" | "saving_throw" | "condition_applied" | "movement" | "round_start" | "turn_start" | "turn_end" | "condition_removed"; id: string; action: string; timestamp: string; round: number; success?: boolean | undefined; actorId?: string | undefined; targetId?: string | undefined; details?: Record | undefined; damage?: number | undefined; healing?: number | undefined; actorName?: string | undefined; targetName?: string | undefined; diceRoll?: string | undefined; }>, "many">>; currentActorId: z.ZodOptional; validTargets: z.ZodDefault; }, "strip", z.ZodTypeAny, { id: string; name: string; isEnemy: boolean; distance?: number | undefined; }, { id: string; name: string; isEnemy: boolean; distance?: number | undefined; }>, "many">>; }, "strip", z.ZodTypeAny, { status: "active" | "completed" | "paused"; encounterId: string; tokens: { id: string; name: string; conditions: string[]; hp: number; maxHp: number; size: "medium" | "tiny" | "small" | "large" | "huge" | "gargantuan"; initiative: number; isEnemy: boolean; label: string; footprint: number; isCurrentTurn: boolean; isDefeated: boolean; hpPercentage: number; hpStatus: "critical" | "wounded" | "healthy" | "defeated" | "bloodied"; position?: { x: number; y: number; z?: number | undefined; } | undefined; ac?: number | undefined; movementSpeed?: number | undefined; movementRemaining?: number | undefined; hasDashed?: boolean | undefined; }[]; round: number; gridBounds: { minX: number; maxX: number; minY: number; maxY: number; minZ?: number | undefined; maxZ?: number | undefined; }; turnOrder: { entries: { id: string; name: string; initiative: number; isEnemy: boolean; isDefeated: boolean; hpPercentage: number; isCurrent: boolean; isLairAction: boolean; }[]; round: number; currentIndex: number; isLairActionPending: boolean; }; activeAoEs: { symbol: string; id: string; shape: "cone" | "cube" | "cylinder" | "line" | "sphere" | "circle"; origin: { x: number; y: number; z?: number | undefined; }; affectedTiles: { x: number; y: number; z?: number | undefined; }[]; affectedParticipantIds: string[]; name?: string | undefined; direction?: { x: number; y: number; } | undefined; color?: string | undefined; radiusFeet?: number | undefined; lengthFeet?: number | undefined; widthFeet?: number | undefined; angleDegrees?: number | undefined; blockedTiles?: { x: number; y: number; z?: number | undefined; }[] | undefined; }[]; recentLog: { type: "damage" | "healing" | "attack" | "opportunity_attack" | "death" | "spell_cast" | "lair_action" | "saving_throw" | "condition_applied" | "movement" | "round_start" | "turn_start" | "turn_end" | "condition_removed"; id: string; action: string; timestamp: string; round: number; success?: boolean | undefined; actorId?: string | undefined; targetId?: string | undefined; details?: Record | undefined; damage?: number | undefined; healing?: number | undefined; actorName?: string | undefined; targetName?: string | undefined; diceRoll?: string | undefined; }[]; validTargets: { id: string; name: string; isEnemy: boolean; distance?: number | undefined; }[]; terrain?: { obstacles: { symbol: string; type: "water" | "obstacle" | "difficult" | "pit" | "lava" | "cover_half" | "cover_three_quarter"; x: number; y: number; }[]; difficultTerrain: { symbol: string; type: "water" | "obstacle" | "difficult" | "pit" | "lava" | "cover_half" | "cover_three_quarter"; x: number; y: number; }[]; } | undefined; grid?: { width: number; height: number; bounds: { minX: number; maxX: number; minY: number; maxY: number; minZ?: number | undefined; maxZ?: number | undefined; }; cells: { symbol: string; x: number; y: number; isDifficultTerrain: boolean; isObstacle: boolean; isInAoE: boolean; isInPath: boolean; isHighlighted: boolean; tokenId?: string | undefined; tokenLabel?: string | undefined; highlightColor?: string | undefined; }[][]; viewport?: { minX: number; maxX: number; minY: number; maxY: number; } | undefined; } | undefined; activeMovementPath?: { path: { x: number; y: number; z?: number | undefined; }[]; participantId: string; segments: { from: { x: number; y: number; z?: number | undefined; }; to: { x: number; y: number; z?: number | undefined; }; cost: number; isDiagonal: boolean; isDifficultTerrain: boolean; }[]; totalCost: number; remainingMovement: number; triggersOpportunityAttacks: string[]; isValid: boolean; } | undefined; currentActorId?: string | undefined; }, { status: "active" | "completed" | "paused"; encounterId: string; tokens: { id: string; name: string; conditions: string[]; hp: number; maxHp: number; size: "medium" | "tiny" | "small" | "large" | "huge" | "gargantuan"; initiative: number; isEnemy: boolean; label: string; footprint: number; isCurrentTurn: boolean; isDefeated: boolean; hpPercentage: number; hpStatus: "critical" | "wounded" | "healthy" | "defeated" | "bloodied"; position?: { x: number; y: number; z?: number | undefined; } | undefined; ac?: number | undefined; movementSpeed?: number | undefined; movementRemaining?: number | undefined; hasDashed?: boolean | undefined; }[]; round: number; gridBounds: { minX?: number | undefined; maxX?: number | undefined; minY?: number | undefined; maxY?: number | undefined; minZ?: number | undefined; maxZ?: number | undefined; }; turnOrder: { entries: { id: string; name: string; initiative: number; isEnemy: boolean; isDefeated: boolean; hpPercentage: number; isCurrent: boolean; isLairAction?: boolean | undefined; }[]; round: number; currentIndex: number; isLairActionPending?: boolean | undefined; }; terrain?: { obstacles: { symbol: string; type: "water" | "obstacle" | "difficult" | "pit" | "lava" | "cover_half" | "cover_three_quarter"; x: number; y: number; }[]; difficultTerrain?: { symbol: string; type: "water" | "obstacle" | "difficult" | "pit" | "lava" | "cover_half" | "cover_three_quarter"; x: number; y: number; }[] | undefined; } | undefined; grid?: { width: number; height: number; bounds: { minX?: number | undefined; maxX?: number | undefined; minY?: number | undefined; maxY?: number | undefined; minZ?: number | undefined; maxZ?: number | undefined; }; cells: { symbol: string; x: number; y: number; isDifficultTerrain?: boolean | undefined; tokenId?: string | undefined; tokenLabel?: string | undefined; isObstacle?: boolean | undefined; isInAoE?: boolean | undefined; isInPath?: boolean | undefined; isHighlighted?: boolean | undefined; highlightColor?: string | undefined; }[][]; viewport?: { minX: number; maxX: number; minY: number; maxY: number; } | undefined; } | undefined; activeAoEs?: { id: string; shape: "cone" | "cube" | "cylinder" | "line" | "sphere" | "circle"; origin: { x: number; y: number; z?: number | undefined; }; affectedTiles: { x: number; y: number; z?: number | undefined; }[]; affectedParticipantIds: string[]; symbol?: string | undefined; name?: string | undefined; direction?: { x: number; y: number; } | undefined; color?: string | undefined; radiusFeet?: number | undefined; lengthFeet?: number | undefined; widthFeet?: number | undefined; angleDegrees?: number | undefined; blockedTiles?: { x: number; y: number; z?: number | undefined; }[] | undefined; }[] | undefined; activeMovementPath?: { path: { x: number; y: number; z?: number | undefined; }[]; participantId: string; segments: { from: { x: number; y: number; z?: number | undefined; }; to: { x: number; y: number; z?: number | undefined; }; cost: number; isDiagonal: boolean; isDifficultTerrain: boolean; }[]; totalCost: number; remainingMovement: number; isValid: boolean; triggersOpportunityAttacks?: string[] | undefined; } | undefined; recentLog?: { type: "damage" | "healing" | "attack" | "opportunity_attack" | "death" | "spell_cast" | "lair_action" | "saving_throw" | "condition_applied" | "movement" | "round_start" | "turn_start" | "turn_end" | "condition_removed"; id: string; action: string; timestamp: string; round: number; success?: boolean | undefined; actorId?: string | undefined; targetId?: string | undefined; details?: Record | undefined; damage?: number | undefined; healing?: number | undefined; actorName?: string | undefined; targetName?: string | undefined; diceRoll?: string | undefined; }[] | undefined; currentActorId?: string | undefined; validTargets?: { id: string; name: string; isEnemy: boolean; distance?: number | undefined; }[] | undefined; }>; export type CombatVisualization = z.infer; /** * Determine HP status from percentage */ export declare function getHpStatus(hp: number, maxHp: number): TokenDisplay['hpStatus']; /** * Generate short label for token * Examples: "G1" for Goblin 1, "He" for Hero, "Dr" for Dragon */ export declare function generateTokenLabel(name: string, _index: number): string; /** * Get ASCII symbol for terrain type */ export declare function getTerrainSymbol(type: TerrainTile['type']): string; /** * Get ASCII symbol for token based on type */ export declare function getTokenSymbol(isEnemy: boolean, isDefeated: boolean): string; //# sourceMappingURL=combat-visualization.d.ts.map