aotds-docks/src/lib/store/ship/propulsion/drive.ts

39 lines
881 B
TypeScript
Raw Normal View History

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 };
}