aotds-docks/src/dux/carrier/index.js

59 lines
1.5 KiB
JavaScript
Raw Normal View History

2020-07-27 17:42:19 +00:00
import Updux from "updux";
import { action, payload } from "ts-action";
2021-05-17 13:48:31 +00:00
import u from "@yanick/updeep";
2020-07-27 17:42:19 +00:00
import _ from 'lodash';
import { createSelector } from "reselect";
import squadron_types from './squadron_types';
const uu = transform => state => transform(state)(state);
const dux = new Updux({
initial: {
bays: 0,
cost: 0,
mass: 0,
squadrons: [],
},
});
const set_squadron = action('set_squadron',payload());
2021-05-17 13:48:31 +00:00
dux.addMutation(set_squadron, ({id,type}) => u.update({ squadrons: u.map(
2020-07-27 17:42:19 +00:00
u.if(_.matches({id}), u({type, cost: 6 * _.find(squadron_types,{type}).cost, mass: 6 }))
)}));
const set_carrier_bays = action('set_carrier_bays', payload() );
dux.addMutation( set_carrier_bays, bays => state => {
2021-05-17 13:48:31 +00:00
state = u.update({
bays,
2020-07-27 17:42:19 +00:00
mass: 1.5*6*bays,
cost: 3 * 1.5 * 6 * bays,
})(state);
if( state.squadrons.length > bays ) {
2021-05-17 13:48:31 +00:00
state = u.update({
2020-07-27 17:42:19 +00:00
squadrons: squadrons => squadrons.slice(0,bays)
2021-05-17 13:48:31 +00:00
}, state)
2020-07-27 17:42:19 +00:00
}
if( state.squadrons.length < bays ) {
2021-05-17 13:48:31 +00:00
state = u.update({
2020-07-27 17:42:19 +00:00
squadrons: squadrons => [ ...squadrons, ..._.times(
bays - state.squadrons.length, i => ({
id: 1 + i + state.squadrons.length,
cost: 6 * squadron_types[0].cost,
mass: 6,
type: squadron_types[0].type,
})
2021-05-17 13:48:31 +00:00
)] }, state)
2020-07-27 17:42:19 +00:00
}
return state;
});
export default dux.asDux;