CORP: Add maxProducts property to division, consolidate maxProducts logic (#551)

This commit is contained in:
Kateract 2023-06-01 12:20:54 -07:00 committed by GitHub
parent 0d6015104e
commit 10215a924c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 31 additions and 21 deletions

@ -0,0 +1,13 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [Division](./bitburner.division.md) &gt; [maxProducts](./bitburner.division.maxproducts.md)
## Division.maxProducts property
How many products this division can support
**Signature:**
```typescript
maxProducts: number;
```

@ -21,6 +21,7 @@ interface Division
| [lastCycleExpenses](./bitburner.division.lastcycleexpenses.md) | | number | Expenses last cycle | | [lastCycleExpenses](./bitburner.division.lastcycleexpenses.md) | | number | Expenses last cycle |
| [lastCycleRevenue](./bitburner.division.lastcyclerevenue.md) | | number | Revenue last cycle | | [lastCycleRevenue](./bitburner.division.lastcyclerevenue.md) | | number | Revenue last cycle |
| [makesProducts](./bitburner.division.makesproducts.md) | | boolean | Whether the industry this division is in is capable of making products | | [makesProducts](./bitburner.division.makesproducts.md) | | boolean | Whether the industry this division is in is capable of making products |
| [maxProducts](./bitburner.division.maxproducts.md) | | number | How many products this division can support |
| [name](./bitburner.division.name.md) | | string | Name of the division | | [name](./bitburner.division.name.md) | | string | Name of the division |
| [numAdVerts](./bitburner.division.numadverts.md) | | number | Number of times AdVert has been bought | | [numAdVerts](./bitburner.division.numadverts.md) | | number | Number of times AdVert has been bought |
| [popularity](./bitburner.division.popularity.md) | | number | Popularity of the division | | [popularity](./bitburner.division.popularity.md) | | number | Popularity of the division |

@ -396,14 +396,8 @@ export function MakeProduct(
if (corp.funds < designInvest + marketingInvest) { if (corp.funds < designInvest + marketingInvest) {
throw new Error("You don't have enough company funds to make this large of an investment"); throw new Error("You don't have enough company funds to make this large of an investment");
} }
let maxProducts = 3; if (division.products.size >= division.maxProducts) {
if (division.hasResearch("uPgrade: Capacity.II")) { throw new Error(`You are already at the max products (${division.maxProducts}) for division: ${division.name}!`);
maxProducts = 5;
} else if (division.hasResearch("uPgrade: Capacity.I")) {
maxProducts = 4;
}
if (division.products.size >= maxProducts) {
throw new Error(`You are already at the max products (${maxProducts}) for division: ${division.name}!`);
} }
const product = new Product({ const product = new Product({

@ -39,6 +39,16 @@ export class Division {
products = new JSONMap<string, Product>(); products = new JSONMap<string, Product>();
makesProducts = false; makesProducts = false;
get maxProducts() {
if (!this.makesProducts) return 0;
// Calculate additional number of allowed Products from Research/Upgrades
let additional = 0;
if (this.hasResearch("uPgrade: Capacity.I")) ++additional;
if (this.hasResearch("uPgrade: Capacity.II")) ++additional;
return corpConstants.maxProductsBase + additional;
}
awareness = 0; awareness = 0;
popularity = 0; popularity = 0;
@ -103,19 +113,8 @@ export class Division {
this.producedMaterials = data.producedMaterials ?? []; this.producedMaterials = data.producedMaterials ?? [];
} }
getMaximumNumberProducts(): number {
if (!this.makesProducts) return 0;
// Calculate additional number of allowed Products from Research/Upgrades
let additional = 0;
if (this.hasResearch("uPgrade: Capacity.I")) ++additional;
if (this.hasResearch("uPgrade: Capacity.II")) ++additional;
return corpConstants.maxProductsBase + additional;
}
hasMaximumNumberProducts(): boolean { hasMaximumNumberProducts(): boolean {
return this.products.size >= this.getMaximumNumberProducts(); return this.products.size >= this.maxProducts;
} }
//Calculates the values that factor into the production and properties of //Calculates the values that factor into the production and properties of

@ -71,7 +71,7 @@ function MakeProductButton(): React.ReactElement {
} }
const disabledText = hasMaxProducts const disabledText = hasMaxProducts
? `${division.name} already has the maximum number of products (${division.getMaximumNumberProducts()})` ? `${division.name} already has the maximum number of products (${division.maxProducts})`
: corp.funds < 0 : corp.funds < 0
? "Insufficient corporation funds" ? "Insufficient corporation funds"
: ""; : "";

@ -262,6 +262,7 @@ export function NetscriptCorporation(): InternalAPI<NSCorporation> {
cities: cities, cities: cities,
products: [...division.products.keys()], products: [...division.products.keys()],
makesProducts: division.makesProducts, makesProducts: division.makesProducts,
maxProducts: division.maxProducts,
}; };
} }

@ -7681,6 +7681,8 @@ interface Division {
products: string[]; products: string[];
/** Whether the industry this division is in is capable of making products */ /** Whether the industry this division is in is capable of making products */
makesProducts: boolean; makesProducts: boolean;
/** How many products this division can support */
maxProducts: number;
} }
/** /**