From 5291e0fa6ed265390c690a70691bf01cfca931ab Mon Sep 17 00:00:00 2001 From: Kamil Krzywda Date: Mon, 28 Sep 2026 19:18:34 +0000 Subject: [PATCH] =?UTF-8?q?app:=20rebuild=20operations=20tabs=20as=207-tab?= =?UTF-8?q?=20game=20template=20(world=20map,=20local=20system,=20crew,=20?= =?UTF-8?q?ship=20systems,=20skill=20tree,=20missions,=20event=20log)=20?= =?UTF-8?q?=E2=80=94=20visual=20only?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/mission-control.tsx | 436 +++++++++++++++++++++++---------- 1 file changed, 301 insertions(+), 135 deletions(-) diff --git a/components/mission-control.tsx b/components/mission-control.tsx index bceb7f4..0741b72 100644 --- a/components/mission-control.tsx +++ b/components/mission-control.tsx @@ -2,11 +2,12 @@ import { useEffect, useState } from 'react' import { Badge } from '@/components/ui/badge' -import { BarChart } from '@/components/ui/bar-chart' import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert' -import { LineChart } from '@/components/ui/line-chart' +import { Button } from '@/components/ui/button' +import { Card, CardContent, CardFooter, CardHeader, CardTitle } from '@/components/ui/card' +import { NodeGraph, type NodeGraphEdge, type NodeGraphNode } from '@/components/ui/node-graph' import { Panel, PanelContent, PanelHeader, PanelTitle } from '@/components/ui/panel' -import { ProgressRing } from '@/components/ui/progress-ring' +import { Progress } from '@/components/ui/progress' import { StatCard } from '@/components/ui/stat-card' import { StatusGrid, type SystemEntry } from '@/components/ui/status-grid' import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs' @@ -42,19 +43,82 @@ const shipSystems: SystemEntry[] = [ { name: 'COMMS', status: 'ACTIVE' }, ] -const bayOutput = [ - { label: 'PWR', value: 14 }, - { label: 'NAV', value: 9 }, - { label: 'COM', value: 6 }, - { label: 'WPN', value: 3 }, - { label: 'LSS', value: 12 }, - { label: 'ENG', value: 11 }, - { label: 'BAY', value: 7 }, - { label: 'MED', value: 5 }, +// WORLD MAP — every node is a solar system, edges are jump routes. +const worldMapNodes: NodeGraphNode[] = [ + { id: 'kepler', label: 'Kepler Drift', x: 50, y: 48, status: 'ACTIVE', sublabel: 'CURRENT' }, + { id: 'vesper', label: 'Vesper Reach', x: 22, y: 26, status: 'NEUTRAL', sublabel: '3 WORLDS' }, + { id: 'hollow', label: 'Hollow Gate', x: 74, y: 20, status: 'NEUTRAL', sublabel: '5 WORLDS' }, + { id: 'cinder', label: 'Cinder Field', x: 86, y: 56, status: 'WARNING', sublabel: 'RADIATION' }, + { id: 'lantern', label: 'Lantern Void', x: 30, y: 74, status: 'NEUTRAL', sublabel: '2 WORLDS' }, + { id: 'sable', label: 'Sable Reach', x: 8, y: 46, status: 'OFFLINE', sublabel: 'UNKNOWN' }, + { id: 'orpheus', label: 'Orpheus Deep', x: 52, y: 10, status: 'NEUTRAL', sublabel: '7 WORLDS' }, + { id: 'mire', label: 'Mire Station', x: 68, y: 84, status: 'ACTIVE', sublabel: 'OUTPOST' }, + { id: 'thalassa', label: 'Thalassa Bend', x: 12, y: 86, status: 'NEUTRAL', sublabel: '4 WORLDS' }, + { id: 'kuiper', label: 'Kuiper Shard', x: 90, y: 30, status: 'CRITICAL', sublabel: 'WARZONE' }, ] -const hullTrack = [100, 98, 97, 96, 94, 95, 92, 90, 89, 87] -const hullLabels = hullTrack.map((_, i) => `T-${hullTrack.length - 1 - i}`) +const worldMapEdges: NodeGraphEdge[] = [ + { from: 'kepler', to: 'vesper', animated: true }, + { from: 'kepler', to: 'hollow', label: 'JUMP-2' }, + { from: 'kepler', to: 'lantern', animated: true }, + { from: 'kepler', to: 'mire' }, + { from: 'vesper', to: 'orpheus' }, + { from: 'hollow', to: 'kuiper', label: 'JUMP-1' }, + { from: 'cinder', to: 'kuiper' }, + { from: 'lantern', to: 'thalassa' }, + { from: 'sable', to: 'vesper' }, + { from: 'mire', to: 'cinder' }, +] + +// LOCAL SYSTEM — the current system (regenerated per save after each jump, later). +const localSystemNodes: NodeGraphNode[] = [ + { id: 'star', label: 'Kepler-442', x: 50, y: 50, status: 'ACTIVE', sublabel: 'G2 STAR' }, + { id: 'aurelle', label: 'Aurelle', x: 18, y: 30, status: 'ACTIVE', sublabel: 'TERRESTRIAL' }, + { id: 'brimstone', label: 'Brimstone', x: 76, y: 24, status: 'NEUTRAL', sublabel: 'GAS GIANT' }, + { id: 'ashfall', label: 'Ashfall', x: 90, y: 52, status: 'WARNING', sublabel: 'MOON' }, + { id: 'cinderrock', label: 'Cinderrock', x: 74, y: 80, status: 'NEUTRAL', sublabel: 'ROCKY' }, + { id: 'driftband', label: 'Driftband', x: 30, y: 78, status: 'WARNING', sublabel: 'ASTEROID RING' }, + { id: 'palemoon', label: 'Palemoon', x: 8, y: 54, status: 'NEUTRAL', sublabel: 'MOON' }, +] + +const localSystemEdges: NodeGraphEdge[] = [ + { from: 'star', to: 'aurelle' }, + { from: 'star', to: 'brimstone' }, + { from: 'brimstone', to: 'ashfall', label: 'MOON' }, + { from: 'star', to: 'cinderrock' }, + { from: 'star', to: 'driftband' }, + { from: 'aurelle', to: 'palemoon', label: 'MOON' }, +] + +const explorablePlanets = [ + { name: 'AURELLE', type: 'TERRESTRIAL // OCEAN CONTINENTS', state: 'UNEXPLORED' as const }, + { name: 'BRIMSTONE', type: 'GAS GIANT // CLOUD DECKS', state: 'SCANNED' as const }, + { name: 'ASHFALL (MOON)', type: 'VOLCANIC MOON // SULFUR VEINS', state: 'UNEXPLORED' as const }, + { name: 'CINDERROCK', type: 'ROCKY // IRON RICH', state: 'UNEXPLORED' as const }, + { name: 'DRIFTBAND', type: 'ASTEROID FIELD // HAZARD', state: 'HAZARD' as const }, +] + +const crew = [ + { name: 'CMDR. E. VANCE', role: 'COMMANDER', good: 'STEADY UNDER PRESSURE', bad: 'RIGID — SLOW TO ADAPT' }, + { name: 'LT. M. OKONKWO', role: 'PILOT', good: 'RECKLESS COURAGE', bad: 'SHORT FUSE' }, + { name: 'DR. I. SORENSEN', role: 'MEDIC', good: 'CALM IN A CRISIS', bad: 'OVERCAUTIOUS' }, + { name: 'R. "SPARK" DELACRUZ', role: 'ENGINEER', good: 'FIXES ANYTHING', bad: 'CARELESS WITH FUSES' }, +] + +const shipSystemCards = [ + { name: 'REACTOR', level: 'LV 2', status: 'ACTIVE' as const, actions: ['EXPAND', 'UPGRADE'] }, + { name: 'LIFE SUPPORT', level: 'LV 1', status: 'ACTIVE' as const, actions: ['EXPAND', 'UPGRADE'] }, + { name: 'NAV COMPUTER', level: 'LV 3', status: 'SCANNING' as const, actions: ['EXPAND', 'UPGRADE'] }, + { name: 'WEAPONS', level: 'OFFLINE', status: 'OFFLINE' as const, actions: ['BUILD NEW'] }, + { name: 'COMMS ARRAY', level: 'LV 1', status: 'ACTIVE' as const, actions: ['EXPAND', 'UPGRADE'] }, +] + +const skillCards = [ + { name: 'ADVANCED FUSION CORE', unlocks: 'REACTOR LV 4 + OVERCLOCK', state: 'AVAILABLE' as const }, + { name: 'HULL PLATING SCHEMATICS', unlocks: 'BUILD ARMOR BAY MODULES', state: 'AVAILABLE' as const }, + { name: 'CREW TRAINING PROTOCOLS', unlocks: 'RETRAIN CREW TRAITS', state: 'LOCKED' as const }, + { name: 'JUMP DRIVE TUNING', unlocks: 'SHORTER JUMP COOLDOWN', state: 'LOCKED' as const }, +] const encounters = [ { name: 'DERELICT FREIGHTER', when: 'T-07:14', id: '#E-102' }, @@ -237,7 +301,7 @@ export function MissionControl() { background: 'var(--border)', }} > - {/* ── LEFT: SHIP SYSTEMS + VESSEL METRICS ── */} + {/* ── LEFT: SHIP SYSTEMS + VESSEL METRICS (mirrors the SHIP SYSTEMS tab) ── */}
VESSEL METRICS -
- - - -
- -
- {[ - { label: 'HULL INTEGRITY', note: 'last scan T-02' }, - { label: 'REACTOR OUTPUT', note: 'idle cycle' }, - { label: 'CREW ROSTER', note: 'of 6 berths' }, - ].map((item) => ( -
-
- {item.label} -
-
- {item.note} -
-
- ))} +
+ + +
- {/* ── CENTER: OPERATIONS TABS ── */} + {/* ── CENTER: GAME TEMPLATE TABS (visual only — no handlers, placeholder data) ── */}
- + - SYSTEMS - NEXT MISSION - LOG - HULL TRACK + WORLD MAP + LOCAL SYSTEM + CREW + SHIP SYSTEMS + SKILL TREE + MISSIONS + EVENT LOG - {/* SYSTEMS TAB */} - - + -
- {[ - { label: 'TOTAL MODULES', value: 34 }, - { label: 'ONLINE', value: 29 }, - { label: 'EFFICIENCY', value: '85%' }, - ].map((s) => ( + + + {/* LOCAL SYSTEM TAB */} + +
+ + +
-
- {s.label} -
-
- {s.value} -
+ EXPLORABLE WORLDS // FIND THINGS HERE (PLACEHOLDER)
+ {explorablePlanets.map((planet, i) => ( +
+
+
+ {planet.name} +
+
+ {planet.type} +
+
+ + {planet.state} + +
+ ))} +
+
+
+ + {/* CREW TAB */} + +
+ {crew.map((member) => ( + + +
+ {member.name} + + ACTIVE + +
+

+ {member.role} +

+
+ +
+ + + {member.good} +
+
+ - + {member.bad} +
+
+
))}
- {/* NEXT MISSION TAB */} - + {/* SHIP SYSTEMS TAB */} + +
+ {shipSystemCards.map((system) => ( + + +
+ {system.name} + + {system.level} + +
+
+ +

+ MODULE BAY // PLACEHOLDER READOUT +

+
+ + {system.actions.map((action) => ( + + ))} + +
+ ))} +
+
+ + {/* SKILL TREE TAB */} + +
+ {skillCards.map((skill) => ( + + +
+ {skill.name} + + {skill.state} + +
+
+ +

+ UNLOCKS: {skill.unlocks} +

+
+ + + +
+ ))} +
+
+ + {/* MISSIONS TAB */} +
@@ -466,8 +644,8 @@ export function MissionControl() {
- {/* LOG TAB */} - + {/* EVENT LOG TAB */} + - - {/* HULL TRACK TAB */} - - -