@@ -1,7 +1,7 @@
import { Entity, Mortal, POV, Creature } from './entity'
import { Entity, Mortal, POV, Creature } from './entity'
import { Damage, Actionable, Action, DevourAction, FeedAction, DigestAction, ReleaseAction, StruggleAction, Vigor } from './combat'
import { Damage, DamageType, Stats, Actionable, Action, DevourAction, FeedAction, DigestAction, ReleaseAction, StruggleAction, Vigor } from './combat'
import { LogLines, LogEntry, CompositeLog, LogLine } from './interface'
import { LogLines, LogEntry, CompositeLog, LogLine } from './interface'
import { Noun, POVPair, POVPairArgs, ImproperNoun } from './language'
import { Noun, Pronoun, P OVPair, POVPairArgs, ImproperNoun } from './language'
export enum VoreType {
export enum VoreType {
Oral = "Oral Vore",
Oral = "Oral Vore",
@@ -10,12 +10,32 @@ export enum VoreType {
Unbirth = "Unbirthing"
Unbirth = "Unbirthing"
}
}
export interface Vore extends Mortal {
preyPrefs: Set<VoreType>;
bulk: number;
containedIn: Container | null;
predPrefs: Set<VoreType>;
containers: Array<Container>;
export abstract class Vore implements Mortal {
abstract name: Noun;
abstract pronouns: Pronoun;
abstract perspective: POV;
abstract vigors: {[key in Vigor]: number};
abstract maxVigors: {[key in Vigor]: number};
abstract disabled: boolean;
abstract resistances: Map<DamageType, number>;
abstract takeDamage (damage: Damage): void;
abstract stats: Stats;
abstract status: string;
abstract preyPrefs: Set<VoreType>;
abstract bulk: number;
abstract containedIn: Container | null;
abstract predPrefs: Set<VoreType>;
abstract containers: Array<Container>;
destroy (): void {
this.containers.map(container => {
container.contents.map(prey => {
prey.containedIn = this.containedIn
if (this.containedIn !== null) {
this.containedIn.contents.push(prey)
}
})
})
}
}
}
export interface Container extends Actionable {
export interface Container extends Actionable {