2023-03-22 20:18:10 +00:00
|
|
|
import { reqs, type Reqs } from "$lib/shipDux/reqs";
|
|
|
|
import Updux, { createPayloadAction } from "updux";
|
|
|
|
import u from "@yanick/updeep-remeda";
|
|
|
|
|
|
|
|
type DriveProps = {
|
|
|
|
rating: number;
|
|
|
|
advanced: boolean;
|
|
|
|
};
|
|
|
|
|
2023-03-24 15:01:04 +00:00
|
|
|
const initialState: DriveProps & { reqs: Reqs } = {
|
2023-03-22 20:18:10 +00:00
|
|
|
rating: 0,
|
|
|
|
advanced: false,
|
|
|
|
reqs,
|
|
|
|
};
|
|
|
|
|
|
|
|
const setDrive = createPayloadAction<DriveProps>("setDrive");
|
|
|
|
const setDriveReqs = createPayloadAction<Reqs>("setDriveReqs");
|
|
|
|
|
|
|
|
const dux = new Updux({
|
2023-03-24 15:01:04 +00:00
|
|
|
initialState,
|
2023-03-22 20:18:10 +00:00
|
|
|
actions: { setDrive, setDriveReqs },
|
|
|
|
});
|
|
|
|
|
|
|
|
export default dux;
|
|
|
|
|
|
|
|
dux.addMutation(setDrive, (change) => u(change));
|
|
|
|
dux.addMutation(setDriveReqs, (reqs) => u({ reqs }));
|
|
|
|
|
|
|
|
export function calcDriveReqs(
|
|
|
|
shipMass: number,
|
|
|
|
rating: number,
|
|
|
|
advanced = false
|
|
|
|
) {
|
|
|
|
const mass = Math.ceil(rating * 0.05 * shipMass);
|
|
|
|
const cost = mass * (advanced ? 3 : 2);
|
|
|
|
|
|
|
|
return { mass, cost };
|
|
|
|
}
|