import { Condition, Vigor } from "../combat" import { Creature } from "../creature" import { Container } from '../vore' export class InverseCondition implements Condition { constructor (private condition: Condition) { } allowed (user: Creature, target: Creature): boolean { return !this.condition.allowed(user, target) } } export class CapableCondition implements Condition { allowed (user: Creature, target: Creature): boolean { return !user.disabled } } export class UserDrainedVigorCondition implements Condition { constructor (private vigor: Vigor) { } allowed (user: Creature, target: Creature): boolean { return user.vigors[this.vigor] <= 0 } } export class TargetDrainedVigorCondition implements Condition { constructor (private vigor: Vigor) { } allowed (user: Creature, target: Creature): boolean { return target.vigors[this.vigor] <= 0 } } export class SoloCondition implements Condition { allowed (user: Creature, target: Creature): boolean { return user === target } } export class PairCondition implements Condition { allowed (user: Creature, target: Creature): boolean { return user !== target } } export class TogetherCondition implements Condition { allowed (user: Creature, target: Creature): boolean { return user.containedIn === target.containedIn && user !== target } } export class ContainedByCondition implements Condition { constructor (private container: Container) { } allowed (user: Creature, target: Creature): boolean { return user.containedIn === this.container && this.container.owner === target } } export class ContainsCondition implements Condition { constructor (private container: Container) { } allowed (user: Creature, target: Creature): boolean { return target.containedIn === this.container } } export class AllyCondition implements Condition { allowed (user: Creature, target: Creature): boolean { return user.side === target.side } } export class EnemyCondition implements Condition { allowed (user: Creature, target: Creature): boolean { return user.side !== target.side } } export class ContainerFullCondition implements Condition { constructor (private container: Container) { } allowed (user: Creature, target: Creature): boolean { return this.container.contents.length > 0 } }