UI work on corps

This commit is contained in:
Olivier Gagnon 2021-09-09 00:34:13 -04:00
parent a2aaf6bd2e
commit c97fece747
8 changed files with 107 additions and 63 deletions

File diff suppressed because one or more lines are too long

@ -1,2 +1,2 @@
!function(n){function t(t){for(var e,i,f=t[0],c=t[1],l=t[2],a=0,s=[];a<f.length;a++)i=f[a],Object.prototype.hasOwnProperty.call(u,i)&&u[i]&&s.push(u[i][0]),u[i]=0;for(e in c)Object.prototype.hasOwnProperty.call(c,e)&&(n[e]=c[e]);for(p&&p(t);s.length;)s.shift()();return r.push.apply(r,l||[]),o()}function o(){for(var n,t=0;t<r.length;t++){for(var o=r[t],e=!0,f=1;f<o.length;f++){var c=o[f];0!==u[c]&&(e=!1)}e&&(r.splice(t--,1),n=i(i.s=o[0]))}return n}var e={},u={2:0},r=[];function i(t){if(e[t])return e[t].exports;var o=e[t]={i:t,l:!1,exports:{}};return n[t].call(o.exports,o,o.exports,i),o.l=!0,o.exports}i.m=n,i.c=e,i.d=function(n,t,o){i.o(n,t)||Object.defineProperty(n,t,{enumerable:!0,get:o})},i.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},i.t=function(n,t){if(1&t&&(n=i(n)),8&t)return n;if(4&t&&"object"==typeof n&&n&&n.__esModule)return n;var o=Object.create(null);if(i.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:n}),2&t&&"string"!=typeof n)for(var e in n)i.d(o,e,function(t){return n[t]}.bind(null,e));return o},i.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return i.d(t,"a",t),t},i.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},i.p="";var f=window.webpackJsonp=window.webpackJsonp||[],c=f.push.bind(f);f.push=t,f=f.slice();for(var l=0;l<f.length;l++)t(f[l]);var p=c;r.push([902,0]),o()}({902:function(n,t,o){"use strict";o.r(t);o(903),o(905),o(907),o(909),o(911),o(913),o(915),o(917),o(919),o(921),o(923),o(925),o(927),o(929),o(931),o(933),o(935),o(937),o(939),o(941),o(943),o(945),o(947),o(949),o(951),o(953),o(955),o(957),o(959),o(961),o(963),o(965)},905:function(n,t,o){},907:function(n,t,o){},909:function(n,t,o){},911:function(n,t,o){},913:function(n,t,o){},915:function(n,t,o){},917:function(n,t,o){},919:function(n,t,o){},921:function(n,t,o){},923:function(n,t,o){},925:function(n,t,o){},927:function(n,t,o){},929:function(n,t,o){},931:function(n,t,o){},933:function(n,t,o){},935:function(n,t,o){},937:function(n,t,o){},939:function(n,t,o){},941:function(n,t,o){},943:function(n,t,o){},945:function(n,t,o){},947:function(n,t,o){},949:function(n,t,o){},951:function(n,t,o){},953:function(n,t,o){},955:function(n,t,o){},957:function(n,t,o){},959:function(n,t,o){},961:function(n,t,o){},963:function(n,t,o){},965:function(n,t,o){}}); !function(n){function t(t){for(var e,i,f=t[0],c=t[1],l=t[2],a=0,s=[];a<f.length;a++)i=f[a],Object.prototype.hasOwnProperty.call(u,i)&&u[i]&&s.push(u[i][0]),u[i]=0;for(e in c)Object.prototype.hasOwnProperty.call(c,e)&&(n[e]=c[e]);for(p&&p(t);s.length;)s.shift()();return r.push.apply(r,l||[]),o()}function o(){for(var n,t=0;t<r.length;t++){for(var o=r[t],e=!0,f=1;f<o.length;f++){var c=o[f];0!==u[c]&&(e=!1)}e&&(r.splice(t--,1),n=i(i.s=o[0]))}return n}var e={},u={2:0},r=[];function i(t){if(e[t])return e[t].exports;var o=e[t]={i:t,l:!1,exports:{}};return n[t].call(o.exports,o,o.exports,i),o.l=!0,o.exports}i.m=n,i.c=e,i.d=function(n,t,o){i.o(n,t)||Object.defineProperty(n,t,{enumerable:!0,get:o})},i.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},i.t=function(n,t){if(1&t&&(n=i(n)),8&t)return n;if(4&t&&"object"==typeof n&&n&&n.__esModule)return n;var o=Object.create(null);if(i.r(o),Object.defineProperty(o,"default",{enumerable:!0,value:n}),2&t&&"string"!=typeof n)for(var e in n)i.d(o,e,function(t){return n[t]}.bind(null,e));return o},i.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return i.d(t,"a",t),t},i.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},i.p="";var f=window.webpackJsonp=window.webpackJsonp||[],c=f.push.bind(f);f.push=t,f=f.slice();for(var l=0;l<f.length;l++)t(f[l]);var p=c;r.push([903,0]),o()}({903:function(n,t,o){"use strict";o.r(t);o(904),o(906),o(908),o(910),o(912),o(914),o(916),o(918),o(920),o(922),o(924),o(926),o(928),o(930),o(932),o(934),o(936),o(938),o(940),o(942),o(944),o(946),o(948),o(950),o(952),o(954),o(956),o(958),o(960),o(962),o(964),o(966)},906:function(n,t,o){},908:function(n,t,o){},910:function(n,t,o){},912:function(n,t,o){},914:function(n,t,o){},916:function(n,t,o){},918:function(n,t,o){},920:function(n,t,o){},922:function(n,t,o){},924:function(n,t,o){},926:function(n,t,o){},928:function(n,t,o){},930:function(n,t,o){},932:function(n,t,o){},934:function(n,t,o){},936:function(n,t,o){},938:function(n,t,o){},940:function(n,t,o){},942:function(n,t,o){},944:function(n,t,o){},946:function(n,t,o){},948:function(n,t,o){},950:function(n,t,o){},952:function(n,t,o){},954:function(n,t,o){},956:function(n,t,o){},958:function(n,t,o){},960:function(n,t,o){},962:function(n,t,o){},964:function(n,t,o){},966:function(n,t,o){}});
//# sourceMappingURL=engineStyle.bundle.js.map //# sourceMappingURL=engineStyle.bundle.js.map

30
dist/vendor.bundle.js vendored

File diff suppressed because one or more lines are too long

@ -95,9 +95,13 @@ export function IndustryOverview(props: IProps): React.ReactElement {
}); });
} }
function shouldFlash(): boolean {
return Object.keys(props.division.products).length === 0;
}
return ( return (
<button <button
className={className} className={className + (shouldFlash() ? " flashing-button" : "")}
onClick={openMakeProductPopup} onClick={openMakeProductPopup}
style={buttonStyle} style={buttonStyle}
disabled={props.corp.funds.lt(0)} disabled={props.corp.funds.lt(0)}

@ -0,0 +1,29 @@
import React from "react";
import { IIndustry } from "../IIndustry";
import { MathComponent } from "mathjax-react";
interface IProps {
division: IIndustry;
}
export function IndustryProductEquation(props: IProps): React.ReactElement {
const reqs = [];
for (const reqMat of Object.keys(props.division.reqMats)) {
const reqAmt = props.division.reqMats[reqMat];
if (reqAmt === undefined) continue;
reqs.push(String.raw`${reqAmt}\text{ }${reqMat}`);
}
const prod = props.division.prodMats.slice();
if (props.division.makesProducts) {
prod.push(props.division.type);
}
return (
<span className="text">
<MathComponent
display={false}
tex={reqs.join("+") + String.raw`\Rightarrow` + prod.map((p) => String.raw`1\text{ }${p}`).join("+")}
/>
</span>
);
}

@ -28,6 +28,7 @@ import { IPlayer } from "../../PersonObjects/IPlayer";
import { Money } from "../../ui/React/Money"; import { Money } from "../../ui/React/Money";
import { MoneyCost } from "./MoneyCost"; import { MoneyCost } from "./MoneyCost";
import { isRelevantMaterial } from "./Helpers"; import { isRelevantMaterial } from "./Helpers";
import { IndustryProductEquation } from "./IndustryProductEquation";
interface IProductProps { interface IProductProps {
corp: ICorporation; corp: ICorporation;
@ -369,6 +370,10 @@ function MaterialComponent(props: IMaterialProps): React.ReactElement {
}); });
} }
function shouldFlash(): boolean {
return props.division.prodMats.includes(props.mat.name) && !mat.sllman[0];
}
return ( return (
<div className={"cmpy-mgmt-warehouse-material-div"}> <div className={"cmpy-mgmt-warehouse-material-div"}>
<div style={{ display: "inline-block" }}> <div style={{ display: "inline-block" }}>
@ -401,7 +406,11 @@ function MaterialComponent(props: IMaterialProps): React.ReactElement {
</div> </div>
<div style={{ display: "inline-block" }}> <div style={{ display: "inline-block" }}>
<button className={purchaseButtonClass} onClick={openPurchaseMaterialPopup}> <button
className={purchaseButtonClass}
onClick={openPurchaseMaterialPopup}
disabled={props.warehouse.smartSupplyEnabled && Object.keys(props.division.reqMats).includes(props.mat.name)}
>
{purchaseButtonText} {purchaseButtonText}
{tutorial && ( {tutorial && (
<span className={"tooltiptext"}>Purchase your required materials to get production started!</span> <span className={"tooltiptext"}>Purchase your required materials to get production started!</span>
@ -415,7 +424,8 @@ function MaterialComponent(props: IMaterialProps): React.ReactElement {
)} )}
<br /> <br />
<button className={"std-button"} onClick={openSellMaterialPopup}> {/* TODO: add flashing here */}
<button className={`std-button${shouldFlash() ? " flashing-button" : ""}`} onClick={openSellMaterialPopup}>
{sellButtonText} {sellButtonText}
</button> </button>
@ -579,11 +589,12 @@ export function IndustryWarehouse(props: IProps): React.ReactElement {
Upgrade Warehouse Size - <MoneyCost money={sizeUpgradeCost} corp={props.corp} /> Upgrade Warehouse Size - <MoneyCost money={sizeUpgradeCost} corp={props.corp} />
</button> </button>
<p>{generalReqsText}. The exact requirements for production are:</p> <p>This industry uses the following equation for it's production: </p>
<br />
<br />
<IndustryProductEquation division={props.division} />
<br /> <br />
{ratioLines}
<br /> <br />
<p>{createdItemsText}</p>
<p> <p>
To get started with production, purchase your required materials or import them from another of your company's To get started with production, purchase your required materials or import them from another of your company's
divisions. divisions.

@ -57,7 +57,7 @@ export function SmartSupplyPopup(props: IProps): React.ReactElement {
const mats = []; const mats = [];
for (const matName in props.warehouse.materials) { for (const matName in props.warehouse.materials) {
if (!(props.warehouse.materials[matName] instanceof Material)) continue; if (!(props.warehouse.materials[matName] instanceof Material)) continue;
if (!isRelevantMaterial(matName, props.division)) continue; if (!Object.keys(props.division.reqMats).includes(matName)) continue;
mats.push(<Leftover key={matName} warehouse={props.warehouse} matName={matName} />); mats.push(<Leftover key={matName} warehouse={props.warehouse} matName={matName} />);
} }

@ -4479,44 +4479,44 @@ function NetscriptFunctions(workerScript) {
}, },
}, // End Bladeburner }, // End Bladeburner
corporation: { // corporation: {
expandIndustry: function (industryName, divisionName) { // expandIndustry: function (industryName, divisionName) {
NewIndustry(Player.corporation, industryName, divisionName); // NewIndustry(Player.corporation, industryName, divisionName);
}, // },
expandCity: function (divisionName, cityName) { // expandCity: function (divisionName, cityName) {
const division = getDivision(divisionName); // const division = getDivision(divisionName);
NewCity(Player.corporation, division, cityName); // NewCity(Player.corporation, division, cityName);
}, // },
unlockUpgrade: function (upgradeName) { // unlockUpgrade: function (upgradeName) {
const upgrade = Object.values(CorporationUnlockUpgrades).find((upgrade) => upgrade[2] === upgradeName); // const upgrade = Object.values(CorporationUnlockUpgrades).find((upgrade) => upgrade[2] === upgradeName);
if (upgrade === undefined) throw new Error("No upgrade named '${upgradeName}'"); // if (upgrade === undefined) throw new Error("No upgrade named '${upgradeName}'");
UnlockUpgrade(Player.corporation, upgrade); // UnlockUpgrade(Player.corporation, upgrade);
}, // },
levelUpgrade: function (upgradeName) { // levelUpgrade: function (upgradeName) {
const upgrade = Object.values(CorporationUpgrades).find((upgrade) => upgrade[4] === upgradeName); // const upgrade = Object.values(CorporationUpgrades).find((upgrade) => upgrade[4] === upgradeName);
if (upgrade === undefined) throw new Error("No upgrade named '${upgradeName}'"); // if (upgrade === undefined) throw new Error("No upgrade named '${upgradeName}'");
LevelUpgrade(Player.corporation, upgrade); // LevelUpgrade(Player.corporation, upgrade);
}, // },
issueDividends: function (percent) { // issueDividends: function (percent) {
IssueDividends(Player.corporation, percent); // IssueDividends(Player.corporation, percent);
}, // },
sellMaterial: function (divisionName, cityName, materialName, amt, price) { // sellMaterial: function (divisionName, cityName, materialName, amt, price) {
const material = getMaterial(divisionName, cityName, materialName); // const material = getMaterial(divisionName, cityName, materialName);
SellMaterial(material, amt, price); // SellMaterial(material, amt, price);
}, // },
sellProduct: function (divisionName, cityName, productName, amt, price, all) { // sellProduct: function (divisionName, cityName, productName, amt, price, all) {
const product = getProduct(divisionName, productName); // const product = getProduct(divisionName, productName);
SellProduct(product, cityName, amt, price, all); // SellProduct(product, cityName, amt, price, all);
}, // },
setSmartSupply: function (divisionName, cityName, enabled) { // setSmartSupply: function (divisionName, cityName, enabled) {
const warehouse = getWarehouse(divisionName, cityName); // const warehouse = getWarehouse(divisionName, cityName);
SetSmartSupply(warehouse, enabled); // SetSmartSupply(warehouse, enabled);
}, // },
buyMaterial: function (divisionName, cityName, materialName, amt) { // buyMaterial: function (divisionName, cityName, materialName, amt) {
const material = getMaterial(divisionName, cityName, materialName); // const material = getMaterial(divisionName, cityName, materialName);
BuyMaterial(material, amt); // BuyMaterial(material, amt);
}, // },
}, // End Corporation API // }, // End Corporation API
// Coding Contract API // Coding Contract API
codingcontract: { codingcontract: {