diff --git a/parsing/gameData.json b/parsing/gameData.json index 03054f11..f9f0f8ca 100644 --- a/parsing/gameData.json +++ b/parsing/gameData.json @@ -13,6 +13,7 @@ "oilrefinery": 30, "packager": 10, "quantumencoder": 0.1, + "resourcesink": 30, "smeltermk1": 4 }, "items": { diff --git a/parsing/src/buildings.ts b/parsing/src/buildings.ts index 81532e33..ba8e9dae 100644 --- a/parsing/src/buildings.ts +++ b/parsing/src/buildings.ts @@ -39,8 +39,30 @@ function getProducingBuildings(data: any[]): string[] { return Array.from(producingBuildingsSet); // Convert Set to an array } -// Function to extract the power consumption for each producing building -function getPowerConsumptionForBuildings(data: any[], producingBuildings: string[]): { [key: string]: number } { +// For now this is just the 'Sink', but we may add more in the future +function getConsumingBuildings(data: any[]): string[] { + const consumingBuildingsSet = new Set(); + + data + .filter((entry: any) => entry.Classes) + .flatMap((entry: any) => entry.Classes) + .forEach((building: any) => { + if (building.ClassName && building.ClassName === "Build_ResourceSink_C") { + //This is just to make sure that it still exists, but we may grab more data from it in the future + + // Normalize the building name by removing "_C" and lowercasing it + let buildingName: string = building.ClassName.replace(/_C$/, '').toLowerCase(); + buildingName = buildingName.startsWith('build_') ? buildingName.replace('build_', '') : buildingName; + + consumingBuildingsSet.add(buildingName) + } + }); + + return Array.from(consumingBuildingsSet); // Convert Set to an array +} + +// Function to extract the power consumption for each building +function getPowerConsumptionForBuildings(data: any[], buildings: string[]): { [key: string]: number } { const buildingsPowerMap: { [key: string]: number } = {}; data @@ -53,7 +75,7 @@ function getPowerConsumptionForBuildings(data: any[], producingBuildings: string buildingName = buildingName.startsWith('build_') ? buildingName.replace('build_', '') : buildingName; // Only include power data if the building is in the producingBuildings list - if (producingBuildings.includes(buildingName)) { + if (buildings.includes(buildingName)) { buildingsPowerMap[buildingName] = parseFloat(building.mPowerConsumption) || 0; } } @@ -68,4 +90,6 @@ function getPowerConsumptionForBuildings(data: any[], producingBuildings: string return sortedMap; } -export { getProducingBuildings, getPowerConsumptionForBuildings }; \ No newline at end of file + + +export { getProducingBuildings, getConsumingBuildings, getPowerConsumptionForBuildings }; \ No newline at end of file diff --git a/parsing/src/processor.ts b/parsing/src/processor.ts index 5efbc642..7b9f5749 100644 --- a/parsing/src/processor.ts +++ b/parsing/src/processor.ts @@ -8,7 +8,7 @@ import {ParserPowerRecipe} from "./interfaces/ParserPowerRecipe"; import {ParserPart, ParserItemDataInterface} from "./interfaces/ParserPart"; import {getItems, fixItemNames, fixTurbofuel} from './parts'; import {getProductionRecipes, getPowerGeneratingRecipes} from './recipes'; -import {getProducingBuildings, getPowerConsumptionForBuildings} from './buildings'; +import {getProducingBuildings, getConsumingBuildings, getPowerConsumptionForBuildings} from './buildings'; // Function to detect if the file is UTF-16 async function isUtf16(inputFile: string): Promise { @@ -88,8 +88,11 @@ async function processFile( // Get an array of all buildings that produce something const producingBuildings = getProducingBuildings(data); + // Get an array of all buildings that consume something + const consumingBuildings = getConsumingBuildings(data); + // Get power consumption for the producing buildings - const buildings = getPowerConsumptionForBuildings(data, producingBuildings); + const buildings = getPowerConsumptionForBuildings(data, [ ...producingBuildings, ...consumingBuildings]); // Pass the producing buildings with power data to getRecipes to calculate perMin and powerPerProduct const recipes = getProductionRecipes(data, buildings); diff --git a/parsing/tests/parsing.spec.ts b/parsing/tests/parsing.spec.ts index 03b355e3..1281ce36 100644 --- a/parsing/tests/parsing.spec.ts +++ b/parsing/tests/parsing.spec.ts @@ -64,6 +64,14 @@ describe('common', () => { expect(results.recipes.length).toBe(291); }) + test('buildings test', () => { + //arrange + + //act + + //assert + expect(Object.keys(results.buildings).length).toBe(13); + }) test('buildings should generate correct data', () => { expect(Object.keys(results.buildings).length).toBe(14); @@ -83,6 +91,7 @@ describe('common', () => { packager: 10, quantumencoder: 0.1, // This has variable power consumption and is calculated in the recipe smeltermk1: 4, + resourcesink: 30, }) }) diff --git a/web/src/components/planner/Planner.vue b/web/src/components/planner/Planner.vue index fcda363c..2abcf298 100644 --- a/web/src/components/planner/Planner.vue +++ b/web/src/components/planner/Planner.vue @@ -254,6 +254,7 @@ ['quantumencoder', 'Quantum Encoder'], ['smeltermk1', 'Smelter'], ['waterExtractor', 'Water Extractor'], + ['resourcesink', 'Resource Sink'], ]) return buildingFriendly.get(building) || `UNKNOWN BUILDING: ${building}` diff --git a/web/src/components/planner/PlannerFactorySatisfaction.vue b/web/src/components/planner/PlannerFactorySatisfaction.vue index a36d3d35..d0c7a06a 100644 --- a/web/src/components/planner/PlannerFactorySatisfaction.vue +++ b/web/src/components/planner/PlannerFactorySatisfaction.vue @@ -49,7 +49,7 @@ - + diff --git a/web/src/components/planner/PlannerFactorySatisfactionBuildings.vue b/web/src/components/planner/PlannerFactorySatisfactionBuildings.vue index b7046455..18e1223b 100644 --- a/web/src/components/planner/PlannerFactorySatisfactionBuildings.vue +++ b/web/src/components/planner/PlannerFactorySatisfactionBuildings.vue @@ -1,10 +1,20 @@