Skip to content

Commit 5dba82b

Browse files
committed
feat: set up max enabled modules field
1 parent fe96103 commit 5dba82b

5 files changed

Lines changed: 56 additions & 6 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,6 @@
7373
"author": "Fultimator <fultimator@gmail.com>",
7474
"buildcounter": {
7575
"version": "1.0.5",
76-
"count": 70
76+
"count": 72
7777
}
7878
}

src/components/player/spells/SpellPilot.jsx

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,18 @@ function ThemedSpellPilot({ pilot, onEditVehicles, isEditMode, onEdit, onModuleC
9999
const module = vehicle.modules[moduleIndex];
100100
const frameType = getModuleTypeForLimits(module);
101101
const frameLimits = getFrameLimits(vehicle);
102+
const maxEnabledModules = vehicle.maxEnabledModules || (frameLimits.weapon + frameLimits.armor);
102103

103-
// Custom modules are always allowed
104-
if (frameType === "custom") return true;
104+
// Calculate total equipped modules
105+
const equippedWeapons = getEquippedCount(vehicle, "weapon");
106+
const equippedArmor = getEquippedCount(vehicle, "armor");
107+
const equippedSupport = getEquippedCount(vehicle, "support");
108+
const totalEquippedModules = equippedWeapons + equippedArmor + equippedSupport;
109+
110+
// If we are trying to equip a new module and we are at or over the max, we can't.
111+
if (!module.equipped && totalEquippedModules >= maxEnabledModules) {
112+
return false;
113+
}
105114

106115
// Check if unlimited slots for this type
107116
if (frameLimits[frameType] === -1) return true; // Unlimited
@@ -344,7 +353,16 @@ function ThemedSpellPilot({ pilot, onEditVehicles, isEditMode, onEdit, onModuleC
344353
const passengers = frame.passengers;
345354
const distance = frame.distance;
346355

347-
return `${t(vehicle.frame || "pilot_frame_exoskeleton")} | ${t("pilot_passengers")}: ${getPassengersText(passengers)} | ${t("pilot_distance")}: ${getDistanceText(distance)}`;
356+
// Calculate total equipped modules
357+
const equippedWeapons = getEquippedCount(vehicle, "weapon");
358+
const equippedArmor = getEquippedCount(vehicle, "armor");
359+
const equippedSupport = getEquippedCount(vehicle, "support");
360+
const total = equippedWeapons + equippedArmor + equippedSupport;
361+
362+
// Use maxEnabledModules from vehicle data, or calculate it if not present
363+
const maxDisplay = vehicle.maxEnabledModules || (frame.limits.weapon + frame.limits.armor);
364+
365+
return `${t(vehicle.frame || "pilot_frame_exoskeleton")} | ${t("pilot_passengers")}: ${getPassengersText(passengers)} | ${t("pilot_distance")}: ${getDistanceText(distance)} | ${t("pilot_max_enabled_modules")}: ${total}/${maxDisplay}`;
348366
})()}
349367
</Typography>
350368
</div>

src/components/player/spells/SpellPilotVehiclesModal.jsx

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,18 @@ export default function SpellPilotVehiclesModal({
114114

115115
const canEquipModule = useCallback((vehicle, moduleIndex) => {
116116
const module = vehicle.modules[moduleIndex];
117+
const maxEnabledModules = vehicle.maxEnabledModules || 3; // Default to 3 if not set
118+
119+
// Calculate total equipped modules, excluding the current one if it's already equipped
120+
const totalEquippedModules = vehicle.modules.filter((m, idx) =>
121+
m.equipped && idx !== moduleIndex
122+
).length;
123+
124+
// If trying to equip a new module and maxEnabledModules limit is reached
125+
if (!module.equipped && totalEquippedModules >= maxEnabledModules) {
126+
return false;
127+
}
128+
117129
const frameType = getModuleTypeForLimits(module);
118130
const frameLimits = getFrameLimits(vehicle.frame || "pilot_frame_exoskeleton", vehicle);
119131

@@ -352,6 +364,22 @@ export default function SpellPilotVehiclesModal({
352364
);
353365
})()}
354366
</Grid>
367+
<Grid item xs={12} sm={6}>
368+
<TextField
369+
fullWidth
370+
label={t("pilot_max_enabled_modules")}
371+
type="number"
372+
inputProps={{ min: 3 }}
373+
value={vehicle.maxEnabledModules || 3}
374+
onChange={(e) =>
375+
handleVehicleChange(
376+
vehicleIndex,
377+
"maxEnabledModules",
378+
parseInt(e.target.value, 10)
379+
)
380+
}
381+
/>
382+
</Grid>
355383
</Grid>
356384
</Grid>
357385

src/components/player/spells/vehicleReducer.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ export const vehicleReducer = (state, action) => {
6565
frame: "pilot_frame_exoskeleton",
6666
modules: [],
6767
enabledModules: [],
68+
maxEnabledModules: 3,
6869
},
6970
],
7071
};
@@ -256,6 +257,9 @@ export const vehicleReducer = (state, action) => {
256257
};
257258

258259
export const createInitialState = (pilot) => ({
259-
currentVehicles: pilot?.vehicles || [],
260+
currentVehicles: pilot?.vehicles?.map(vehicle => ({
261+
...vehicle,
262+
maxEnabledModules: vehicle.maxEnabledModules ?? 3,
263+
})) || [],
260264
showInPlayerSheet: pilot ? !!pilot.showInPlayerSheet : true,
261265
});

src/translation/data.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)