aotds-docks/src/lib/shipDux/propulsion/ftl.js

42 lines
943 B
JavaScript

import { Updux } from "updux";
import u from "updeep";
import { createSelector } from "reselect";
import reqs from "../reqs.js";
export const ftlTypes = ["none", "standard", "advanced"];
const dux = new Updux({
subduxes: { reqs },
initial: {
type: "none",
uiTransform: "",
},
actions: {
setFtl: null,
setFtlReqs: null,
},
});
export default dux;
dux.setMutation("setFtl", (type) => u({ type }));
dux.setMutation("setFtlReqs", (reqs) => u({ reqs }));
export function calcFtlReqs(type, shipMass) {
if (type === "none") return { cost: 0, mass: 0 };
const mass = Math.ceil(shipMass / 10);
return {
mass,
cost: mass * (type === "advanced" ? 3 : 2),
};
}
// needs to be at the top level
export const ftlReqsReaction = (store) =>
createSelector(
[(ship) => ship.propulsion.ftl.type, (ship) => ship.reqs.mass],
(type, shipMass) => store.dispatch.setFtlReqs(calcFtlReqs(type, shipMass))
);