dungeon-sdk-drikkx
Version:
Shared types and entities for the Dungeon game
107 lines (93 loc) • 2.5 kB
text/typescript
import { CharacterInDungeon, ResourcesType } from './character.types';
import { Stats } from './stats.types';
export type ActionType = 'attack' | 'combo' | 'special' | 'item';
export interface CombatContext {
turnNumber: number;
roomIndex: number;
waveIndex: number;
dungeonId: string;
}
export interface Action {
type: ActionType;
actor: string; // ID de l'entité qui effectue l'action
targets: string[]; // IDs des cibles
value: number; // Dégâts/Soins/etc
effects?: StatusEffect[];
}
export interface StatusEffect {
type: 'buff' | 'debuff' | 'dot' | 'hot';
stat: keyof Stats;
value: number;
duration: number;
source: string; // ID de la source de l'effet
}
export interface TurnInfo {
round: number;
activeEntity: string;
availableActions: ActionType[];
timeline: string[]; // Ordre des tours
}
export interface TargetingCriteria {
healthThreshold?: number;
preferredTargets?: string[];
excludedTargets?: string[];
targetCount: number;
targetCondition?: (target: CharacterInDungeon) => boolean;
}
export interface ActionConditions {
resourceCost?: number;
resourceType?: ResourcesType;
cooldown?: boolean;
customCondition?: (character: CharacterInDungeon) => boolean;
}
export interface ActionStrategy {
type: CombatActionType;
conditions: ActionConditions;
targeting: TargetingCriteria;
priority: number;
}
export enum CombatActionType {
ATTACK = 'attack',
HEAL = 'heal',
ITEM = 'item',
COMBO = 'combo',
SPECIAL = 'special',
DEATH = 'death',
WAVE_COMPLETE = 'wave_complete',
ROOM_COMPLETE = 'room_complete',
DUNGEON_COMPLETE = 'dungeon_complete',
DUNGEON_FAILED = 'dungeon_failed'
}
export interface CombatResources {
health: number;
maxHealth: number;
mana: number;
maxMana: number;
}
export interface CombatRewards {
experience?: number;
gold?: number;
items?: string[];
}
export interface CombatAction {
type: CombatActionType;
sourceId: string;
targetId?: string;
damage?: number;
isCritical?: boolean;
timestamp?: Date;
resources?: CombatResources;
effects?: string[];
rewards?: CombatRewards;
turnNumber: number;
roomNumber: number;
waveNumber: number;
dungeonId: string;
}
export interface CombatTurn {
turnNumber: number;
roomNumber: number;
waveNumber: number;
actions: CombatAction[];
timestamp: Date;
}