From fee93ed6496006a069ab3e51d804279717ee0e0d Mon Sep 17 00:00:00 2001 From: Yanick Champoux Date: Thu, 3 Mar 2022 11:06:51 -0500 Subject: [PATCH] FTL dux --- src/lib/components/Ftl/index.svelte | 2 +- .../components/ShipEdit/Propulsion/Ftl.svelte | 32 ++++++++++++++ .../ShipEdit/Propulsion/index.svelte | 3 +- src/lib/shipDux/index.js | 2 + src/lib/shipDux/propulsion/ftl.js | 44 +++++++++++++++++++ src/lib/shipDux/propulsion/index.js | 3 +- 6 files changed, 83 insertions(+), 3 deletions(-) create mode 100644 src/lib/components/ShipEdit/Propulsion/Ftl.svelte create mode 100644 src/lib/shipDux/propulsion/ftl.js diff --git a/src/lib/components/Ftl/index.svelte b/src/lib/components/Ftl/index.svelte index fb2c098..2f7bda2 100644 --- a/src/lib/components/Ftl/index.svelte +++ b/src/lib/components/Ftl/index.svelte @@ -2,7 +2,7 @@ {#each types as t (t)} {/each} diff --git a/src/lib/components/ShipEdit/Propulsion/Ftl.svelte b/src/lib/components/ShipEdit/Propulsion/Ftl.svelte new file mode 100644 index 0000000..cce4738 --- /dev/null +++ b/src/lib/components/ShipEdit/Propulsion/Ftl.svelte @@ -0,0 +1,32 @@ + + + {#each types as t (t)} + + {/each} + + + + + + diff --git a/src/lib/components/ShipEdit/Propulsion/index.svelte b/src/lib/components/ShipEdit/Propulsion/index.svelte index d5b446a..b0077ef 100644 --- a/src/lib/components/ShipEdit/Propulsion/index.svelte +++ b/src/lib/components/ShipEdit/Propulsion/index.svelte @@ -1,11 +1,12 @@
+
diff --git a/src/lib/shipDux/index.js b/src/lib/shipDux/index.js index e03e866..447ee88 100644 --- a/src/lib/shipDux/index.js +++ b/src/lib/shipDux/index.js @@ -4,6 +4,7 @@ import u from 'updeep'; import propulsion from "./propulsion/index.js"; import identification from "./identification.js"; import { calculateDriveReqs } from './propulsion/drive.js'; +import { ftlReqsReaction } from './propulsion/ftl.js'; const dux = new Updux({ subduxes: { @@ -21,5 +22,6 @@ const dux = new Updux({ dux.setMutation( 'setShipMass', mass => u({reqs: {mass}}) ); dux.addReaction( calculateDriveReqs ); +dux.addReaction( ftlReqsReaction ); export default dux; diff --git a/src/lib/shipDux/propulsion/ftl.js b/src/lib/shipDux/propulsion/ftl.js new file mode 100644 index 0000000..ee42eca --- /dev/null +++ b/src/lib/shipDux/propulsion/ftl.js @@ -0,0 +1,44 @@ +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)) + ); diff --git a/src/lib/shipDux/propulsion/index.js b/src/lib/shipDux/propulsion/index.js index e9cb366..47d28fc 100644 --- a/src/lib/shipDux/propulsion/index.js +++ b/src/lib/shipDux/propulsion/index.js @@ -2,10 +2,11 @@ import { Updux } from "updux"; import u from 'updeep'; import drive from './drive.js'; +import ftl from './ftl.js'; const dux = new Updux({ subduxes: { - drive + drive, ftl }, });