| @@ -39,16 +39,37 @@ export abstract class Vore implements Mortal { | |||||
| [[POV.First], (target: Vore) => new LogLine('You die!')], | [[POV.First], (target: Vore) => new LogLine('You die!')], | ||||
| [[POV.Third], (target: Vore) => new LogLine(`${target.name.capital} dies!`)] | [[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 | prey.containedIn = this.containedIn | ||||
| if (this.containedIn !== null) { | if (this.containedIn !== null) { | ||||
| this.containedIn.contents.push(prey) | 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 { | consume (prey: Vore): LogEntry { | ||||
| if (prey.containedIn !== null) { | |||||
| prey.containedIn.contents = prey.containedIn.contents.filter(item => prey !== item) | |||||
| } | |||||
| this.contents.push(prey) | this.contents.push(prey) | ||||
| prey.containedIn = this | prey.containedIn = this | ||||
| return this.consumeLines.run(this.owner, prey) | 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 scaled = this.damage.scale(dt / 60) | ||||
| const damageResults: Array<LogEntry> = [] | const damageResults: Array<LogEntry> = [] | ||||
| const tickedEntries = new LogLines(...this.contents.map(prey => this.tickLines.run(this.owner, prey, { damage: scaled }))) | |||||
| this.contents.forEach(prey => { | this.contents.forEach(prey => { | ||||
| damageResults.push(prey.takeDamage(scaled)) | 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) | const digestedEntries = this.digest(justDigested) | ||||
| this.contents = this.contents.filter(prey => { | this.contents = this.contents.filter(prey => { | ||||