/** * Health Plugin for ECSpresso * * Provides a standard health/damage/death lifecycle. * Entities with a `health` component can receive `damage` events. * When health reaches zero, an `entityDied` event is published. * The plugin does NOT remove dead entities — game-specific logic * decides when and how to handle death (animations, loot, etc). */ import { type BasePluginOptions } from 'ecspresso'; import type { ComponentsConfig, EventsConfig } from 'ecspresso'; /** * Health state for an entity. */ export interface Health { current: number; max: number; } /** * Component types provided by the health plugin. */ export interface HealthComponentTypes { health: Health; } /** * Event requesting damage to an entity. */ export interface DamageEvent { entityId: number; amount: number; sourceId?: number; } /** * Event fired when an entity's health reaches zero. */ export interface EntityDiedEvent { entityId: number; killerId?: number; } /** * Event types provided by the health plugin. */ export interface HealthEventTypes { damage: DamageEvent; entityDied: EntityDiedEvent; } /** * WorldConfig representing the health plugin's provided types. * Used as the `Requires` type parameter by plugins that depend on health. */ export type HealthWorldConfig = ComponentsConfig & EventsConfig; export interface HealthPluginOptions extends BasePluginOptions { } /** * Create a health component at full HP. * * @param max Maximum (and initial) health * @returns Component object suitable for spreading into spawn() * * @example * ```typescript * ecs.spawn({ * ...createHealth(100), * ...createLocalTransform(200, 300), * }); * ``` */ export declare function createHealth(max: number): Pick; /** * Create a health component with a specific current value. * * @param current Current health * @param max Maximum health * @returns Component object suitable for spreading into spawn() */ export declare function createHealthWith(current: number, max: number): Pick; /** * Create a health plugin for ECSpresso. * * Provides event-driven damage processing. Subscribe to `damage` events * to deal damage, and listen to `entityDied` events to react to deaths. * * @example * ```typescript * const ecs = ECSpresso.create() * .withPlugin(createHealthPlugin()) * .build(); * * // Deal damage: * ecs.eventBus.publish('damage', { entityId: targetId, amount: 25 }); * * // React to death: * ecs.on('entityDied', ({ entityId }) => { * ecs.commands.removeEntity(entityId); * }); * ``` */ export declare function createHealthPlugin(options?: HealthPluginOptions): import("ecspresso").Plugin, HealthEventTypes>, import("ecspresso").EmptyConfig, "health-damage", G, never, never>;