import { ResourcesType } from "./character.types";
export interface Stats {
    strength: number;
    agility: number;
    intelligence: number;
    vitality: number;
    spirit: number;
}
export interface DefenseStats {
    maxHealth: number;
    currentHealth: number;
    healthRegen: number;
    physicalReduction: number;
    magicResistance: number;
    statusResistance: number;
}
export interface ResourceStats {
    type: ResourcesType;
    maxResource: number;
    currentResource: number;
    resourceRegen: number;
    gainOnDamageTaken?: number;
    gainOnDamageDealt?: number;
    decayRate?: number;
}
export declare enum DamageType {
    PHYSICAL_MELEE = "physical_melee",
    PHYSICAL_RANGED = "physical_ranged",
    MAGICAL = "magical",
    HEALING = "healing"
}
export interface PhysicalCombatStats {
    accuracy: number;
    dodge: number;
    meleeAttackPower: number;
    rangedAttackPower: number;
    physicalCritChance: number;
    critMultiplier: number;
}
export interface MagicalCombatStats {
    magicPower: number;
    magicCritChance: number;
    magicCritMultiplier: number;
}
export interface HealingStats {
    healingPower: number;
    healingReceived: number;
}
export interface CombatStats extends PhysicalCombatStats, MagicalCombatStats, HealingStats {
}
export interface ExtendedStats extends Stats, DefenseStats, ResourceStats, CombatStats {
}
export interface ClassStatModifiers {
    baseStats: Partial<Stats>;
    defenseMultiplier: number;
    resourceMultiplier: number;
    combatMultipliers: {
        physical?: number;
        magical?: number;
        healing?: number;
    };
}
export interface StatCalculator {
    calculateDefenseStats(base: Stats, modifiers: ClassStatModifiers): DefenseStats;
    calculateResourceStats(base: Stats, modifiers: ClassStatModifiers, type: ResourcesType): ResourceStats;
    calculateCombatStats(base: Stats, modifiers: ClassStatModifiers): CombatStats;
    calculateDamage(attacker: ExtendedStats, defender: ExtendedStats, damageType: DamageType, multiplier: number): number;
    calculateHealing(healer: ExtendedStats, target: ExtendedStats, multiplier: number): number;
}
//# sourceMappingURL=stats.types.d.ts.map