From 5d4e09c085ac04268376f123559fdb261399fbb9 Mon Sep 17 00:00:00 2001 From: thepaperpilot Date: Thu, 22 Dec 2022 13:39:37 -0600 Subject: [PATCH 01/13] Basic day stuff --- src/data/Scene.vue | 2 ++ src/data/projEntry.tsx | 10 ++++++---- src/data/symbols/teddyBear.png | Bin 0 -> 50878 bytes 3 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 src/data/symbols/teddyBear.png diff --git a/src/data/Scene.vue b/src/data/Scene.vue index 993d11f..9456a18 100644 --- a/src/data/Scene.vue +++ b/src/data/Scene.vue @@ -68,6 +68,7 @@ />
+
@@ -91,6 +92,7 @@ import wrappingPaper from "./symbols/wrappingPaper.png"; import ribbons from "./symbols/ribbons.png"; import toys from "./symbols/truck.png"; import factory from "./symbols/gears.png"; +import advFactory from "./symbols/teddyBear.png"; defineProps<{ day: number; diff --git a/src/data/projEntry.tsx b/src/data/projEntry.tsx index a1346d7..e84acbf 100644 --- a/src/data/projEntry.tsx +++ b/src/data/projEntry.tsx @@ -52,6 +52,7 @@ import ribbonsSymbol from "./symbols/ribbons.png"; import workshopSymbol from "./symbols/sws.png"; import treeSymbol from "./symbols/tree.png"; import toysSymbol from "./symbols/truck.png"; +import advFactorySymbol from "./symbols/teddyBear.png"; import advManagementSymbol from "./symbols/workshopMansion.png"; import wrappingPaperSymbol from "./symbols/wrappingPaper.png"; @@ -453,10 +454,11 @@ export const main = createLayer("main", function (this: BaseLayer) { createDay(() => ({ day: 19, shouldNotify: false, - layer: null, // "toys3" - symbol: "", - story: "", - completedStory: "", + layer: "factory", + symbol: advFactorySymbol, + story: "Santa pulls you aside and says he thinks 3 unique toys might not be enough. You try to argue that they come in many color variations due to all the dyes you're using, but Santas insists you're going to need more. Well, suppose it's time to expand the factory!", + completedStory: + "Alright, admittedly 6 unique toys still feels like a bit of a compromise, but Santa seems pleased enough and with Christmas less than a week away, you're more than satisfied. Good Job!", masteredStory: "" })), createDay(() => ({ diff --git a/src/data/symbols/teddyBear.png b/src/data/symbols/teddyBear.png new file mode 100644 index 0000000000000000000000000000000000000000..4fa77656a8e75dadc9cb9491efafe405dfb66529 GIT binary patch literal 50878 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 IA9Q{G9}Y|VssI20 literal 0 HcmV?d00001 From fabdf60eb27d91e370d48142babdce2dc29543f5 Mon Sep 17 00:00:00 2001 From: thepaperpilot Date: Thu, 22 Dec 2022 13:40:04 -0600 Subject: [PATCH 02/13] Fix typo --- src/data/projEntry.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/projEntry.tsx b/src/data/projEntry.tsx index e84acbf..97ffcd9 100644 --- a/src/data/projEntry.tsx +++ b/src/data/projEntry.tsx @@ -446,7 +446,7 @@ export const main = createLayer("main", function (this: BaseLayer) { shouldNotify: false, layer: "factory", symbol: factorySymbol, - story: "Alright, so those toys were using incredibly amounts of resources to make. Fortunately, you happen to have access to a group of people with an uncanny knack for making stuff without actually consuming materials - Elves! Let's turn this workshop into a proper factory, and get them producing these toys by themselves.", + story: "Alright, so those toys were using incredibly large amounts of resources to make. Fortunately, you happen to have access to a group of people with an uncanny knack for making stuff without actually consuming materials - Elves! Let's turn this workshop into a proper factory, and get them producing these toys with miraculous efficiency!", completedStory: "That was a bit different than the usual elf training you are used to. But this factory seems very versatile, so you think it's a fair trade-off for needing to set things up a bit more. Good Job!", masteredStory: "" From 55e3c07e2c8cd0d9d4008f6b640e9ea1c74b330c Mon Sep 17 00:00:00 2001 From: thepaperpilot Date: Thu, 22 Dec 2022 14:20:48 -0600 Subject: [PATCH 03/13] Make components list handle overflowing --- src/data/layers/Factory.vue | 2 +- src/data/layers/factory.tsx | 65 +++++++++--------------------- src/data/layers/styles/factory.css | 55 ++++++++++++++++++------- 3 files changed, 62 insertions(+), 60 deletions(-) diff --git a/src/data/layers/Factory.vue b/src/data/layers/Factory.vue index 6d2c2b5..a3e3be7 100644 --- a/src/data/layers/Factory.vue +++ b/src/data/layers/Factory.vue @@ -26,7 +26,7 @@ onMounted(() => { position: absolute; top: 0; bottom: 0; - left: 148px; + left: 158px; right: 0; touch-action: none; } diff --git a/src/data/layers/factory.tsx b/src/data/layers/factory.tsx index ecf1ca1..033f5d6 100644 --- a/src/data/layers/factory.tsx +++ b/src/data/layers/factory.tsx @@ -625,9 +625,6 @@ const factory = createLayer(id, () => { }); const isMouseHoverShown = ref(false); - const isComponentHover = ref(false); - const whatIsHovered = ref(""); - const compSelected = ref("cursor"); const components: Persistent<{ [key: string]: FactoryComponent }> = persistent({}); const compInternalData: Record = {}; @@ -1193,13 +1190,6 @@ const factory = createLayer(id, () => { compHovered.value = undefined; } - function onComponentMouseEnter(name: FactoryCompNames | "") { - whatIsHovered.value = name; - isComponentHover.value = true; - } - function onComponentMouseLeave() { - isComponentHover.value = false; - } function onCompClick(name: FactoryCompNames) { compSelected.value = name; } @@ -1249,56 +1239,41 @@ const factory = createLayer(id, () => { // ------------------------------------------------------------------------------- Tabs const componentsList = jsx(() => { - const componentIndex = Math.floor( - Math.max(Object.keys(FACTORY_COMPONENTS).indexOf(whatIsHovered.value), 0) / 2 - ); return (
-
- {whatIsHovered.value === "" ? undefined : ( - <> -

- {FACTORY_COMPONENTS[whatIsHovered.value].name + " "} - -

-
- {unref(FACTORY_COMPONENTS[whatIsHovered.value].description)} - {FACTORY_COMPONENTS[whatIsHovered.value].energyCost ?? 0 ? ( - <> -
- Energy Consumption:{" "} - {formatWhole( - FACTORY_COMPONENTS[whatIsHovered.value].energyCost ?? 0 - )} - - ) : null} - - )} -
{Object.entries(FACTORY_COMPONENTS).map(value => { const key = value[0] as FactoryCompNames; const item = value[1]; return ( -
+
onComponentMouseEnter(key)} - onMouseleave={() => onComponentMouseLeave()} onClick={() => onCompClick(key)} /> {item.extraImage == null ? null : ( )} +
+

+ {FACTORY_COMPONENTS[key].name + " "} + +

+
+ {unref(FACTORY_COMPONENTS[key].description)} + {FACTORY_COMPONENTS[key].energyCost ?? 0 ? ( + <> +
+ Energy Consumption:{" "} + {formatWhole(FACTORY_COMPONENTS[key].energyCost ?? 0)} + + ) : null} +
); })} diff --git a/src/data/layers/styles/factory.css b/src/data/layers/styles/factory.css index 01fc974..3d5f4c7 100644 --- a/src/data/layers/styles/factory.css +++ b/src/data/layers/styles/factory.css @@ -99,17 +99,18 @@ top: 0; left: 0; bottom: 0; - width: 148px; + width: 158px; z-index: 1; } .comp-info { position: absolute; - right: 10px; + top: 0; + right: -10px; padding: 5px 10px; width: max-content; - max-width: 300px; + max-width: 320px; background: var(--background); border-radius: var(--border-radius); @@ -123,7 +124,10 @@ z-index: -1; } -.comp-info.active { +.comp-list > .comp:nth-child(2n - 1) .comp-info { + right: -85px; +} +.comp-list > .comp:hover .comp-info { transform: translateX(calc(20px + 100%)); } @@ -131,28 +135,51 @@ width: 100%; height: 100%; display: flex; - border-right: solid 2px var(--locked); flex-wrap: wrap; justify-content: space-evenly; align-items: flex-start; align-content: flex-start; - background: var(--raised-background); + overflow-y: overlay; + overflow-x: hidden; + padding-right: 500px; + pointer-events: none; } -.comp-list::before { + +.comp-list::after { content: ""; - display: block; position: absolute; - top: 140px; - height: 2px; - left: 10px; - right: 10px; - background-color: var(--foreground); + border-right: solid 2px var(--locked); + background: var(--raised-background); + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: -1; } -.comp-list > div { + +.comp-list > .comp { position: relative; width: 50px; height: 50px; margin: 10px; + pointer-events: all; +} + +.comp-list > div:nth-child(3)::after, +.comp-list > div:nth-child(4)::after { + content: ""; + position: absolute; + top: calc(100% + 10px); + height: 2px; + background-color: var(--foreground); + left: 0; + right: 0; +} +.comp-list > div:nth-child(3)::after { + right: -50px; +} +.comp-list > div:nth-child(4)::after { + left: -50px; } .comp-list > img.selected:not(.producedItem) { transform: translate(-5px, -5px); From e8124b94c3765636ee85af0deaf36eac4bbd6e2f Mon Sep 17 00:00:00 2001 From: circle-gon <97845741+circle-gon@users.noreply.github.com> Date: Thu, 22 Dec 2022 16:52:56 -0500 Subject: [PATCH 04/13] change seconds to tick --- src/data/layers/factory.tsx | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/data/layers/factory.tsx b/src/data/layers/factory.tsx index 033f5d6..f1e92f7 100644 --- a/src/data/layers/factory.tsx +++ b/src/data/layers/factory.tsx @@ -267,7 +267,7 @@ const factory = createLayer(id, () => { key: "1", name: "Wood Machine", type: "processor", - description: "Produces 1 wood every 1 second.", + description: "Produces 1 wood per tick.", energyCost: 10, tick: 1, outputs: { @@ -282,7 +282,7 @@ const factory = createLayer(id, () => { key: "2", name: "Cloth Machine", type: "processor", - description: "Produces 1 cloth every 1 second.", + description: "Produces 1 cloth per tick.", energyCost: 10, tick: 1, outputs: { @@ -297,7 +297,7 @@ const factory = createLayer(id, () => { key: "3", name: "Dye Machine", type: "processor", - description: "Produces 1 dye every 1 second.", + description: "Produces 1 dye per tick.", energyCost: 10, tick: 1, outputs: { @@ -312,7 +312,7 @@ const factory = createLayer(id, () => { key: "4", name: "Metal Machine", type: "processor", - description: "Produces 1 metal every 1 second.", + description: "Produces 1 metal per tick.", energyCost: 10, tick: 1, outputs: { @@ -327,7 +327,7 @@ const factory = createLayer(id, () => { key: "5", name: "Plastic Machine", type: "processor", - description: "Produces 1 plastic every 1 second.", + description: "Produces 1 plastic per tick.", energyCost: 10, tick: 1, outputs: { @@ -341,7 +341,7 @@ const factory = createLayer(id, () => { key: "shift+1", name: "Sawmill", type: "processor", - description: "Turns 1 wood into 1 plank every second.", + description: "Turns 1 wood into 1 plank per tick.", energyCost: 2, tick: 1, inputs: { @@ -360,7 +360,7 @@ const factory = createLayer(id, () => { key: "shift+2", name: "Thread Spinner", type: "processor", - description: "Turns 1 cloth into 1 thread every second.", + description: "Turns 1 cloth into 1 thread per tick.", energyCost: 2, tick: 1, inputs: { @@ -384,7 +384,7 @@ const factory = createLayer(id, () => { () => `Turns 1 plastic into ${ toys.milestones.milestone5.earned.value ? "2 wheels" : "1 wheel" - } every second.` + } per tick.` ), energyCost: 2, tick: 1, @@ -404,7 +404,7 @@ const factory = createLayer(id, () => { key: "ctrl+shift+1", name: "Wooden Block Maker", type: "processor", - description: "Turns 1 plank into 1 wooden block every second.", + description: "Turns 1 plank into 1 wooden block per tick.", energyCost: 20, tick: 1, inputs: { @@ -424,7 +424,7 @@ const factory = createLayer(id, () => { key: "ctrl+shift+2", name: "Clothes Maker", type: "processor", - description: "Turns 2 threads, 3 cloth, and 1 dye into 1 clothes every second.", + description: "Turns 2 threads, 3 cloth, and 1 dye into 1 clothes per tick.", energyCost: 20, tick: 1, inputs: { @@ -450,7 +450,7 @@ const factory = createLayer(id, () => { key: "ctrl+shift+3", name: "Trucks Maker", type: "processor", - description: "Turns 2 metal and 4 wheels into 1 truck every second.", + description: "Turns 2 metal and 4 wheels into 1 truck per tick.", energyCost: 20, tick: 1, inputs: { From 156ed9268a5c0fea2246fc1221e63c6afbaacd9d Mon Sep 17 00:00:00 2001 From: thepaperpilot Date: Thu, 22 Dec 2022 15:51:43 -0600 Subject: [PATCH 05/13] Implemented dynamic factory size --- src/data/layers/factory.tsx | 64 +++++++++++++++++++++++++------------ 1 file changed, 43 insertions(+), 21 deletions(-) diff --git a/src/data/layers/factory.tsx b/src/data/layers/factory.tsx index f1e92f7..7f0f53d 100644 --- a/src/data/layers/factory.tsx +++ b/src/data/layers/factory.tsx @@ -107,11 +107,6 @@ function getDirection(dir: Direction) { return "v"; } } - -const factorySize = { - width: 7, - height: 7 -}; const blockSize = 50; const factory = createLayer(id, () => { @@ -151,6 +146,14 @@ const factory = createLayer(id, () => { })) ]); const computedTickRate = computed(() => tickRate.apply(1)); + const factorySize = createSequentialModifier(() => [ + createAdditiveModifier(() => ({ + addend: expandFactory.amount, + description: "Expand Factory", + enabled: () => Decimal.gt(expandFactory.amount.value, 0) + })) + ]); + const computedFactorySize = computed(() => new Decimal(factorySize.apply(7)).toNumber()); const energyBar = createBar(() => ({ width: 680, @@ -671,6 +674,11 @@ const factory = createLayer(id, () => { const trainedElves = createResource(sumElves, "trained elves"); const elvesEffect = computed(() => Decimal.add(trainedElves.value, 1).log10().add(1)); + const expandFactory = createBuyable(() => ({ + canPurchase: true + })); + const factoryBuyables = { expandFactory }; + // pixi // load every sprite here so pixi doesn't complain about loading multiple times @@ -709,16 +717,20 @@ const factory = createLayer(id, () => { app.stage.addChild(spriteContainer); const floorGraphics = new Graphics(); - floorGraphics.beginFill(0x70645d); - floorGraphics.drawRect( - (-factorySize.width * blockSize) / 2, - (-factorySize.height * blockSize) / 2, - factorySize.width * blockSize, - factorySize.height * blockSize - ); - floorGraphics.endFill(); spriteContainer.addChild(floorGraphics); + watchEffect(() => { + floorGraphics.clear(); + floorGraphics.beginFill(0x70645d); + floorGraphics.drawRect( + (-computedFactorySize.value * blockSize) / 2, + (-computedFactorySize.value * blockSize) / 2, + computedFactorySize.value * blockSize, + computedFactorySize.value * blockSize + ); + floorGraphics.endFill(); + }); + await assetsLoading; if (Array.isArray(components.value)) { @@ -956,16 +968,23 @@ const factory = createLayer(id, () => { y: number, data: Partial & { type: BuildableCompName } ) { - if (x < -factorySize.width / 2 || x >= factorySize.width / 2) return; - if (y < -factorySize.height / 2 || y >= factorySize.height / 2) return; + if (x < -computedFactorySize.value / 2 || x >= computedFactorySize.value / 2) return; + if (y < -computedFactorySize.value / 2 || y >= computedFactorySize.value / 2) return; const factoryBaseData = FACTORY_COMPONENTS[data.type]; if (factoryBaseData == undefined) return; const sheet = Assets.get(factoryBaseData.imageSrc); const sprite = new Sprite(sheet); - sprite.x = x * blockSize; - sprite.y = y * blockSize; + watchEffect(() => { + if (computedFactorySize.value % 2 === 0) { + sprite.x = (x + 0.5) * blockSize; + sprite.y = (y + 0.5) * blockSize; + } else { + sprite.x = x * blockSize; + sprite.y = y * blockSize; + } + }); sprite.width = blockSize; sprite.height = blockSize; sprite.anchor.x = 0.5; @@ -1104,12 +1123,12 @@ const factory = createLayer(id, () => { // the maximum you can see currently // total size of blocks - current size = amount you should move mapOffset.x = Math.min( - Math.max(mapOffset.x, (-factorySize.width + 1) / 2), - (factorySize.width + 1) / 2 + Math.max(mapOffset.x, (-computedFactorySize.value + 1) / 2), + (computedFactorySize.value + 1) / 2 ); mapOffset.y = Math.min( - Math.max(mapOffset.y, (-factorySize.height + 1) / 2), - (factorySize.height + 1) / 2 + Math.max(mapOffset.y, (-computedFactorySize.value + 1) / 2), + (computedFactorySize.value + 1) / 2 ); } if (!pointerDown.value && !pointerDrag.value) { @@ -1395,6 +1414,8 @@ const factory = createLayer(id, () => { )}x`} /> {renderRow(...Object.values(elfBuyables))} + + {renderRow(...Object.values(factoryBuyables))} )) })), @@ -1503,6 +1524,7 @@ const factory = createLayer(id, () => { components, elfBuyables, tabs, + factoryBuyables, generalTabCollapsed, hotkeys, display: jsx(() => ( From 2c5bfdb7f389ac70047db9ba9b122e44ec22c71c Mon Sep 17 00:00:00 2001 From: thepaperpilot Date: Thu, 22 Dec 2022 16:01:19 -0600 Subject: [PATCH 06/13] Added new toys and progress stuff --- src/data/layers/factory.tsx | 312 ++++++++++++++++++++++++++++- src/data/layers/styles/factory.css | 3 + 2 files changed, 310 insertions(+), 5 deletions(-) diff --git a/src/data/layers/factory.tsx b/src/data/layers/factory.tsx index 7f0f53d..530ea04 100644 --- a/src/data/layers/factory.tsx +++ b/src/data/layers/factory.tsx @@ -31,9 +31,29 @@ import { Direction } from "util/common"; import { ProcessedComputable } from "util/computed"; import { render, renderRow } from "util/vue"; import { computed, ComputedRef, reactive, ref, unref, watchEffect } from "vue"; +import _cloth from "../symbols/cloth.png"; +import _dye from "../symbols/dyes.png"; +import _metal from "../symbols/metal.png"; +import _plastic from "../symbols/plastic.png"; import coal from "./coal"; +import { + default as _bear, + default as _circuitBoard, + default as _console, + default as _stuffing +} from "./factory-components/bear.svg"; +import { + default as _bearMaker, + default as _circuitBoardMaker, + default as _consoleMaker, + default as _stuffingMaker +} from "./factory-components/bearmaker.svg"; import _block from "./factory-components/block.svg"; import _blockMaker from "./factory-components/blockmaker.svg"; +import _bucket from "./factory-components/bucket.svg"; +import _bucketMaker from "./factory-components/bucketmaker.svg"; +import _bucketShovel from "./factory-components/bucketShovel.svg"; +import _bucketShovelMaker from "./factory-components/bucketShovelmaker.svg"; import _clothes from "./factory-components/clothes.svg"; import _clothesMaker from "./factory-components/clothesmaker.svg"; import _conveyor from "./factory-components/conveyor.png"; @@ -45,10 +65,11 @@ import _rotateLeft from "./factory-components/rotateLeft.svg"; import _rotateRight from "./factory-components/rotateRight.svg"; import _plankMaker from "./factory-components/sawmill.svg"; import _shed from "./factory-components/shed.svg"; -import _metal from "../symbols/metal.png"; -import _plastic from "../symbols/plastic.png"; -import _cloth from "../symbols/cloth.png"; -import _dye from "../symbols/dyes.png"; +import { default as _button, default as _shovel } from "./factory-components/shovel.svg"; +import { + default as _buttonMaker, + default as _shovelMaker +} from "./factory-components/shovelmaker.svg"; import _thread from "./factory-components/thread.svg"; import _threadMaker from "./factory-components/threadmaker.svg"; import _truck from "./factory-components/truck.svg"; @@ -62,10 +83,12 @@ import toys from "./toys"; const id = "factory"; -// what is the actual day? const day = 18; +const advancedDay = 19; +const presentsDay = 20; const toyGoal = 750; +const advancedToyGoal = 2000; // 20x20 block size // TODO: unhardcode stuff @@ -114,6 +137,10 @@ const factory = createLayer(id, () => { const name = "The Factory"; const color = "grey"; + const bears = createResource(0, "teddy bears"); + const bucketAndShovels = createResource(0, "shovel and pails"); + const consoles = createResource(0, "consoles"); + const energy = createSequentialModifier(() => [ createAdditiveModifier(() => ({ addend: () => Decimal.add(1, coal.coal.value).log10(), @@ -402,6 +429,109 @@ const factory = createLayer(id, () => { } } } as FactoryComponentDeclaration, + button: { + imageSrc: _buttonMaker, + key: "shift+4", + name: "Button Maker", + type: "processor", + description: "Turns 1 plastic into 2 buttons every second.", + energyCost: 2, + tick: 1, + inputs: { + plastic: { + amount: 1 + } + }, + outputs: { + buttons: { + amount: 2 + } + }, + visible: main.days[advancedDay - 1].opened + } as FactoryComponentDeclaration, + stuffing: { + imageSrc: _stuffingMaker, + key: "shift+5", + name: "Cloth Shredder", + type: "processor", + description: "Turns 1 cloth into 1 stuffing every second.", + energyCost: 2, + tick: 1, + inputs: { + cloth: { + amount: 1 + } + }, + outputs: { + stuffing: { + amount: 1 + } + }, + visible: main.days[advancedDay - 1].opened + } as FactoryComponentDeclaration, + shovel: { + imageSrc: _shovelMaker, + key: "shift+6", + name: "Shovel Maker", + type: "processor", + description: "Turns 2 plastic into 1 shovel every second.", + energyCost: 2, + tick: 1, + inputs: { + plastic: { + amount: 2 + } + }, + outputs: { + shovel: { + amount: 1 + } + }, + visible: main.days[advancedDay - 1].opened + } as FactoryComponentDeclaration, + bucket: { + imageSrc: _bucketMaker, + key: "shift+7", + name: "Bucket Maker", + type: "processor", + description: "Turns 3 plastic into 1 bucket every second.", + energyCost: 2, + tick: 1, + inputs: { + plastic: { + amount: 3 + } + }, + outputs: { + shovel: { + amount: 1 + } + }, + visible: main.days[advancedDay - 1].opened + } as FactoryComponentDeclaration, + circuitBoard: { + imageSrc: _circuitBoardMaker, + key: "shift+8", + name: "Circuit Board Manufacturer", + type: "processor", + description: "Turns 1 metal and 1 plastic into 1 circuit board every second.", + energyCost: 2, + tick: 1, + inputs: { + metal: { + amount: 1 + }, + plastic: { + amount: 1 + } + }, + outputs: { + circuitBoard: { + amount: 1 + } + }, + visible: main.days[advancedDay - 1].opened + } as FactoryComponentDeclaration, blocks: { imageSrc: _blockMaker, key: "ctrl+shift+1", @@ -470,6 +600,89 @@ const factory = createLayer(id, () => { resource: toys.trucks } } + } as FactoryComponentDeclaration, + bear: { + imageSrc: _bearMaker, + key: "ctrl+shift+4", + name: "Teddy Bear Maker", + type: "processor", + description: + "Turns 1 thread, 1 stuffing, 1 dye, and 3 buttons into 1 teddy bear every second.", + energyCost: 20, + tick: 1, + inputs: { + thread: { + amount: 1 + }, + stuffing: { + amount: 1 + }, + dye: { + amount: 1 + }, + buttons: { + amount: 3 + } + }, + outputs: { + bear: { + amount: 1, + resource: bears + } + }, + visible: main.days[advancedDay - 1].opened + } as FactoryComponentDeclaration, + bucketShovel: { + imageSrc: _bucketShovelMaker, + key: "ctrl+shift+5", + name: "Shovel and Pail Maker", + type: "processor", + description: "Turns 1 bucket and 1 shovel into 1 shovel and pail every second.", + energyCost: 20, + tick: 1, + inputs: { + bucket: { + amount: 1 + }, + shovel: { + amount: 1 + } + }, + outputs: { + shovelBucket: { + amount: 1, + resource: bucketAndShovels + } + }, + visible: main.days[advancedDay - 1].opened + } as FactoryComponentDeclaration, + console: { + imageSrc: _consoleMaker, + key: "ctrl+shift+6", + name: "Game Console Maker", + type: "processor", + description: + "Turns 1 metal, 3 plastic, and 1 circuit board into 1 game console every second.", + energyCost: 20, + tick: 1, + inputs: { + metal: { + amount: 1 + }, + plastic: { + amount: 3 + }, + circuitBoard: { + amount: 1 + } + }, + outputs: { + console: { + amount: 1, + resource: consoles + } + }, + visible: main.days[advancedDay - 1].opened } as FactoryComponentDeclaration } as const; const RESOURCES = { @@ -507,6 +720,26 @@ const factory = createLayer(id, () => { name: "Wheels", imageSrc: _wheel }, + buttons: { + name: "Buttons", + imageSrc: _button + }, + stuffing: { + name: "Stuffing", + imageSrc: _stuffing + }, + shovel: { + name: "Shovel", + imageSrc: _shovel + }, + bucket: { + name: "Bucket", + imageSrc: _bucket + }, + circuitBoard: { + name: "Circuit Board", + imageSrc: _circuitBoard + }, // Toys block: { name: "Wooden Blocks", @@ -519,6 +752,18 @@ const factory = createLayer(id, () => { trucks: { name: "Trucks", imageSrc: _truck + }, + bear: { + name: "Teddy Bear", + imageSrc: _bear + }, + shovelBucket: { + name: "Shovel and Pail", + imageSrc: _bucketShovel + }, + console: { + name: "Game Console", + imageSrc: _console } } as const; @@ -578,6 +823,7 @@ const factory = createLayer(id, () => { type: "command" | "conveyor" | "processor"; description: ProcessedComputable; energyCost?: number; + visible?: ProcessedComputable; /** amount it consumes */ inputs?: Stock; @@ -1264,6 +1510,9 @@ const factory = createLayer(id, () => { {Object.entries(FACTORY_COMPONENTS).map(value => { const key = value[0] as FactoryCompNames; const item = value[1]; + if (unref(item.visible) === false) { + return null; + } return (
{
{main.day.value === day ? `Reach ${format(toyGoal)} for each toy to complete the day` + : main.day.value === advancedDay + ? `Reach ${format( + advancedToyGoal + )} for each toy to complete the day` : `${name} Complete!`}{" "} -{" "}