From c246138d34c17fb22a67a7f6887e7b7c43de2682 Mon Sep 17 00:00:00 2001 From: emergent-agent-e1 Date: Tue, 27 Jan 2026 10:30:32 +0000 Subject: [PATCH 01/25] auto-commit for 7f7ec437-659a-4740-9fd7-f41b19c627c9 --- frontend/src/components/MissionManager.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/components/MissionManager.jsx b/frontend/src/components/MissionManager.jsx index dae250e..2017fa7 100644 --- a/frontend/src/components/MissionManager.jsx +++ b/frontend/src/components/MissionManager.jsx @@ -38,6 +38,7 @@ const emptyMissionForm = { spBudget: 0, spPurchases: [], totalTonnage: 0, + opForUnits: [], }; export default function MissionManager({ force, onUpdate }) { From b897aaf086e8f9a76ef34a58fb473e7fb7f2ce0f Mon Sep 17 00:00:00 2001 From: emergent-agent-e1 Date: Tue, 27 Jan 2026 10:30:41 +0000 Subject: [PATCH 02/25] auto-commit for f99e0de9-0f2c-4814-b77d-42f9b287521c --- frontend/src/components/MissionManager.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/components/MissionManager.jsx b/frontend/src/components/MissionManager.jsx index 2017fa7..e46c656 100644 --- a/frontend/src/components/MissionManager.jsx +++ b/frontend/src/components/MissionManager.jsx @@ -113,6 +113,7 @@ export default function MissionManager({ force, onUpdate }) { spBudget: mission.spBudget || 0, spPurchases: mission.spPurchases || [], totalTonnage: mission.totalTonnage || 0, + opForUnits: mission.opForUnits || [], }); } else { setEditingMission(null); From bcb1195b72c8ae46f578ab53aeb44cc7323c27a6 Mon Sep 17 00:00:00 2001 From: emergent-agent-e1 Date: Tue, 27 Jan 2026 10:30:56 +0000 Subject: [PATCH 03/25] auto-commit for 12de5dd3-2f0b-44fb-9e01-e1e5dc707782 --- frontend/src/components/MissionManager.jsx | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/frontend/src/components/MissionManager.jsx b/frontend/src/components/MissionManager.jsx index e46c656..004cc45 100644 --- a/frontend/src/components/MissionManager.jsx +++ b/frontend/src/components/MissionManager.jsx @@ -216,6 +216,31 @@ export default function MissionManager({ force, onUpdate }) { })); }; + // OpFor unit management + const [opForSearchInput, setOpForSearchInput] = useState(''); + + const addOpForUnit = (mechData) => { + const newUnit = { + id: `opfor-${Date.now()}`, + name: mechData.name, + tonnage: mechData.weight || 0, + bv: mechData.bv || 0, + status: 'active', + }; + setFormData((prev) => ({ + ...prev, + opForUnits: [...(prev.opForUnits || []), newUnit], + })); + setOpForSearchInput(''); + }; + + const removeOpForUnit = (unitId) => { + setFormData((prev) => ({ + ...prev, + opForUnits: (prev.opForUnits || []).filter((u) => u.id !== unitId), + })); + }; + const saveMission = () => { const timestamp = force.currentDate; From ad6c3d5d5a8f8f8dc27ad89dc5a35d5948e08677 Mon Sep 17 00:00:00 2001 From: emergent-agent-e1 Date: Tue, 27 Jan 2026 10:31:08 +0000 Subject: [PATCH 04/25] auto-commit for f947a265-dc95-487c-95cb-d4e52ce5353b --- frontend/src/components/MissionManager.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/components/MissionManager.jsx b/frontend/src/components/MissionManager.jsx index 004cc45..f695db7 100644 --- a/frontend/src/components/MissionManager.jsx +++ b/frontend/src/components/MissionManager.jsx @@ -262,6 +262,7 @@ export default function MissionManager({ force, onUpdate }) { spBudget: formData.spBudget || 0, spPurchases: formData.spPurchases || [], totalTonnage, + opForUnits: formData.opForUnits || [], }; if (editingMission) { From e695d89d4241abe1f1a8b6646637797f9f503142 Mon Sep 17 00:00:00 2001 From: emergent-agent-e1 Date: Tue, 27 Jan 2026 10:31:49 +0000 Subject: [PATCH 05/25] auto-commit for bf591470-0508-40f1-a9d3-0bfde7236d8f --- frontend/src/components/MissionManager.jsx | 62 ++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/frontend/src/components/MissionManager.jsx b/frontend/src/components/MissionManager.jsx index f695db7..6ea3ba2 100644 --- a/frontend/src/components/MissionManager.jsx +++ b/frontend/src/components/MissionManager.jsx @@ -1127,6 +1127,68 @@ export default function MissionManager({ force, onUpdate }) { )} + {/* OpFor Roster */} +
+
+ + {formData.opForUnits && formData.opForUnits.length > 0 && ( +
+ + {formData.opForUnits.reduce((sum, u) => sum + (u.tonnage || 0), 0)}t + + | + + {formatNumber(formData.opForUnits.reduce((sum, u) => sum + (u.bv || 0), 0))} BV + +
+ )} +
+ +
+
+ +
+
+ + {formData.opForUnits && formData.opForUnits.length > 0 ? ( +
+ {formData.opForUnits.map((unit) => ( +
+
+ {unit.name} + + {unit.tonnage}t | {formatNumber(unit.bv)} BV + +
+ +
+ ))} +
+ ) : ( +

+ No OpFor units added. Search above to add enemy mechs encountered in this mission. +

+ )} +
+