import type { ConditionId } from "./conditions.js"; import type { PlayerCharacterId } from "./player-character-types.js"; import type { CombatantId } from "./types.js"; export interface TurnAdvanced { readonly type: "TurnAdvanced"; readonly previousCombatantId: CombatantId; readonly newCombatantId: CombatantId; readonly roundNumber: number; } export interface RoundAdvanced { readonly type: "RoundAdvanced"; readonly newRoundNumber: number; } export interface CombatantAdded { readonly type: "CombatantAdded"; readonly combatantId: CombatantId; readonly name: string; readonly position: number; } export interface CombatantRemoved { readonly type: "CombatantRemoved"; readonly combatantId: CombatantId; readonly name: string; } export interface CombatantUpdated { readonly type: "CombatantUpdated"; readonly combatantId: CombatantId; readonly oldName: string; readonly newName: string; } export interface InitiativeSet { readonly type: "InitiativeSet"; readonly combatantId: CombatantId; readonly previousValue: number | undefined; readonly newValue: number | undefined; } export interface MaxHpSet { readonly type: "MaxHpSet"; readonly combatantId: CombatantId; readonly previousMaxHp: number | undefined; readonly newMaxHp: number | undefined; readonly previousCurrentHp: number | undefined; readonly newCurrentHp: number | undefined; } export interface CurrentHpAdjusted { readonly type: "CurrentHpAdjusted"; readonly combatantId: CombatantId; readonly previousHp: number; readonly newHp: number; readonly delta: number; } export interface TurnRetreated { readonly type: "TurnRetreated"; readonly previousCombatantId: CombatantId; readonly newCombatantId: CombatantId; readonly roundNumber: number; } export interface RoundRetreated { readonly type: "RoundRetreated"; readonly newRoundNumber: number; } export interface AcSet { readonly type: "AcSet"; readonly combatantId: CombatantId; readonly previousAc: number | undefined; readonly newAc: number | undefined; } export interface ConditionAdded { readonly type: "ConditionAdded"; readonly combatantId: CombatantId; readonly condition: ConditionId; } export interface ConditionRemoved { readonly type: "ConditionRemoved"; readonly combatantId: CombatantId; readonly condition: ConditionId; } export interface ConcentrationStarted { readonly type: "ConcentrationStarted"; readonly combatantId: CombatantId; } export interface ConcentrationEnded { readonly type: "ConcentrationEnded"; readonly combatantId: CombatantId; } export interface EncounterCleared { readonly type: "EncounterCleared"; readonly combatantCount: number; } export interface PlayerCharacterCreated { readonly type: "PlayerCharacterCreated"; readonly playerCharacterId: PlayerCharacterId; readonly name: string; } export interface PlayerCharacterUpdated { readonly type: "PlayerCharacterUpdated"; readonly playerCharacterId: PlayerCharacterId; readonly oldName: string; readonly newName: string; } export interface PlayerCharacterDeleted { readonly type: "PlayerCharacterDeleted"; readonly playerCharacterId: PlayerCharacterId; readonly name: string; } export type DomainEvent = | TurnAdvanced | RoundAdvanced | CombatantAdded | CombatantRemoved | CombatantUpdated | InitiativeSet | MaxHpSet | CurrentHpAdjusted | TurnRetreated | RoundRetreated | AcSet | ConditionAdded | ConditionRemoved | ConcentrationStarted | ConcentrationEnded | EncounterCleared | PlayerCharacterCreated | PlayerCharacterUpdated | PlayerCharacterDeleted;