|
|
|
@@ -39,16 +39,37 @@ export abstract class Vore implements Mortal { |
|
|
|
[[POV.First], (target: Vore) => new LogLine('You die!')], |
|
|
|
[[POV.Third], (target: Vore) => new LogLine(`${target.name.capital} dies!`)] |
|
|
|
]) |
|
|
|
this.containers.map(container => { |
|
|
|
container.contents.map(prey => { |
|
|
|
|
|
|
|
const released: Array<Vore> = this.containers.flatMap(container => { |
|
|
|
return container.contents.map(prey => { |
|
|
|
prey.containedIn = this.containedIn |
|
|
|
if (this.containedIn !== null) { |
|
|
|
this.containedIn.contents.push(prey) |
|
|
|
} |
|
|
|
return prey |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
return lines.run(this) |
|
|
|
console.log(released) |
|
|
|
console.log(released.reduce((list: Array<string>, prey: Vore) => list.concat([prey.name.toString()]), [])) |
|
|
|
|
|
|
|
const names = released.reduce((list: Array<string>, prey: Vore) => list.concat([prey.name.toString()]), []).joinGeneral(", ", " and ").join("") |
|
|
|
|
|
|
|
if (released.length > 0) { |
|
|
|
if (this.containedIn === null) { |
|
|
|
return new LogLines( |
|
|
|
lines.run(this), |
|
|
|
new LogLine(names + ` spill out!`) |
|
|
|
) |
|
|
|
} else { |
|
|
|
return new LogLines( |
|
|
|
lines.run(this), |
|
|
|
new LogLine(names + ` spill out into ${this.containedIn.owner.name}'s ${this.containedIn.name}!`) |
|
|
|
) |
|
|
|
} |
|
|
|
} else { |
|
|
|
return lines.run(this) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@@ -98,6 +119,9 @@ export abstract class NormalContainer implements Container { |
|
|
|
} |
|
|
|
|
|
|
|
consume (prey: Vore): LogEntry { |
|
|
|
if (prey.containedIn !== null) { |
|
|
|
prey.containedIn.contents = prey.containedIn.contents.filter(item => prey !== item) |
|
|
|
} |
|
|
|
this.contents.push(prey) |
|
|
|
prey.containedIn = this |
|
|
|
return this.consumeLines.run(this.owner, prey) |
|
|
|
@@ -161,6 +185,9 @@ export abstract class NormalVoreContainer extends NormalContainer implements Vor |
|
|
|
const scaled = this.damage.scale(dt / 60) |
|
|
|
|
|
|
|
const damageResults: Array<LogEntry> = [] |
|
|
|
|
|
|
|
const tickedEntries = new LogLines(...this.contents.map(prey => this.tickLines.run(this.owner, prey, { damage: scaled }))) |
|
|
|
|
|
|
|
this.contents.forEach(prey => { |
|
|
|
damageResults.push(prey.takeDamage(scaled)) |
|
|
|
|
|
|
|
@@ -171,7 +198,6 @@ export abstract class NormalVoreContainer extends NormalContainer implements Vor |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
const tickedEntries = new LogLines(...this.contents.map(prey => this.tickLines.run(this.owner, prey, { damage: scaled }))) |
|
|
|
const digestedEntries = this.digest(justDigested) |
|
|
|
|
|
|
|
this.contents = this.contents.filter(prey => { |
|
|
|
|