nc-planner/scripts/solver.js

37 lines
1.5 KiB
JavaScript

import { emitEvent } from "./events.js";
import { getPlannerCellDom, getPlannerDom } from "./planner.js";
import { findFullEntry } from "./ncpf-utils.js";
import { setSolverMetadata } from "./metadata.js";
export function resetSolver(design = undefined, designConfiguration) {
const planner = getPlannerDom();
if (design && designConfiguration) {
planner.dataset.type = design.type;
if (design.type === "nuclearcraft:overhaul_sfr") {
// design has coolant_recipe and block_recipes
const designCoolantRecipe = designConfiguration.coolant_recipes[design.coolant_recipe];
const fullCoolantRecipe = findFullEntry(
"coolant_recipes",
designCoolantRecipe,
{ configurationHint: design.type },
);
setSolverMetadata(planner, { coolant_recipe: fullCoolantRecipe });
const designBlockRecipes = design.block_recipes.flat(3);
for (let x = 0; x < design.dimensions[0]; x++) {
for (let y = 0; y < design.dimensions[1]; y++) {
for (let z = 0; z < design.dimensions[2]; z++) {
const block = designConfiguration.blocks[design.design[x][y][z]];
if (!block || !block.modules || !block.modules["ncpf:block_recipes"]) continue;
const blockRecipeIndex = designBlockRecipes.shift();
const blockRecipe = block.modules["ncpf:block_recipes"].recipes[blockRecipeIndex];
setSolverMetadata(getPlannerCellDom(x, y, z), { block_recipe: blockRecipe });
}
}
}
}
}
emitEvent("solver:reset:done");
}