streamlining
This commit is contained in:
parent
9596ae9922
commit
15495ee843
@ -66,22 +66,6 @@ dux.addSubscription((store) =>
|
|||||||
createSelector(calc_ship_req, (reqs) => store.dispatch(set_ship_reqs(reqs)))
|
createSelector(calc_ship_req, (reqs) => store.dispatch(set_ship_reqs(reqs)))
|
||||||
);
|
);
|
||||||
|
|
||||||
dux.addSubscription((store) =>
|
|
||||||
createSelector(
|
|
||||||
(store) => store.general.mass,
|
|
||||||
(store) => store.streamlining.type,
|
|
||||||
(ship_mass, streamlining) => {
|
|
||||||
const mass = ceil(
|
|
||||||
(ship_mass *
|
|
||||||
(streamlining === "none" ? 0 : streamlining === "partial" ? 5 : 10)) /
|
|
||||||
100
|
|
||||||
);
|
|
||||||
const cost = 2 * mass;
|
|
||||||
|
|
||||||
store.dispatch(dux.actions.set_streamlining_cost_mass({ cost, mass }));
|
|
||||||
}
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
dux.addSubscription((store) =>
|
dux.addSubscription((store) =>
|
||||||
createSelector(
|
createSelector(
|
||||||
|
41
src/lib/components/ShipEdit/Structure/Streamlining.svelte
Normal file
41
src/lib/components/ShipEdit/Structure/Streamlining.svelte
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<ShipItem {...reqs}>
|
||||||
|
<Field label="streamlining">
|
||||||
|
<div>
|
||||||
|
<label>
|
||||||
|
<input type="radio" bind:group={type} value="none" />
|
||||||
|
none</label
|
||||||
|
>
|
||||||
|
<label>
|
||||||
|
<input type="radio" bind:group={type} value="partial" />
|
||||||
|
partial</label
|
||||||
|
>
|
||||||
|
<label>
|
||||||
|
<input type="radio" bind:group={type} value="full" />
|
||||||
|
full</label
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</Field>
|
||||||
|
</ShipItem>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import ShipItem from "$lib/components/ShipItem/index.svelte";
|
||||||
|
import Field from "$lib/components/Field/index.svelte";
|
||||||
|
|
||||||
|
import { getContext } from "svelte";
|
||||||
|
|
||||||
|
export let type = "none";
|
||||||
|
export let reqs = {};
|
||||||
|
|
||||||
|
export let {dispatch, shipMass} = getContext("ship");
|
||||||
|
|
||||||
|
$: dispatch.setStreamlining({type, shipMass: $shipMass});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
div {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
label {
|
||||||
|
margin-left: 1em;
|
||||||
|
}
|
||||||
|
</style>
|
@ -2,6 +2,7 @@
|
|||||||
<Hull {...hull}/>
|
<Hull {...hull}/>
|
||||||
<Screens {...screens} />
|
<Screens {...screens} />
|
||||||
<Cargo {...cargo} />
|
<Cargo {...cargo} />
|
||||||
|
<Streamlining {...streamlining} />
|
||||||
</Section>
|
</Section>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@ -9,10 +10,12 @@
|
|||||||
import Hull from './Hull.svelte';
|
import Hull from './Hull.svelte';
|
||||||
import Screens from './Screens.svelte';
|
import Screens from './Screens.svelte';
|
||||||
import Cargo from './Cargo.svelte';
|
import Cargo from './Cargo.svelte';
|
||||||
|
import Streamlining from './Streamlining.svelte';
|
||||||
|
|
||||||
export let hull = {};
|
export let hull = {};
|
||||||
export let screens = {};
|
export let screens = {};
|
||||||
export let cargo = {};
|
export let cargo = {};
|
||||||
|
export let streamlining = {};
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -3,8 +3,10 @@ import { Updux } from 'updux';
|
|||||||
import hull from './hull.js';
|
import hull from './hull.js';
|
||||||
import screens from './screens.js';
|
import screens from './screens.js';
|
||||||
import cargo from './cargo.js';
|
import cargo from './cargo.js';
|
||||||
|
import streamlining from './streamlining.js';
|
||||||
|
|
||||||
const dux = new Updux({
|
const dux = new Updux({
|
||||||
subduxes: { hull, screens, cargo }
|
subduxes: { hull, screens, cargo, streamlining }
|
||||||
});
|
});
|
||||||
export default dux;
|
export default dux;
|
||||||
|
|
||||||
|
33
src/lib/shipDux/structure/streamlining.js
Normal file
33
src/lib/shipDux/structure/streamlining.js
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import { Updux } from "updux";
|
||||||
|
import u from "updeep";
|
||||||
|
|
||||||
|
import reqs from "../reqs.js";
|
||||||
|
import { calculateDriveReqs } from "../propulsion/drive.js";
|
||||||
|
|
||||||
|
const dux = new Updux({
|
||||||
|
subduxes: {
|
||||||
|
reqs,
|
||||||
|
},
|
||||||
|
initial: {
|
||||||
|
type: "none",
|
||||||
|
},
|
||||||
|
actions: {
|
||||||
|
setStreamlining: null,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
export default dux;
|
||||||
|
|
||||||
|
dux.setMutation("setStreamlining", ({ shipMass, type }) =>
|
||||||
|
u({
|
||||||
|
type,
|
||||||
|
reqs: calcStreamliningReqs({ shipMass, type }),
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
function calcStreamliningReqs({ shipMass, type }) {
|
||||||
|
const mass = Math.ceil(
|
||||||
|
(shipMass * (type === "none" ? 0 : type === "partial" ? 5 : 10)) / 100
|
||||||
|
);
|
||||||
|
|
||||||
|
return { mass, cost: 2 * mass };
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
import { browser } from "$app/env";
|
import { browser } from "$app/env";
|
||||||
import { readable, get } from "svelte/store";
|
import { readable, get, derived } from "svelte/store";
|
||||||
import { compose, applyMiddleware } from "redux";
|
import { compose, applyMiddleware } from "redux";
|
||||||
|
|
||||||
import shipDux from "../shipDux/index.js";
|
import shipDux from "../shipDux/index.js";
|
||||||
@ -28,5 +28,6 @@ export default () => {
|
|||||||
return {
|
return {
|
||||||
dispatch: duxStore.dispatch,
|
dispatch: duxStore.dispatch,
|
||||||
state,
|
state,
|
||||||
|
shipMass: derived( state, state => state.reqs.mass )
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user