45 lines
964 B
JavaScript
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))
|
|
);
|