diff --git a/src/lib/components/ShipEdit/Carrier/Carrier.stories.svelte b/src/lib/components/ShipEdit/Carrier/Carrier.stories.svelte new file mode 100644 index 0000000..b17359f --- /dev/null +++ b/src/lib/components/ShipEdit/Carrier/Carrier.stories.svelte @@ -0,0 +1,33 @@ + + + + + + + diff --git a/src/lib/components/Carrier/Squadron/index.svelte b/src/lib/components/ShipEdit/Carrier/Squadron.svelte similarity index 52% rename from src/lib/components/Carrier/Squadron/index.svelte rename to src/lib/components/ShipEdit/Carrier/Squadron.svelte index 7eb17ac..6f46f46 100644 --- a/src/lib/components/Carrier/Squadron/index.svelte +++ b/src/lib/components/ShipEdit/Carrier/Squadron.svelte @@ -1,4 +1,4 @@ - + + + + + {#each squadrons as squadron,id (id)} + + {/each} + + + + + diff --git a/src/lib/components/ShipEdit/Identification/Identification.stories.svelte b/src/lib/components/ShipEdit/Identification/Identification.stories.svelte index 67ecb68..a3d01ab 100644 --- a/src/lib/components/ShipEdit/Identification/Identification.stories.svelte +++ b/src/lib/components/ShipEdit/Identification/Identification.stories.svelte @@ -1,4 +1,4 @@ - + diff --git a/src/lib/shipDux/carrier.js b/src/lib/shipDux/carrier.js new file mode 100644 index 0000000..6d8d145 --- /dev/null +++ b/src/lib/shipDux/carrier.js @@ -0,0 +1,76 @@ +import { Updux } from "updux"; +import u from "updeep"; +import _ from 'lodash'; + +import reqs from "./reqs.js"; + +const dux = new Updux({ + subduxes: { reqs }, + initial: { + bays: 0, + squadrons: [], + }, + actions: { + setCarrierBays: null, + setSquadronType: null, + } +}); + +dux.setMutation( 'setCarrierBays', bays => u({bays, reqs: + calcBaysReqs(bays), + squadrons: adjustSquadrons(bays), +}) ); + +dux.setMutation('setSquadronType', ({type, id}) => state => { + + return u.updateIn(['squadrons', id-1], { + type, + reqs: squadronReqs(type) + }, state ) + +} ); + +export const squadronTypes= [ + { type: "standard", cost: 3 }, + { type: "fast", cost: 4 }, + { type: "heavy", cost: 5 }, + { type: "interceptor", cost: 3 }, + { type: "attack", cost: 4 }, + { type: "long range", cost: 4 }, + { type: "torpedo", cost: 6 }, +]; + +function squadronReqs(type) { + return { mass: 6, cost: 6 * squadronTypes.find( s => s.type === type )?.cost } +} + + +const adjustSquadrons = bays => squadrons => { + if( squadrons.length > bays ) { + squadrons = squadrons.slice(0,bays); + } + + if( squadrons.length < bays ) { + squadrons = [ ...squadrons, ..._.times( + bays - squadrons.length, () => ({ + type: squadronTypes[0].type, + reqs: { + cost: 6 * squadronTypes[0].cost, + mass: 6, + }, + }) + )]; + } + + return squadrons; + +} + +function calcBaysReqs(bays) { + return { + mass: 9 * bays, + cost: 18 * bays, + } +} + +export default dux; diff --git a/src/lib/store/ship.js b/src/lib/store/ship.js index 7f459d2..2e507f1 100644 --- a/src/lib/store/ship.js +++ b/src/lib/store/ship.js @@ -20,7 +20,6 @@ export default () => { duxStore.subscribe(() => { if (previous === duxStore.getState()) return; previous = duxStore.getState(); - console.log("Setting!", previous); set(previous); }); });