/** * Implements the Resleeve class, which defines a new body * that the player can "re-sleeve" into. */ import { Person } from "../Person"; import { Augmentation } from "../../Augmentation/Augmentation"; import { Augmentations } from "../../Augmentation/Augmentations"; import { Generic_fromJSON, Generic_toJSON, Reviver } from "../../utils/JSONReviver"; export class Resleeve extends Person { constructor() { super(); } getCost(): number { // Each experience point adds this to the cost const CostPerExp = 25e3; // Final cost is multiplied by this constant ^ # Augs const NumAugsExponent = 1.2; // Get total exp in this re-sleeve const totalExp: number = this.hacking_exp + this.strength_exp + this.defense_exp + this.dexterity_exp + this.agility_exp + this.charisma_exp; // Get total base Augmentation cost for this re-sleeve let totalAugmentationCost = 0; for (let i = 0; i < this.augmentations.length; ++i) { const aug: Augmentation | null = Augmentations[this.augmentations[i].name]; if (aug == null) { console.error(`Could not find Augmentation ${this.augmentations[i].name}`); continue; } totalAugmentationCost += aug.startingCost; } return totalExp * CostPerExp + totalAugmentationCost * Math.pow(NumAugsExponent, this.augmentations.length); } /** * Serialize the current object to a JSON save state. */ toJSON(): any { return Generic_toJSON("Resleeve", this); } /** * Initiatizes a Resleeve object from a JSON save state. */ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types static fromJSON(value: any): Resleeve { return Generic_fromJSON(Resleeve, value.data); } } Reviver.constructors.Resleeve = Resleeve;