diff --git a/src/dux/weaponry/weapons/index.js b/src/dux/weaponry/weapons/index.js index 896aad2..a494175 100644 --- a/src/dux/weaponry/weapons/index.js +++ b/src/dux/weaponry/weapons/index.js @@ -2,43 +2,49 @@ import Updux from "updux"; import { action, payload } from "ts-action"; import u from "updeep"; import { createSelector } from "reselect"; -import { weapon_cost_mass } from '../../weapons/rules'; +import { weapon_cost_mass } from "../../weapons/rules"; -const add_weapon = action('add_weapon', payload()); -const remove_weapon = action('remove_weapon', payload()); +const add_weapon = action("add_weapon", payload()); +const remove_weapon = action("remove_weapon", payload()); -const uu = transform => state => transform(state)(state) +const uu = (transform) => (state) => transform(state)(state); -const with_reqs = uu( weapon => u(weapon_cost_mass(weapon))); +const with_reqs = uu((weapon) => u(weapon_cost_mass(weapon))); const dux = new Updux({ - initial: [], -}) - -const weapon_initial = { - beam: { weapon_type: "beam", weapon_class: 1, arcs: ['F'] }, - submunition: { - weapon_type: "submunition", arcs: ['F'] }, - pds: { weapon_type: 'pds' }, - scattergun: { weapon_type: 'scattergun' }, - needle: { weapon_type: 'needle', arcs: ['F'] }, -}; - -dux.addMutation( add_weapon, (type) => state => { - const id = 1 + Math.max( 0, ... state.map(({id})=>id) ); - return [ ...state, { ...with_reqs(weapon_initial[type]), id }]; + initial: [], }); -dux.addMutation( remove_weapon, id => state => - state.filter( w => w.id !== id ) +const weapon_initial = { + beam: { + weapon_type: "beam", + weapon_class: 1, + arcs: ["F", "A", "FS", "FP", "AS", "AP"], + }, + submunition: { + weapon_type: "submunition", + arcs: ["F"], + }, + pds: { weapon_type: "pds" }, + scattergun: { weapon_type: "scattergun" }, + needle: { weapon_type: "needle", arcs: ["F"] }, +}; + +dux.addMutation(add_weapon, (type) => (state) => { + const id = 1 + Math.max(0, ...state.map(({ id }) => id)); + return [...state, { ...with_reqs(weapon_initial[type]), id }]; +}); + +dux.addMutation(remove_weapon, (id) => (state) => + state.filter((w) => w.id !== id) ); -const set_weapon = action('set_weapon',payload()); +const set_weapon = action("set_weapon", payload()); -dux.addMutation( - set_weapon, payload => u.map( u.if( _.matches({id: payload.id}), - state => with_reqs(u(payload,state)) ) - ) +dux.addMutation(set_weapon, (payload) => + u.map( + u.if(_.matches({ id: payload.id }), (state) => with_reqs(u(payload, state))) + ) ); export default dux.asDux; diff --git a/src/dux/weaponry/weapons/test.js b/src/dux/weaponry/weapons/test.js new file mode 100644 index 0000000..b74991b --- /dev/null +++ b/src/dux/weaponry/weapons/test.js @@ -0,0 +1,5 @@ +import dux from "."; +import tap from "tap"; + +const state = dux.upreducer(dux.actions.add_weapon("beam"))([]); +tap.equal(state[0].arcs.length, 6, "default beam is all arcs");