2023-03-03 18:23:13 +00:00
|
|
|
import { PayloadAction, createSlice } from "@reduxjs/toolkit";
|
|
|
|
import { reqs, Reqs } from "./reqs";
|
|
|
|
|
|
|
|
type Squadron = {
|
2023-03-03 23:02:52 +00:00
|
|
|
type: string;
|
|
|
|
reqs: Reqs;
|
2023-03-03 18:23:13 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
const initialState = {
|
2023-03-03 23:02:52 +00:00
|
|
|
bays: 0,
|
|
|
|
squadrons: [] as Squadron[],
|
|
|
|
reqs,
|
2023-03-03 18:23:13 +00:00
|
|
|
};
|
|
|
|
|
2023-03-03 23:02:52 +00:00
|
|
|
export const { actions, reducer } = createSlice({
|
|
|
|
name: "carrier",
|
|
|
|
initialState,
|
|
|
|
reducers: {
|
|
|
|
setCarrierBays: (state, action: PayloadAction<number>) => {
|
|
|
|
state.bays = action.payload;
|
|
|
|
state.reqs = calcBaysReqs(action.payload);
|
|
|
|
state.squadrons = adjustSquadrons(action.payload)(state.squadrons);
|
2023-03-03 18:23:13 +00:00
|
|
|
},
|
2023-03-03 23:02:52 +00:00
|
|
|
setSquadronType: (
|
|
|
|
state,
|
|
|
|
action: PayloadAction<{ type: string; id: number }>
|
|
|
|
) => {
|
|
|
|
state.squadrons[action.payload.id - 1] = {
|
|
|
|
type: action.payload.type,
|
|
|
|
reqs: squadronReqs(action.payload.type),
|
|
|
|
};
|
|
|
|
},
|
|
|
|
},
|
2023-03-03 18:23:13 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
export const squadronTypes = [
|
2023-03-03 23:02:52 +00:00
|
|
|
{ type: "standard", cost: 3 },
|
|
|
|
{ type: "fast", cost: 4 },
|
|
|
|
{ type: "heavy", cost: 5 },
|
|
|
|
{ type: "interceptor", cost: 3 },
|
|
|
|
{ type: "attack", cost: 4 },
|
|
|
|
{ type: "long range", cost: 4 },
|
|
|
|
{ type: "torpedo", cost: 6 },
|
2023-03-03 18:23:13 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
function squadronReqs(type: string) {
|
2023-03-03 23:02:52 +00:00
|
|
|
return {
|
|
|
|
mass: 6,
|
|
|
|
cost: 6 * squadronTypes.find((s) => s.type === type)?.cost,
|
|
|
|
};
|
2023-03-03 18:23:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
const adjustSquadrons = (bays) => (squadrons) => {
|
2023-03-03 23:02:52 +00:00
|
|
|
if (squadrons.length > bays) {
|
|
|
|
squadrons = squadrons.slice(0, bays);
|
|
|
|
}
|
2023-03-03 18:23:13 +00:00
|
|
|
|
2023-03-03 23:02:52 +00:00
|
|
|
if (squadrons.length < bays) {
|
|
|
|
squadrons = [
|
|
|
|
...squadrons,
|
|
|
|
..._.times(bays - squadrons.length, () => ({
|
|
|
|
type: squadronTypes[0].type,
|
|
|
|
reqs: {
|
|
|
|
cost: 6 * squadronTypes[0].cost,
|
|
|
|
mass: 6,
|
|
|
|
},
|
|
|
|
})),
|
|
|
|
];
|
|
|
|
}
|
2023-03-03 18:23:13 +00:00
|
|
|
|
2023-03-03 23:02:52 +00:00
|
|
|
return squadrons;
|
2023-03-03 18:23:13 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
function calcBaysReqs(bays) {
|
2023-03-03 23:02:52 +00:00
|
|
|
return {
|
|
|
|
mass: 9 * bays,
|
|
|
|
cost: 18 * bays,
|
|
|
|
};
|
2023-03-03 18:23:13 +00:00
|
|
|
}
|