corp: classes are types

This commit is contained in:
Snarling 2022-09-20 06:47:54 -04:00
parent 557bc12562
commit bc7c15ad77
23 changed files with 100 additions and 244 deletions

@ -1,8 +1,6 @@
import { Player } from "../Player"; import { Player } from "../Player";
import { MaterialSizes } from "./MaterialSizes"; import { MaterialSizes } from "./MaterialSizes";
import { ICorporation } from "./ICorporation";
import { Corporation } from "./Corporation"; import { Corporation } from "./Corporation";
import { IIndustry } from "./IIndustry";
import { IndustryStartingCosts, IndustryResearchTrees } from "./IndustryData"; import { IndustryStartingCosts, IndustryResearchTrees } from "./IndustryData";
import { Industry } from "./Industry"; import { Industry } from "./Industry";
import { CorporationConstants } from "./data/Constants"; import { CorporationConstants } from "./data/Constants";
@ -17,7 +15,7 @@ import { EmployeePositions } from "./EmployeePositions";
import { ResearchMap } from "./ResearchMap"; import { ResearchMap } from "./ResearchMap";
import { isRelevantMaterial } from "./ui/Helpers"; import { isRelevantMaterial } from "./ui/Helpers";
export function NewIndustry(corporation: ICorporation, industry: string, name: string): void { export function NewIndustry(corporation: Corporation, industry: string, name: string): void {
if (corporation.divisions.find(({ type }) => industry == type)) if (corporation.divisions.find(({ type }) => industry == type))
throw new Error(`You have already expanded into the ${industry} industry!`); throw new Error(`You have already expanded into the ${industry} industry!`);
@ -47,7 +45,7 @@ export function NewIndustry(corporation: ICorporation, industry: string, name: s
} }
} }
export function NewCity(corporation: ICorporation, division: IIndustry, city: string): void { export function NewCity(corporation: Corporation, division: Industry, city: string): void {
if (corporation.funds < CorporationConstants.OfficeInitialCost) { if (corporation.funds < CorporationConstants.OfficeInitialCost) {
throw new Error("You don't have enough company funds to open a new office!"); throw new Error("You don't have enough company funds to open a new office!");
} }
@ -61,7 +59,7 @@ export function NewCity(corporation: ICorporation, division: IIndustry, city: st
}); });
} }
export function UnlockUpgrade(corporation: ICorporation, upgrade: CorporationUnlockUpgrade): void { export function UnlockUpgrade(corporation: Corporation, upgrade: CorporationUnlockUpgrade): void {
if (corporation.funds < upgrade.price) { if (corporation.funds < upgrade.price) {
throw new Error("Insufficient funds"); throw new Error("Insufficient funds");
} }
@ -71,7 +69,7 @@ export function UnlockUpgrade(corporation: ICorporation, upgrade: CorporationUnl
corporation.unlock(upgrade); corporation.unlock(upgrade);
} }
export function LevelUpgrade(corporation: ICorporation, upgrade: CorporationUpgrade): void { export function LevelUpgrade(corporation: Corporation, upgrade: CorporationUpgrade): void {
const baseCost = upgrade.basePrice; const baseCost = upgrade.basePrice;
const priceMult = upgrade.priceMult; const priceMult = upgrade.priceMult;
const level = corporation.upgrades[upgrade.index]; const level = corporation.upgrades[upgrade.index];
@ -83,7 +81,7 @@ export function LevelUpgrade(corporation: ICorporation, upgrade: CorporationUpgr
} }
} }
export function IssueDividends(corporation: ICorporation, rate: number): void { export function IssueDividends(corporation: Corporation, rate: number): void {
if (isNaN(rate) || rate < 0 || rate > CorporationConstants.DividendMaxRate) { if (isNaN(rate) || rate < 0 || rate > CorporationConstants.DividendMaxRate) {
throw new Error(`Invalid value. Must be an number between 0 and ${CorporationConstants.DividendMaxRate}`); throw new Error(`Invalid value. Must be an number between 0 and ${CorporationConstants.DividendMaxRate}`);
} }
@ -252,7 +250,7 @@ export function BuyMaterial(material: Material, amt: number): void {
material.buy = amt; material.buy = amt;
} }
export function BulkPurchase(corp: ICorporation, warehouse: Warehouse, material: Material, amt: number): void { export function BulkPurchase(corp: Corporation, warehouse: Warehouse, material: Material, amt: number): void {
const matSize = MaterialSizes[material.name]; const matSize = MaterialSizes[material.name];
const maxAmount = (warehouse.size - warehouse.sizeUsed) / matSize; const maxAmount = (warehouse.size - warehouse.sizeUsed) / matSize;
if (isNaN(amt) || amt < 0) { if (isNaN(amt) || amt < 0) {
@ -270,7 +268,7 @@ export function BulkPurchase(corp: ICorporation, warehouse: Warehouse, material:
} }
} }
export function SellShares(corporation: ICorporation, numShares: number): number { export function SellShares(corporation: Corporation, numShares: number): number {
if (isNaN(numShares)) throw new Error("Invalid value for number of shares"); if (isNaN(numShares)) throw new Error("Invalid value for number of shares");
if (numShares < 0) throw new Error("Invalid value for number of shares"); if (numShares < 0) throw new Error("Invalid value for number of shares");
if (numShares > corporation.numShares) throw new Error("You don't have that many shares to sell!"); if (numShares > corporation.numShares) throw new Error("You don't have that many shares to sell!");
@ -290,7 +288,7 @@ export function SellShares(corporation: ICorporation, numShares: number): number
return profit; return profit;
} }
export function BuyBackShares(corporation: ICorporation, numShares: number): boolean { export function BuyBackShares(corporation: Corporation, numShares: number): boolean {
if (isNaN(numShares)) throw new Error("Invalid value for number of shares"); if (isNaN(numShares)) throw new Error("Invalid value for number of shares");
if (numShares < 0) throw new Error("Invalid value for number of shares"); if (numShares < 0) throw new Error("Invalid value for number of shares");
if (numShares > corporation.issuedShares) throw new Error("You don't have that many shares to buy!"); if (numShares > corporation.issuedShares) throw new Error("You don't have that many shares to buy!");
@ -318,7 +316,7 @@ export function AutoAssignJob(office: OfficeSpace, job: string, count: number):
return office.autoAssignJob(job, count); return office.autoAssignJob(job, count);
} }
export function UpgradeOfficeSize(corp: ICorporation, office: OfficeSpace, size: number): void { export function UpgradeOfficeSize(corp: Corporation, office: OfficeSpace, size: number): void {
const initialPriceMult = Math.round(office.size / CorporationConstants.OfficeInitialSize); const initialPriceMult = Math.round(office.size / CorporationConstants.OfficeInitialSize);
const costMultiplier = 1.09; const costMultiplier = 1.09;
// Calculate cost to upgrade size by 15 employees // Calculate cost to upgrade size by 15 employees
@ -332,7 +330,7 @@ export function UpgradeOfficeSize(corp: ICorporation, office: OfficeSpace, size:
corp.funds = corp.funds - cost; corp.funds = corp.funds - cost;
} }
export function BuyCoffee(corp: ICorporation, office: OfficeSpace): boolean { export function BuyCoffee(corp: Corporation, office: OfficeSpace): boolean {
const cost = office.getCoffeeCost(); const cost = office.getCoffeeCost();
if (corp.funds < cost) { if (corp.funds < cost) {
return false; return false;
@ -346,7 +344,7 @@ export function BuyCoffee(corp: ICorporation, office: OfficeSpace): boolean {
return true; return true;
} }
export function ThrowParty(corp: ICorporation, office: OfficeSpace, costPerEmployee: number): number { export function ThrowParty(corp: Corporation, office: OfficeSpace, costPerEmployee: number): number {
const mult = 1 + costPerEmployee / 10e6; const mult = 1 + costPerEmployee / 10e6;
const cost = costPerEmployee * office.employees.length; const cost = costPerEmployee * office.employees.length;
if (corp.funds < cost) { if (corp.funds < cost) {
@ -361,7 +359,7 @@ export function ThrowParty(corp: ICorporation, office: OfficeSpace, costPerEmplo
return mult; return mult;
} }
export function PurchaseWarehouse(corp: ICorporation, division: IIndustry, city: string): void { export function PurchaseWarehouse(corp: Corporation, division: Industry, city: string): void {
if (corp.funds < CorporationConstants.WarehouseInitialCost) return; if (corp.funds < CorporationConstants.WarehouseInitialCost) return;
if (division.warehouses[city] instanceof Warehouse) return; if (division.warehouses[city] instanceof Warehouse) return;
division.warehouses[city] = new Warehouse({ division.warehouses[city] = new Warehouse({
@ -380,7 +378,7 @@ export function UpgradeWarehouseCost(warehouse: Warehouse, amt: number): number
); );
} }
export function UpgradeWarehouse(corp: ICorporation, division: IIndustry, warehouse: Warehouse, amt = 1): void { export function UpgradeWarehouse(corp: Corporation, division: Industry, warehouse: Warehouse, amt = 1): void {
const sizeUpgradeCost = UpgradeWarehouseCost(warehouse, amt); const sizeUpgradeCost = UpgradeWarehouseCost(warehouse, amt);
if (corp.funds < sizeUpgradeCost) return; if (corp.funds < sizeUpgradeCost) return;
warehouse.level += amt; warehouse.level += amt;
@ -388,7 +386,7 @@ export function UpgradeWarehouse(corp: ICorporation, division: IIndustry, wareho
corp.funds = corp.funds - sizeUpgradeCost; corp.funds = corp.funds - sizeUpgradeCost;
} }
export function HireAdVert(corp: ICorporation, division: IIndustry): void { export function HireAdVert(corp: Corporation, division: Industry): void {
const cost = division.getAdVertCost(); const cost = division.getAdVertCost();
if (corp.funds < cost) return; if (corp.funds < cost) return;
corp.funds = corp.funds - cost; corp.funds = corp.funds - cost;
@ -396,8 +394,8 @@ export function HireAdVert(corp: ICorporation, division: IIndustry): void {
} }
export function MakeProduct( export function MakeProduct(
corp: ICorporation, corp: Corporation,
division: IIndustry, division: Industry,
city: string, city: string,
productName: string, productName: string,
designInvest: number, designInvest: number,
@ -449,7 +447,7 @@ export function MakeProduct(
products[product.name] = product; products[product.name] = product;
} }
export function Research(division: IIndustry, researchName: string): void { export function Research(division: Industry, researchName: string): void {
const researchTree = IndustryResearchTrees[division.type]; const researchTree = IndustryResearchTrees[division.type];
if (researchTree === undefined) throw new Error(`No research tree for industry '${division.type}'`); if (researchTree === undefined) throw new Error(`No research tree for industry '${division.type}'`);
const allResearch = researchTree.getAllNodes(); const allResearch = researchTree.getAllNodes();

@ -2,8 +2,8 @@ import { CorporationConstants } from "./data/Constants";
import { getRandomInt } from "../utils/helpers/getRandomInt"; import { getRandomInt } from "../utils/helpers/getRandomInt";
import { Generic_fromJSON, Generic_toJSON, IReviverValue, Reviver } from "../utils/JSONReviver"; import { Generic_fromJSON, Generic_toJSON, IReviverValue, Reviver } from "../utils/JSONReviver";
import { EmployeePositions } from "./EmployeePositions"; import { EmployeePositions } from "./EmployeePositions";
import { ICorporation } from "./ICorporation"; import { Corporation } from "./Corporation";
import { IIndustry } from "./IIndustry"; import { Industry } from "./Industry";
interface IParams { interface IParams {
name?: string; name?: string;
@ -77,7 +77,7 @@ export class Employee {
return salary; return salary;
} }
calculateProductivity(corporation: ICorporation, industry: IIndustry): number { calculateProductivity(corporation: Corporation, industry: Industry): number {
const effCre = this.cre * corporation.getEmployeeCreMultiplier() * industry.getEmployeeCreMultiplier(), const effCre = this.cre * corporation.getEmployeeCreMultiplier() * industry.getEmployeeCreMultiplier(),
effCha = this.cha * corporation.getEmployeeChaMultiplier() * industry.getEmployeeChaMultiplier(), effCha = this.cha * corporation.getEmployeeChaMultiplier() * industry.getEmployeeChaMultiplier(),
effInt = this.int * corporation.getEmployeeIntMultiplier() * industry.getEmployeeIntMultiplier(), effInt = this.int * corporation.getEmployeeIntMultiplier() * industry.getEmployeeIntMultiplier(),

@ -1,62 +0,0 @@
import { Industry } from "./Industry";
import { CorporationUnlockUpgrade } from "./data/CorporationUnlockUpgrades";
import { CorporationUpgrade } from "./data/CorporationUpgrades";
import { CorporationState } from "./CorporationState";
import { IReviverValue } from "../utils/JSONReviver";
export interface ICorporation {
name: string;
divisions: Industry[];
funds: number;
revenue: number;
expenses: number;
fundingRound: number;
public: boolean;
totalShares: number;
numShares: number;
shareSalesUntilPriceUpdate: number;
shareSaleCooldown: number;
issueNewSharesCooldown: number;
dividendRate: number;
dividendTax: number;
issuedShares: number;
sharePrice: number;
storedCycles: number;
valuation: number;
unlockUpgrades: number[];
upgrades: number[];
upgradeMultipliers: number[];
state: CorporationState;
addFunds(amt: number): void;
getState(): string;
storeCycles(numCycles: number): void;
process(): void;
determineValuation(): void;
determineCycleValuation(): number;
getTargetSharePrice(): number;
updateSharePrice(): void;
immediatelyUpdateSharePrice(): void;
calculateShareSale(numShares: number): [number, number, number];
convertCooldownToString(cd: number): string;
unlock(upgrade: CorporationUnlockUpgrade): void;
upgrade(upgrade: CorporationUpgrade): void;
getProductionMultiplier(): number;
getStorageMultiplier(): number;
getDreamSenseGain(): number;
getAdvertisingMultiplier(): number;
getEmployeeCreMultiplier(): number;
getEmployeeChaMultiplier(): number;
getEmployeeIntMultiplier(): number;
getEmployeeEffMultiplier(): number;
getSalesMultiplier(): number;
getScientificResearchMultiplier(): number;
getStarterGuide(): void;
updateDividendTax(): void;
getCycleDividends(): number;
toJSON(): IReviverValue;
}

@ -1,78 +0,0 @@
import { Material } from "./Material";
import { Warehouse } from "./Warehouse";
import { ICorporation } from "./ICorporation";
import { OfficeSpace } from "./OfficeSpace";
import { Product } from "./Product";
import { IReviverValue } from "../utils/JSONReviver";
export interface IIndustry {
name: string;
type: string;
sciResearch: Material;
researched: { [key: string]: boolean | undefined };
reqMats: { [key: string]: number | undefined };
prodMats: string[];
products: { [key: string]: Product | undefined };
makesProducts: boolean;
awareness: number;
popularity: number;
startingCost: number;
reFac: number;
sciFac: number;
hwFac: number;
robFac: number;
aiFac: number;
advFac: number;
prodMult: number;
// Decimal
lastCycleRevenue: number;
lastCycleExpenses: number;
thisCycleRevenue: number;
thisCycleExpenses: number;
state: string;
newInd: boolean;
warehouses: { [key: string]: Warehouse | 0 };
offices: { [key: string]: OfficeSpace | 0 };
numAdVerts: number;
init(): void;
getProductDescriptionText(): string;
getMaximumNumberProducts(): number;
hasMaximumNumberProducts(): boolean;
calculateProductionFactors(): void;
updateWarehouseSizeUsed(warehouse: Warehouse): void;
process(marketCycles: number, state: string, corporation: ICorporation): void;
processMaterialMarket(): void;
processProductMarket(marketCycles: number): void;
processMaterials(marketCycles: number, corporation: ICorporation): [number, number];
processProducts(marketCycles: number, corporation: ICorporation): [number, number];
processProduct(marketCycles: number, product: Product, corporation: ICorporation): number;
resetImports(state: string): void;
discontinueProduct(product: Product): void;
getAdVertCost(): number;
applyAdVert(corporation: ICorporation): void;
getOfficeProductivity(office: OfficeSpace, params?: { forProduct?: boolean }): number;
getBusinessFactor(office: OfficeSpace): number;
getAdvertisingFactors(): [number, number, number, number];
getMarketFactor(mat: { dmd: number; cmp: number }): number;
hasResearch(name: string): boolean;
updateResearchTree(): void;
getAdvertisingMultiplier(): number;
getEmployeeChaMultiplier(): number;
getEmployeeCreMultiplier(): number;
getEmployeeEffMultiplier(): number;
getEmployeeIntMultiplier(): number;
getProductionMultiplier(): number;
getProductProductionMultiplier(): number;
getSalesMultiplier(): number;
getScientificResearchMultiplier(): number;
getStorageMultiplier(): number;
toJSON(): IReviverValue;
}

@ -12,16 +12,15 @@ import { dialogBoxCreate } from "../ui/React/DialogBox";
import { isString } from "../utils/helpers/isString"; import { isString } from "../utils/helpers/isString";
import { MaterialSizes } from "./MaterialSizes"; import { MaterialSizes } from "./MaterialSizes";
import { Warehouse } from "./Warehouse"; import { Warehouse } from "./Warehouse";
import { ICorporation } from "./ICorporation"; import { Corporation } from "./Corporation";
import { IIndustry } from "./IIndustry";
interface IParams { interface IParams {
name?: string; name?: string;
corp?: ICorporation; corp?: Corporation;
type?: string; type?: string;
} }
export class Industry implements IIndustry { export class Industry {
name = ""; name = "";
type = Industries.Agriculture; type = Industries.Agriculture;
sciResearch = new Material({ name: "Scientific Research" }); sciResearch = new Material({ name: "Scientific Research" });
@ -385,7 +384,7 @@ export class Industry implements IIndustry {
} }
} }
process(marketCycles = 1, state: string, corporation: ICorporation): void { process(marketCycles = 1, state: string, corporation: Corporation): void {
this.state = state; this.state = state;
//At the start of a cycle, store and reset revenue/expenses //At the start of a cycle, store and reset revenue/expenses
@ -518,7 +517,7 @@ export class Industry implements IIndustry {
} }
//Process production, purchase, and import/export of materials //Process production, purchase, and import/export of materials
processMaterials(marketCycles = 1, corporation: ICorporation): [number, number] { processMaterials(marketCycles = 1, corporation: Corporation): [number, number] {
let revenue = 0, let revenue = 0,
expenses = 0; expenses = 0;
this.calculateProductionFactors(); this.calculateProductionFactors();
@ -949,7 +948,7 @@ export class Industry implements IIndustry {
} }
//Process production & sale of this industry's FINISHED products (including all of their stats) //Process production & sale of this industry's FINISHED products (including all of their stats)
processProducts(marketCycles = 1, corporation: ICorporation): [number, number] { processProducts(marketCycles = 1, corporation: Corporation): [number, number] {
let revenue = 0; let revenue = 0;
const expenses = 0; const expenses = 0;
@ -985,7 +984,7 @@ export class Industry implements IIndustry {
} }
//Processes FINISHED products //Processes FINISHED products
processProduct(marketCycles = 1, product: Product, corporation: ICorporation): number { processProduct(marketCycles = 1, product: Product, corporation: Corporation): number {
let totalProfit = 0; let totalProfit = 0;
for (let i = 0; i < CorporationConstants.Cities.length; ++i) { for (let i = 0; i < CorporationConstants.Cities.length; ++i) {
const city = CorporationConstants.Cities[i]; const city = CorporationConstants.Cities[i];
@ -1225,7 +1224,7 @@ export class Industry implements IIndustry {
return 1e9 * Math.pow(1.06, this.numAdVerts); return 1e9 * Math.pow(1.06, this.numAdVerts);
} }
applyAdVert(corporation: ICorporation): void { applyAdVert(corporation: Corporation): void {
const advMult = corporation.getAdvertisingMultiplier() * this.getAdvertisingMultiplier(); const advMult = corporation.getAdvertisingMultiplier() * this.getAdvertisingMultiplier();
const awareness = (this.awareness + 3 * advMult) * (1.01 * advMult); const awareness = (this.awareness + 3 * advMult) * (1.01 * advMult);
this.awareness = Math.min(awareness, Number.MAX_VALUE); this.awareness = Math.min(awareness, Number.MAX_VALUE);

@ -1,6 +1,6 @@
import React from "react"; import React from "react";
import { ResearchTree } from "./ResearchTree"; import { ResearchTree } from "./ResearchTree";
import { ICorporation } from "./ICorporation"; import { Corporation } from "./Corporation";
import { getBaseResearchTreeCopy, getProductIndustryResearchTreeCopy } from "./data/BaseResearchTree"; import { getBaseResearchTreeCopy, getProductIndustryResearchTreeCopy } from "./data/BaseResearchTree";
import { MoneyCost } from "./ui/MoneyCost"; import { MoneyCost } from "./ui/MoneyCost";
@ -59,8 +59,8 @@ export const IndustryStartingCosts: IIndustryMap<number> = {
}; };
// Map of description for each industry // Map of description for each industry
export const IndustryDescriptions: IIndustryMap<(corp: ICorporation) => React.ReactElement> = { export const IndustryDescriptions: IIndustryMap<(corp: Corporation) => React.ReactElement> = {
Energy: (corp: ICorporation) => ( Energy: (corp: Corporation) => (
<> <>
Engage in the production and distribution of energy. Engage in the production and distribution of energy.
<br /> <br />
@ -70,7 +70,7 @@ export const IndustryDescriptions: IIndustryMap<(corp: ICorporation) => React.Re
Recommended starting Industry: NO Recommended starting Industry: NO
</> </>
), ),
Utilities: (corp: ICorporation) => ( Utilities: (corp: Corporation) => (
<> <>
Distribute water and provide wastewater services. Distribute water and provide wastewater services.
<br /> <br />
@ -80,7 +80,7 @@ export const IndustryDescriptions: IIndustryMap<(corp: ICorporation) => React.Re
Recommended starting Industry: NO Recommended starting Industry: NO
</> </>
), ),
Agriculture: (corp: ICorporation) => ( Agriculture: (corp: Corporation) => (
<> <>
Cultivate crops and breed livestock to produce food. Cultivate crops and breed livestock to produce food.
<br /> <br />
@ -90,7 +90,7 @@ export const IndustryDescriptions: IIndustryMap<(corp: ICorporation) => React.Re
Recommended starting Industry: YES Recommended starting Industry: YES
</> </>
), ),
Fishing: (corp: ICorporation) => ( Fishing: (corp: Corporation) => (
<> <>
Produce food through the breeding and processing of fish and fish products. Produce food through the breeding and processing of fish and fish products.
<br /> <br />
@ -100,7 +100,7 @@ export const IndustryDescriptions: IIndustryMap<(corp: ICorporation) => React.Re
Recommended starting Industry: NO Recommended starting Industry: NO
</> </>
), ),
Mining: (corp: ICorporation) => ( Mining: (corp: Corporation) => (
<> <>
Extract and process metals from the earth. Extract and process metals from the earth.
<br /> <br />
@ -110,7 +110,7 @@ export const IndustryDescriptions: IIndustryMap<(corp: ICorporation) => React.Re
Recommended starting Industry: NO Recommended starting Industry: NO
</> </>
), ),
Food: (corp: ICorporation) => ( Food: (corp: Corporation) => (
<> <>
Create your own restaurants all around the world. Create your own restaurants all around the world.
<br /> <br />
@ -120,7 +120,7 @@ export const IndustryDescriptions: IIndustryMap<(corp: ICorporation) => React.Re
Recommended starting Industry: YES Recommended starting Industry: YES
</> </>
), ),
Tobacco: (corp: ICorporation) => ( Tobacco: (corp: Corporation) => (
<> <>
Create and distribute tobacco and tobacco-related products. Create and distribute tobacco and tobacco-related products.
<br /> <br />
@ -130,7 +130,7 @@ export const IndustryDescriptions: IIndustryMap<(corp: ICorporation) => React.Re
Recommended starting Industry: YES Recommended starting Industry: YES
</> </>
), ),
Chemical: (corp: ICorporation) => ( Chemical: (corp: Corporation) => (
<> <>
Produce industrial chemicals. Produce industrial chemicals.
<br /> <br />
@ -140,7 +140,7 @@ export const IndustryDescriptions: IIndustryMap<(corp: ICorporation) => React.Re
Recommended starting Industry: NO Recommended starting Industry: NO
</> </>
), ),
Pharmaceutical: (corp: ICorporation) => ( Pharmaceutical: (corp: Corporation) => (
<> <>
Discover, develop, and create new pharmaceutical drugs. Discover, develop, and create new pharmaceutical drugs.
<br /> <br />
@ -150,7 +150,7 @@ export const IndustryDescriptions: IIndustryMap<(corp: ICorporation) => React.Re
Recommended starting Industry: NO Recommended starting Industry: NO
</> </>
), ),
Computer: (corp: ICorporation) => ( Computer: (corp: Corporation) => (
<> <>
Develop and manufacture new computer hardware and networking infrastructures. Develop and manufacture new computer hardware and networking infrastructures.
<br /> <br />
@ -160,7 +160,7 @@ export const IndustryDescriptions: IIndustryMap<(corp: ICorporation) => React.Re
Recommended starting Industry: NO Recommended starting Industry: NO
</> </>
), ),
Robotics: (corp: ICorporation) => ( Robotics: (corp: Corporation) => (
<> <>
Develop and create robots. Develop and create robots.
<br /> <br />
@ -170,7 +170,7 @@ export const IndustryDescriptions: IIndustryMap<(corp: ICorporation) => React.Re
Recommended starting Industry: NO Recommended starting Industry: NO
</> </>
), ),
Software: (corp: ICorporation) => ( Software: (corp: Corporation) => (
<> <>
Develop computer software and create AI Cores. Develop computer software and create AI Cores.
<br /> <br />
@ -180,7 +180,7 @@ export const IndustryDescriptions: IIndustryMap<(corp: ICorporation) => React.Re
Recommended starting Industry: YES Recommended starting Industry: YES
</> </>
), ),
Healthcare: (corp: ICorporation) => ( Healthcare: (corp: Corporation) => (
<> <>
Create and manage hospitals. Create and manage hospitals.
<br /> <br />
@ -190,7 +190,7 @@ export const IndustryDescriptions: IIndustryMap<(corp: ICorporation) => React.Re
Recommended starting Industry: NO Recommended starting Industry: NO
</> </>
), ),
RealEstate: (corp: ICorporation) => ( RealEstate: (corp: Corporation) => (
<> <>
Develop and manage real estate properties. Develop and manage real estate properties.
<br /> <br />

@ -4,8 +4,8 @@ import { getRandomInt } from "../utils/helpers/getRandomInt";
import { generateRandomString } from "../utils/StringHelperFunctions"; import { generateRandomString } from "../utils/StringHelperFunctions";
import { Generic_fromJSON, Generic_toJSON, IReviverValue, Reviver } from "../utils/JSONReviver"; import { Generic_fromJSON, Generic_toJSON, IReviverValue, Reviver } from "../utils/JSONReviver";
import { Employee } from "./Employee"; import { Employee } from "./Employee";
import { IIndustry } from "./IIndustry"; import { Industry } from "./Industry";
import { ICorporation } from "./ICorporation"; import { Corporation } from "./Corporation";
interface IParams { interface IParams {
loc?: string; loc?: string;
@ -68,7 +68,7 @@ export class OfficeSpace {
return this.employees.length >= this.size; return this.employees.length >= this.size;
} }
process(marketCycles = 1, corporation: ICorporation, industry: IIndustry): number { process(marketCycles = 1, corporation: Corporation, industry: Industry): number {
// HRBuddy AutoRecruitment and training // HRBuddy AutoRecruitment and training
if (industry.hasResearch("HRBuddy-Recruitment") && !this.atCapacity()) { if (industry.hasResearch("HRBuddy-Recruitment") && !this.atCapacity()) {
const emp = this.hireRandomEmployee(); const emp = this.hireRandomEmployee();
@ -177,7 +177,7 @@ export class OfficeSpace {
} }
} }
calculateEmployeeProductivity(corporation: ICorporation, industry: IIndustry): void { calculateEmployeeProductivity(corporation: Corporation, industry: Industry): void {
//Reset //Reset
for (const name of Object.keys(this.employeeProd)) { for (const name of Object.keys(this.employeeProd)) {
this.employeeProd[name] = 0; this.employeeProd[name] = 0;

@ -1,6 +1,6 @@
import { EmployeePositions } from "./EmployeePositions"; import { EmployeePositions } from "./EmployeePositions";
import { MaterialSizes } from "./MaterialSizes"; import { MaterialSizes } from "./MaterialSizes";
import { IIndustry } from "./IIndustry"; import { Industry } from "./Industry";
import { ProductRatingWeights, IProductRatingWeight } from "./ProductRatingWeights"; import { ProductRatingWeights, IProductRatingWeight } from "./ProductRatingWeights";
import { createCityMap } from "../Locations/createCityMap"; import { createCityMap } from "../Locations/createCityMap";
@ -157,7 +157,7 @@ export class Product {
} }
// @param industry - Industry object. Reference to industry that makes this Product // @param industry - Industry object. Reference to industry that makes this Product
finishProduct(industry: IIndustry): void { finishProduct(industry: Industry): void {
this.fin = true; this.fin = true;
// Calculate properties // Calculate properties
@ -248,7 +248,7 @@ export class Product {
} }
} }
calculateRating(industry: IIndustry): void { calculateRating(industry: Industry): void {
const weights: IProductRatingWeight = ProductRatingWeights[industry.type]; const weights: IProductRatingWeight = ProductRatingWeights[industry.type];
if (weights == null) { if (weights == null) {
console.error(`Could not find product rating weights for: ${industry}`); console.error(`Could not find product rating weights for: ${industry}`);

@ -1,14 +1,14 @@
import { Material } from "./Material"; import { Material } from "./Material";
import { ICorporation } from "./ICorporation"; import { Corporation } from "./Corporation";
import { IIndustry } from "./IIndustry"; import { Industry } from "./Industry";
import { MaterialSizes } from "./MaterialSizes"; import { MaterialSizes } from "./MaterialSizes";
import { IMap } from "../types"; import { IMap } from "../types";
import { Generic_fromJSON, Generic_toJSON, IReviverValue, Reviver } from "../utils/JSONReviver"; import { Generic_fromJSON, Generic_toJSON, IReviverValue, Reviver } from "../utils/JSONReviver";
import { exceptionAlert } from "../utils/helpers/exceptionAlert"; import { exceptionAlert } from "../utils/helpers/exceptionAlert";
interface IConstructorParams { interface IConstructorParams {
corp?: ICorporation; corp?: Corporation;
industry?: IIndustry; industry?: Industry;
loc?: string; loc?: string;
size?: number; size?: number;
} }
@ -96,7 +96,7 @@ export class Warehouse {
} }
} }
updateSize(corporation: ICorporation, industry: IIndustry): void { updateSize(corporation: Corporation, industry: Industry): void {
try { try {
this.size = this.level * 100 * corporation.getStorageMultiplier() * industry.getStorageMultiplier(); this.size = this.level * 100 * corporation.getStorageMultiplier() * industry.getStorageMultiplier();
} catch (e: unknown) { } catch (e: unknown) {

@ -1,14 +1,14 @@
import React, { useContext } from "react"; import React, { useContext } from "react";
import { ICorporation } from "../ICorporation"; import { Corporation } from "../Corporation";
import { IIndustry } from "../IIndustry"; import { Industry } from "../Industry";
export const Context: { export const Context: {
Corporation: React.Context<ICorporation>; Corporation: React.Context<Corporation>;
Division: React.Context<IIndustry>; Division: React.Context<Industry>;
} = { } = {
Corporation: React.createContext<ICorporation>({} as ICorporation), Corporation: React.createContext<Corporation>({} as Corporation),
Division: React.createContext<IIndustry>({} as IIndustry), Division: React.createContext<Industry>({} as Industry),
}; };
export const useCorporation = (): ICorporation => useContext(Context.Corporation); export const useCorporation = (): Corporation => useContext(Context.Corporation);
export const useDivision = (): IIndustry => useContext(Context.Division); export const useDivision = (): Industry => useContext(Context.Division);

@ -2,7 +2,7 @@
// These are the tabs at the top of the UI that let you switch to different // These are the tabs at the top of the UI that let you switch to different
// divisions, see an overview of your corporation, or create a new industry // divisions, see an overview of your corporation, or create a new industry
import React, { useState, useEffect } from "react"; import React, { useState, useEffect } from "react";
import { IIndustry } from "../IIndustry"; import { Industry } from "../Industry";
import { MainPanel } from "./MainPanel"; import { MainPanel } from "./MainPanel";
import { Industries } from "../IndustryData"; import { Industries } from "../IndustryData";
import { ExpandIndustryTab } from "./ExpandIndustryTab"; import { ExpandIndustryTab } from "./ExpandIndustryTab";
@ -32,7 +32,7 @@ export function CorporationRoot(): React.ReactElement {
const canExpand = const canExpand =
Object.keys(Industries).filter( Object.keys(Industries).filter(
(industryType: string) => (industryType: string) =>
corporation.divisions.find((division: IIndustry) => division.type === industryType) === undefined, corporation.divisions.find((division: Industry) => division.type === industryType) === undefined,
).length > 0; ).length > 0;
return ( return (

@ -2,7 +2,7 @@ import React, { useState } from "react";
import { dialogBoxCreate } from "../../ui/React/DialogBox"; import { dialogBoxCreate } from "../../ui/React/DialogBox";
import { IndustryStartingCosts, Industries, IndustryDescriptions } from "../IndustryData"; import { IndustryStartingCosts, Industries, IndustryDescriptions } from "../IndustryData";
import { useCorporation } from "./Context"; import { useCorporation } from "./Context";
import { IIndustry } from "../IIndustry"; import { Industry } from "../Industry";
import { NewIndustry } from "../Actions"; import { NewIndustry } from "../Actions";
import Typography from "@mui/material/Typography"; import Typography from "@mui/material/Typography";
@ -23,7 +23,7 @@ export function ExpandIndustryTab(props: IProps): React.ReactElement {
const possibleIndustries = allIndustries const possibleIndustries = allIndustries
.filter( .filter(
(industryType: string) => (industryType: string) =>
corp.divisions.find((division: IIndustry) => division.type === industryType) === undefined, corp.divisions.find((division: Industry) => division.type === industryType) === undefined,
) )
.sort(); .sort();
const [industry, setIndustry] = useState(possibleIndustries.length > 0 ? possibleIndustries[0] : ""); const [industry, setIndustry] = useState(possibleIndustries.length > 0 ? possibleIndustries[0] : "");

@ -1,8 +1,8 @@
import { IIndustry } from "../IIndustry"; import { Industry } from "../Industry";
// Returns a boolean indicating whether the given material is relevant for the // Returns a boolean indicating whether the given material is relevant for the
// current industry. // current industry.
export function isRelevantMaterial(matName: string, division: IIndustry): boolean { export function isRelevantMaterial(matName: string, division: Industry): boolean {
// Materials that affect Production multiplier // Materials that affect Production multiplier
const prodMultiplierMats = ["Hardware", "Robots", "AICores", "RealEstate", "AI Cores", "Real Estate"]; const prodMultiplierMats = ["Hardware", "Robots", "AICores", "RealEstate", "AI Cores", "Real Estate"];

@ -1,9 +1,9 @@
import React from "react"; import React from "react";
import { IIndustry } from "../IIndustry"; import { Industry } from "../Industry";
import { MathJaxWrapper } from "../../MathJaxWrapper"; import { MathJaxWrapper } from "../../MathJaxWrapper";
interface IProps { interface IProps {
division: IIndustry; division: Industry;
} }
export function IndustryProductEquation(props: IProps): React.ReactElement { export function IndustryProductEquation(props: IProps): React.ReactElement {

@ -13,8 +13,8 @@ import { MaterialSizes } from "../MaterialSizes";
import { numeralWrapper } from "../../ui/numeralFormat"; import { numeralWrapper } from "../../ui/numeralFormat";
import { ICorporation } from "../ICorporation"; import { Corporation } from "../Corporation";
import { IIndustry } from "../IIndustry"; import { Industry } from "../Industry";
import { MoneyCost } from "./MoneyCost"; import { MoneyCost } from "./MoneyCost";
import { isRelevantMaterial } from "./Helpers"; import { isRelevantMaterial } from "./Helpers";
import { IndustryProductEquation } from "./IndustryProductEquation"; import { IndustryProductEquation } from "./IndustryProductEquation";
@ -30,8 +30,8 @@ import makeStyles from "@mui/styles/makeStyles";
import createStyles from "@mui/styles/createStyles"; import createStyles from "@mui/styles/createStyles";
interface IProps { interface IProps {
corp: ICorporation; corp: Corporation;
division: IIndustry; division: Industry;
warehouse: Warehouse | 0; warehouse: Warehouse | 0;
currentCity: string; currentCity: string;
rerender: () => void; rerender: () => void;

@ -4,7 +4,7 @@
import React from "react"; import React from "react";
import { CityTabs } from "./CityTabs"; import { CityTabs } from "./CityTabs";
import { IIndustry } from "../IIndustry"; import { Industry } from "../Industry";
import { Context, useCorporation } from "./Context"; import { Context, useCorporation } from "./Context";
import { CityName } from "../../Locations/data/CityNames"; import { CityName } from "../../Locations/data/CityNames";
@ -18,7 +18,7 @@ export function MainPanel(props: IProps): React.ReactElement {
const corp = useCorporation(); const corp = useCorporation();
const division = const division =
props.divisionName !== "Overview" props.divisionName !== "Overview"
? corp.divisions.find((division: IIndustry) => division.name === props.divisionName) ? corp.divisions.find((division: Industry) => division.name === props.divisionName)
: undefined; // use undefined because find returns undefined : undefined; // use undefined because find returns undefined
if (division === undefined) throw new Error("Cannot find division"); if (division === undefined) throw new Error("Cannot find division");

@ -1,6 +1,6 @@
import * as React from "react"; import * as React from "react";
import { numeralWrapper } from "../../ui/numeralFormat"; import { numeralWrapper } from "../../ui/numeralFormat";
import { ICorporation } from "../ICorporation"; import { Corporation } from "../Corporation";
import { Theme } from "@mui/material/styles"; import { Theme } from "@mui/material/styles";
import makeStyles from "@mui/styles/makeStyles"; import makeStyles from "@mui/styles/makeStyles";
import createStyles from "@mui/styles/createStyles"; import createStyles from "@mui/styles/createStyles";
@ -18,7 +18,7 @@ const useStyles = makeStyles((theme: Theme) =>
interface IProps { interface IProps {
money: number; money: number;
corp: ICorporation; corp: Corporation;
} }
export function MoneyCost(props: IProps): React.ReactElement { export function MoneyCost(props: IProps): React.ReactElement {

@ -2,7 +2,7 @@ import React, { useState } from "react";
import { dialogBoxCreate } from "../../../ui/React/DialogBox"; import { dialogBoxCreate } from "../../../ui/React/DialogBox";
import { Material } from "../../Material"; import { Material } from "../../Material";
import { Export } from "../../Export"; import { Export } from "../../Export";
import { IIndustry } from "../../IIndustry"; import { Industry } from "../../Industry";
import { ExportMaterial } from "../../Actions"; import { ExportMaterial } from "../../Actions";
import { Modal } from "../../../ui/React/Modal"; import { Modal } from "../../../ui/React/Modal";
import { useCorporation } from "../Context"; import { useCorporation } from "../Context";
@ -23,7 +23,7 @@ interface IProps {
// Create a popup that lets the player manage exports // Create a popup that lets the player manage exports
export function ExportModal(props: IProps): React.ReactElement { export function ExportModal(props: IProps): React.ReactElement {
const corp = useCorporation(); const corp = useCorporation();
const possibleDivisions = corp.divisions.filter((division: IIndustry) => const possibleDivisions = corp.divisions.filter((division: Industry) =>
isRelevantMaterial(props.mat.name, division), isRelevantMaterial(props.mat.name, division),
); );
if (possibleDivisions.length === 0) throw new Error("Export popup created with no divisions."); if (possibleDivisions.length === 0) throw new Error("Export popup created with no divisions.");
@ -72,7 +72,7 @@ export function ExportModal(props: IProps): React.ReactElement {
rerender(); rerender();
} }
const currentDivision = corp.divisions.find((division: IIndustry) => division.name === industry); const currentDivision = corp.divisions.find((division: Industry) => division.name === industry);
if (currentDivision === undefined) if (currentDivision === undefined)
throw new Error(`Export popup somehow ended up with undefined division '${currentDivision}'`); throw new Error(`Export popup somehow ended up with undefined division '${currentDivision}'`);
const possibleCities = Object.keys(currentDivision.warehouses).filter( const possibleCities = Object.keys(currentDivision.warehouses).filter(
@ -90,8 +90,8 @@ export function ExportModal(props: IProps): React.ReactElement {
</Typography> </Typography>
<Select onChange={onIndustryChange} value={industry}> <Select onChange={onIndustryChange} value={industry}>
{corp.divisions {corp.divisions
.filter((division: IIndustry) => isRelevantMaterial(props.mat.name, division)) .filter((division: Industry) => isRelevantMaterial(props.mat.name, division))
.map((division: IIndustry) => ( .map((division: Industry) => (
<MenuItem key={division.name} value={division.name}> <MenuItem key={division.name} value={division.name}>
{division.name} {division.name}
</MenuItem> </MenuItem>

@ -2,7 +2,7 @@ import React, { useState } from "react";
import { Modal } from "../../../ui/React/Modal"; import { Modal } from "../../../ui/React/Modal";
import { IndustryResearchTrees } from "../../IndustryData"; import { IndustryResearchTrees } from "../../IndustryData";
import { CorporationConstants } from "../../data/Constants"; import { CorporationConstants } from "../../data/Constants";
import { IIndustry } from "../../IIndustry"; import { Industry } from "../../Industry";
import { Research } from "../../Actions"; import { Research } from "../../Actions";
import { Node } from "../../ResearchTree"; import { Node } from "../../ResearchTree";
import { ResearchMap } from "../../ResearchMap"; import { ResearchMap } from "../../ResearchMap";
@ -20,7 +20,7 @@ import CheckIcon from "@mui/icons-material/Check";
interface INodeProps { interface INodeProps {
n: Node | null; n: Node | null;
division: IIndustry; division: Industry;
} }
function Upgrade({ n, division }: INodeProps): React.ReactElement { function Upgrade({ n, division }: INodeProps): React.ReactElement {
const [open, setOpen] = useState(false); const [open, setOpen] = useState(false);
@ -129,7 +129,7 @@ function Upgrade({ n, division }: INodeProps): React.ReactElement {
interface IProps { interface IProps {
open: boolean; open: boolean;
onClose: () => void; onClose: () => void;
industry: IIndustry; industry: Industry;
} }
// Create the Research Tree UI for this Industry // Create the Research Tree UI for this Industry

@ -3,7 +3,7 @@ import { numeralWrapper } from "../../../ui/numeralFormat";
import { dialogBoxCreate } from "../../../ui/React/DialogBox"; import { dialogBoxCreate } from "../../../ui/React/DialogBox";
import { Modal } from "../../../ui/React/Modal"; import { Modal } from "../../../ui/React/Modal";
import { useCorporation } from "../Context"; import { useCorporation } from "../Context";
import { ICorporation } from "../../ICorporation"; import { Corporation } from "../../Corporation";
import Typography from "@mui/material/Typography"; import Typography from "@mui/material/Typography";
import Button from "@mui/material/Button"; import Button from "@mui/material/Button";
import { Money } from "../../../ui/React/Money"; import { Money } from "../../../ui/React/Money";
@ -24,7 +24,7 @@ export function SellSharesModal(props: IProps): React.ReactElement {
const disabled = isNaN(shares) || shares <= 0 || shares > corp.numShares; const disabled = isNaN(shares) || shares <= 0 || shares > corp.numShares;
function ProfitIndicator(props: { shares: number | null; corp: ICorporation }): React.ReactElement { function ProfitIndicator(props: { shares: number | null; corp: Corporation }): React.ReactElement {
if (props.shares === null) return <></>; if (props.shares === null) return <></>;
let text = ""; let text = "";
if (isNaN(props.shares) || props.shares <= 0) { if (isNaN(props.shares) || props.shares <= 0) {

@ -2,7 +2,7 @@ import React from "react";
import { numeralWrapper } from "../../../ui/numeralFormat"; import { numeralWrapper } from "../../../ui/numeralFormat";
import { CorporationConstants } from "../../data/Constants"; import { CorporationConstants } from "../../data/Constants";
import { OfficeSpace } from "../../OfficeSpace"; import { OfficeSpace } from "../../OfficeSpace";
import { ICorporation } from "../../ICorporation"; import { Corporation } from "../../Corporation";
import { UpgradeOfficeSize } from "../../Actions"; import { UpgradeOfficeSize } from "../../Actions";
import { Modal } from "../../../ui/React/Modal"; import { Modal } from "../../../ui/React/Modal";
import { useCorporation } from "../Context"; import { useCorporation } from "../Context";
@ -14,7 +14,7 @@ import Box from "@mui/material/Box";
interface IUpgradeButton { interface IUpgradeButton {
cost: number; cost: number;
size: number; size: number;
corp: ICorporation; corp: Corporation;
office: OfficeSpace; office: OfficeSpace;
onClose: () => void; onClose: () => void;
rerender: () => void; rerender: () => void;

@ -5,8 +5,8 @@ import { Employee } from "../Corporation/Employee";
import { Product } from "../Corporation/Product"; import { Product } from "../Corporation/Product";
import { Material } from "../Corporation/Material"; import { Material } from "../Corporation/Material";
import { Warehouse } from "../Corporation/Warehouse"; import { Warehouse } from "../Corporation/Warehouse";
import { IIndustry } from "../Corporation/IIndustry"; import { Industry } from "../Corporation/Industry";
import { ICorporation } from "../Corporation/ICorporation"; import { Corporation } from "../Corporation/Corporation";
import { import {
Corporation as NSCorporation, Corporation as NSCorporation,
@ -59,7 +59,6 @@ import {
import { CorporationUnlockUpgrades } from "../Corporation/data/CorporationUnlockUpgrades"; import { CorporationUnlockUpgrades } from "../Corporation/data/CorporationUnlockUpgrades";
import { CorporationUpgrades } from "../Corporation/data/CorporationUpgrades"; import { CorporationUpgrades } from "../Corporation/data/CorporationUpgrades";
import { EmployeePositions } from "../Corporation/EmployeePositions"; import { EmployeePositions } from "../Corporation/EmployeePositions";
import { Industry } from "../Corporation/Industry";
import { IndustryResearchTrees, IndustryStartingCosts } from "../Corporation/IndustryData"; import { IndustryResearchTrees, IndustryStartingCosts } from "../Corporation/IndustryData";
import { CorporationConstants } from "../Corporation/data/Constants"; import { CorporationConstants } from "../Corporation/data/Constants";
import { ResearchMap } from "../Corporation/ResearchMap"; import { ResearchMap } from "../Corporation/ResearchMap";
@ -191,7 +190,7 @@ export function NetscriptCorporation(): InternalAPI<NSCorporation> {
return true; return true;
} }
function getResearchCost(division: IIndustry, researchName: string): number { function getResearchCost(division: Industry, researchName: string): number {
const researchTree = IndustryResearchTrees[division.type]; const researchTree = IndustryResearchTrees[division.type];
if (researchTree === undefined) throw new Error(`No research tree for industry '${division.type}'`); if (researchTree === undefined) throw new Error(`No research tree for industry '${division.type}'`);
const allResearch = researchTree.getAllNodes(); const allResearch = researchTree.getAllNodes();
@ -200,7 +199,7 @@ export function NetscriptCorporation(): InternalAPI<NSCorporation> {
return research.cost; return research.cost;
} }
function hasResearched(division: IIndustry, researchName: string): boolean { function hasResearched(division: Industry, researchName: string): boolean {
return division.researched[researchName] === undefined ? false : (division.researched[researchName] as boolean); return division.researched[researchName] === undefined ? false : (division.researched[researchName] as boolean);
} }
@ -223,13 +222,13 @@ export function NetscriptCorporation(): InternalAPI<NSCorporation> {
return true; return true;
} }
function getCorporation(): ICorporation { function getCorporation(): Corporation {
const corporation = player.corporation; const corporation = player.corporation;
if (corporation === null) throw new Error("cannot be called without a corporation"); if (corporation === null) throw new Error("cannot be called without a corporation");
return corporation; return corporation;
} }
function getDivision(divisionName: string): IIndustry { function getDivision(divisionName: string): Industry {
const corporation = getCorporation(); const corporation = getCorporation();
const division = corporation.divisions.find((div) => div.name === divisionName); const division = corporation.divisions.find((div) => div.name === divisionName);
if (division === undefined) throw new Error(`No division named '${divisionName}'`); if (division === undefined) throw new Error(`No division named '${divisionName}'`);

@ -13,7 +13,7 @@ import { Exploit } from "../../Exploits/Exploit";
import { LocationName } from "../../Locations/data/LocationNames"; import { LocationName } from "../../Locations/data/LocationNames";
import { IPlayerOwnedAugmentation } from "../../Augmentation/PlayerOwnedAugmentation"; import { IPlayerOwnedAugmentation } from "../../Augmentation/PlayerOwnedAugmentation";
import { ICorporation } from "../../Corporation/ICorporation"; import { Corporation } from "../../Corporation/Corporation";
import { IGang } from "../../Gang/IGang"; import { IGang } from "../../Gang/IGang";
import { Bladeburner } from "../../Bladeburner/Bladeburner"; import { Bladeburner } from "../../Bladeburner/Bladeburner";
import { HacknetNode } from "../../Hacknet/HacknetNode"; import { HacknetNode } from "../../Hacknet/HacknetNode";
@ -32,7 +32,7 @@ import { Person } from "../Person";
export class PlayerObject extends Person { export class PlayerObject extends Person {
// Player-specific properties // Player-specific properties
bitNodeN = 1; //current bitnode bitNodeN = 1; //current bitnode
corporation: ICorporation | null = null; corporation: Corporation | null = null;
gang: IGang | null = null; gang: IGang | null = null;
bladeburner: Bladeburner | null = null; bladeburner: Bladeburner | null = null;
currentServer = ""; currentServer = "";