73 lines
2.5 KiB
JavaScript
73 lines
2.5 KiB
JavaScript
import { configuration } from "./configuration.js";
|
|
import { emitEvent } from "./events.js";
|
|
import { registerLoadCallback } from "./main.js";
|
|
import { getPlannerCellDom, getPlannerDom } from "./planner.js";
|
|
import { findFullEntry } from "./ncpf-utils.js";
|
|
|
|
registerLoadCallback(() => {
|
|
});
|
|
|
|
const solverMetadata = {};
|
|
let solverMetadataCounter = 0;
|
|
function createSolverMetadata(data) {
|
|
const id = solverMetadataCounter;
|
|
solverMetadata[id] = data;
|
|
solverMetadataCounter++;
|
|
return id;
|
|
}
|
|
export function setSolverMetadata(domNode, data) {
|
|
if (domNode.dataset.solverMetadata) {
|
|
solverMetadata[Number(domNode.dataset.solverMetadata)] = data;
|
|
return;
|
|
}
|
|
domNode.dataset.solverMetadata = createSolverMetadata(data).toString(10);
|
|
}
|
|
export function getSolverMetadata(id) {
|
|
if (typeof id === "object") {
|
|
// assume DOM element
|
|
if (id.dataset && id.dataset.solverMetadata) {
|
|
return getSolverMetadata(id.dataset.solverMetadata);
|
|
}
|
|
return null;
|
|
}
|
|
if (typeof id === "string") {
|
|
return getSolverMetadata(Number(id));
|
|
}
|
|
return solverMetadata[id];
|
|
}
|
|
export function deleteSolverMetadata(id) {
|
|
delete solverMetadata[id];
|
|
}
|
|
|
|
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");
|
|
}
|