hull
This commit is contained in:
parent
87c923cac3
commit
e3c0b402d1
@ -1,13 +1,16 @@
|
||||
<Section label="structure">
|
||||
<Streamlining {...streamlining} />
|
||||
<Hull {...hull} />
|
||||
<Cargo {...cargo} />
|
||||
<Streamlining {...streamlining} />
|
||||
</Section>
|
||||
|
||||
<script lang="ts">
|
||||
import Section from "$lib/components/Section.svelte";
|
||||
import Streamlining from "./Structure/Streamlining.svelte";
|
||||
import Cargo from "./Structure/Cargo.svelte";
|
||||
import Hull from "./Structure/Hull.svelte";
|
||||
|
||||
export let streamlining = {};
|
||||
export let cargo = {};
|
||||
export let hull = {};
|
||||
</script>
|
||||
|
@ -1,23 +1,23 @@
|
||||
<ShipItem {...reqs}>
|
||||
<Field label="hull">
|
||||
<input class="short" bind:value={rating} type="number" {min} {max} />
|
||||
</Field>
|
||||
</ShipItem>
|
||||
<ShipItem {...reqs}>
|
||||
<Field label="hull">
|
||||
<input class="short" bind:value={rating} type="number" {min} {max} />
|
||||
</Field>
|
||||
</ShipItem>
|
||||
|
||||
<script>
|
||||
import { getContext } from "svelte";
|
||||
|
||||
import ShipItem from '$lib/components/ShipItem/index.svelte';
|
||||
import Field from '$lib/components/Field/index.svelte';
|
||||
import ShipItem from "$lib/components/ShipItem.svelte";
|
||||
import Field from "$lib/components/Field.svelte";
|
||||
|
||||
export let rating = 0;
|
||||
export let reqs = {};
|
||||
export let min = 0;
|
||||
export let max = 1;
|
||||
|
||||
const ship = getContext('ship');
|
||||
const api = getContext("api");
|
||||
|
||||
$: ship.dispatch.setHull(rating);
|
||||
$: api.dispatch?.setHull?.(rating);
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
@ -1,33 +0,0 @@
|
||||
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
|
||||
import { reqs } from "../reqs";
|
||||
|
||||
const initialState = {
|
||||
rating: 0,
|
||||
min: 0,
|
||||
max: 0,
|
||||
reqs,
|
||||
};
|
||||
|
||||
const hull = createSlice({
|
||||
name: "hull",
|
||||
initialState,
|
||||
reducers: {
|
||||
setHull: (state, action: PayloadAction<number>) => {
|
||||
state.rating = action.payload;
|
||||
state.reqs = {
|
||||
mass: action.payload,
|
||||
cost: 2 * action.payload,
|
||||
};
|
||||
},
|
||||
setShipMass: (state, action: PayloadAction<number>) => {
|
||||
const mass = action.payload;
|
||||
let { rating } = state;
|
||||
if (rating > mass) state.rating = mass;
|
||||
state.min = Math.ceil(mass / 10);
|
||||
if (state.rating < state.min) state.rating = state.min;
|
||||
state.max = mass;
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
export const { actions, reducer } = hull;
|
@ -1,6 +1,7 @@
|
||||
import { createSelector } from "@reduxjs/toolkit";
|
||||
import Updux from "updux";
|
||||
import * as R from "remeda";
|
||||
import memoize from "memoize-one";
|
||||
|
||||
import identification from "./ship/identification";
|
||||
import ftl, { calcFtlReqs } from "./ship/propulsion/ftl";
|
||||
@ -10,6 +11,7 @@ import { carrierDux } from "./ship/carrier";
|
||||
import { streamliningDux as streamlining } from "./ship/structure/streamlining";
|
||||
import { calcStreamliningReqs } from "./ship/structure/rules";
|
||||
import { cargoDux } from "./ship/structure/cargo";
|
||||
import { hullDux } from "./ship/structure/hull";
|
||||
|
||||
const shipDux = new Updux({
|
||||
subduxes: {
|
||||
@ -19,6 +21,7 @@ const shipDux = new Updux({
|
||||
subduxes: {
|
||||
streamlining,
|
||||
cargo: cargoDux,
|
||||
hull: hullDux,
|
||||
},
|
||||
}),
|
||||
propulsion: new Updux({
|
||||
@ -32,13 +35,13 @@ const shipDux = new Updux({
|
||||
},
|
||||
});
|
||||
|
||||
shipDux.addReaction((api) =>
|
||||
createSelector(
|
||||
shipDux.addReaction((api) => {
|
||||
return createSelector(
|
||||
api.selectors.getFtlType,
|
||||
api.selectors.getShipMass,
|
||||
(type, mass) => api.dispatch.setFtlReqs(calcFtlReqs(type, mass))
|
||||
)
|
||||
);
|
||||
);
|
||||
});
|
||||
|
||||
shipDux.addReaction((api) => (state) => {
|
||||
let cost = 0;
|
||||
@ -61,6 +64,10 @@ shipDux.addReaction((api) => (state) => {
|
||||
api.dispatch.setShipReqs({ cost, usedMass: mass });
|
||||
});
|
||||
|
||||
shipDux.addEffect((api) => (next) => (action) => {
|
||||
next(action);
|
||||
});
|
||||
|
||||
shipDux.addReaction((api) =>
|
||||
createSelector(
|
||||
api.selectors.getShipMass,
|
||||
|
@ -4,41 +4,41 @@ import * as R from "remeda";
|
||||
import { carrierDux } from "./carrier";
|
||||
|
||||
const initialState = {
|
||||
shipType: "",
|
||||
shipClass: "",
|
||||
isCarrier: false,
|
||||
reqs: {
|
||||
mass: 10,
|
||||
cost: 0,
|
||||
usedMass: 0,
|
||||
},
|
||||
shipType: "",
|
||||
shipClass: "",
|
||||
isCarrier: false,
|
||||
reqs: {
|
||||
mass: 10,
|
||||
cost: 0,
|
||||
usedMass: 0,
|
||||
},
|
||||
};
|
||||
|
||||
const setShipClass = createAction("setShipClass", withPayload<string>());
|
||||
const updateIdentification = createAction("updateIdentification");
|
||||
const setShipReqs = createAction("setShipReqs", withPayload());
|
||||
|
||||
export const dux = new Updux({
|
||||
initialState,
|
||||
actions: {
|
||||
setShipClass,
|
||||
updateIdentification,
|
||||
setShipReqs,
|
||||
},
|
||||
selectors: {
|
||||
getShipMass: (state) => state.reqs.mass,
|
||||
isCarrier: ({ isCarrier }) => isCarrier,
|
||||
},
|
||||
export const identificationDux = new Updux({
|
||||
initialState,
|
||||
actions: {
|
||||
setShipClass,
|
||||
updateIdentification,
|
||||
setShipReqs,
|
||||
},
|
||||
selectors: {
|
||||
getShipMass: (state) => state.reqs.mass,
|
||||
isCarrier: ({ isCarrier }) => isCarrier,
|
||||
},
|
||||
});
|
||||
|
||||
dux.addMutation(setShipClass, (shipClass) => u({ shipClass }));
|
||||
dux.addMutation(updateIdentification, (update) => u(update));
|
||||
dux.addMutation(setShipReqs, (reqs) => u({ reqs }));
|
||||
identificationDux.addMutation(setShipClass, (shipClass) => u({ shipClass }));
|
||||
identificationDux.addMutation(updateIdentification, (update) => u(update));
|
||||
identificationDux.addMutation(setShipReqs, (reqs) => u({ reqs }));
|
||||
|
||||
dux.addMutation(carrierDux.actions.setNbrCarrierBays, (nbrBays) =>
|
||||
u({
|
||||
isCarrier: nbrBays > 0,
|
||||
})
|
||||
identificationDux.addMutation(carrierDux.actions.setNbrCarrierBays, (nbrBays) =>
|
||||
u({
|
||||
isCarrier: nbrBays > 0,
|
||||
})
|
||||
);
|
||||
|
||||
export default dux;
|
||||
export default identificationDux;
|
||||
|
42
src/lib/store/ship/structure/hull.ts
Normal file
42
src/lib/store/ship/structure/hull.ts
Normal file
@ -0,0 +1,42 @@
|
||||
import { reqs } from "$lib/shipDux/reqs";
|
||||
import Updux, { createPayloadAction } from "updux";
|
||||
import u from "@yanick/updeep-remeda";
|
||||
import identificationDux from "../identification";
|
||||
|
||||
const initialState = {
|
||||
rating: 0,
|
||||
min: 0,
|
||||
max: 0,
|
||||
reqs,
|
||||
};
|
||||
|
||||
const setHull = createPayloadAction<number>("setHull");
|
||||
|
||||
export const hullDux = new Updux({
|
||||
initialState,
|
||||
actions: {
|
||||
setHull,
|
||||
updateIdentification: identificationDux.actions.updateIdentification,
|
||||
},
|
||||
});
|
||||
|
||||
hullDux.addMutation(setHull, (rating) =>
|
||||
u({
|
||||
rating,
|
||||
reqs: {
|
||||
mass: rating,
|
||||
cost: 2 * rating,
|
||||
},
|
||||
})
|
||||
);
|
||||
|
||||
hullDux.addMutation(
|
||||
identificationDux.actions.updateIdentification,
|
||||
(payload) => {
|
||||
let mass = payload?.reqs?.mass ?? 0;
|
||||
return u({
|
||||
min: Math.ceil((mass ?? 0) / 10),
|
||||
max: mass ?? 0,
|
||||
});
|
||||
}
|
||||
);
|
Loading…
Reference in New Issue
Block a user