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

45 lines
964 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",
},
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))
);