| @@ -165,6 +165,24 @@ export interface DamageFormula { | |||||
| explain (user: Creature): LogEntry; | explain (user: Creature): LogEntry; | ||||
| } | } | ||||
| export class CompositeDamageFormula implements DamageFormula { | |||||
| constructor (private formulas: DamageFormula[]) { | |||||
| } | |||||
| calc (user: Creature, target: Creature): Damage { | |||||
| return this.formulas.reduce((total: Damage, next: DamageFormula) => total.combine(next.calc(user, target)), new Damage()) | |||||
| } | |||||
| describe (user: Creature, target: Creature): LogEntry { | |||||
| return new LogLines(...this.formulas.map(formula => formula.describe(user, target))) | |||||
| } | |||||
| explain (user: Creature): LogEntry { | |||||
| return new LogLines(...this.formulas.map(formula => formula.explain(user))) | |||||
| } | |||||
| } | |||||
| /** | /** | ||||
| * Simply returns the damage it was given. | * Simply returns the damage it was given. | ||||
| */ | */ | ||||