Welcome to JBCAS Operations Center
Build a new main tab, Carrier Ops, rather than putting this inside Communications. The first implementation should be JBCAS-controlled: spawn Miltech's boat SimObject and drive its movement from our app. That gives us direct control of location, heading, speed, and route without depending on Miltech's toolbar panel internals.
Miltech Supercarrier Pro exposes the object we need:
C:\Users\bradc\AppData\Roaming\Microsoft Flight Simulator 2024\Packages\Community\miltechsimulations-supercarrier-pro\SimObjects\Boats\Miltech CVN78\sim.cfg
Key config found: title=Miltech CVN78, category=Boat, HasMovingPlatform = 1, [Carrier] carrier = 1
Add a new tab wired through [JBCAS ATC CONSOLE UI 26/MainWindow.xaml.cs](JBCAS%20ATC%20CONSOLE%20UI%2026/MainWindow.xaml.cs) alongside Live Map, Mission Planning, and Range Scheduling.
New UI files:
[JBCAS ATC CONSOLE UI 26/UI/Tabs/CarrierOps/CarrierOpsTab.xaml](JBCAS%20ATC%20CONSOLE%20UI%2026/UI/Tabs/CarrierOps/CarrierOpsTab.xaml)
[JBCAS ATC CONSOLE UI 26/UI/Tabs/CarrierOps/CarrierOpsTab.xaml.cs](JBCAS%20ATC%20CONSOLE%20UI%2026/UI/Tabs/CarrierOps/CarrierOpsTab.xaml.cs)
[JBCAS ATC CONSOLE UI 26/ViewModels/Tabs/CarrierOps/CarrierOpsTabViewModel.cs](JBCAS%20ATC%20CONSOLE%20UI%2026/ViewModels/Tabs/CarrierOps/CarrierOpsTabViewModel.cs)
Core services:
Add CarrierSpawner or MaritimeObjectSpawner that uses the same SimConnect principle as [JBCAS ATC CONSOLE UI 26/Services/SimObjects/GroundVehicleSpawner.cs](JBCAS%20ATC%20CONSOLE%20UI%2026/Services/SimObjects/GroundVehicleSpawner.cs): AICreateSimulatedObject("Miltech CVN78", initPos, requestId).
Add CarrierMovementController using the proven position-update pattern from [JBCAS ATC CONSOLE UI 26/Services/Emergency/SimConnectPositionQueue.cs](JBCAS%20ATC%20CONSOLE%20UI%2026/Services/Emergency/SimConnectPositionQueue.cs).
Add CarrierRouteFollower with nautical route logic: current leg, next waypoint, desired course, knots-to-meters-per-second, loop route option, stop-at-final option.
Add SpawnedCarrierRegistry so the UI, Live Map, and later ATC/LSO pieces can share carrier state without overloading the aircraft registry.
Use Live Map for placement and route building, but keep carrier routes separate from AI aircraft waypoints.
Touch points:
[JBCAS ATC CONSOLE UI 26/UI/Tabs/LiveMap/LiveMapTab.xaml.cs](JBCAS%20ATC%20CONSOLE%20UI%2026/UI/Tabs/LiveMap/LiveMapTab.xaml.cs) for WebView message handling and pushing carrier markers.
[JBCAS ATC CONSOLE UI 26/ViewModels/Tabs/LiveMap/LiveMapViewModel.cs](JBCAS%20ATC%20CONSOLE%20UI%2026/ViewModels/Tabs/LiveMap/LiveMapViewModel.cs) for a receiver/callback similar to the AI Traffic route receiver.
[JBCAS ATC CONSOLE UI 26/UI/Tabs/LiveMap/MapAssets/liveMap.js](JBCAS%20ATC%20CONSOLE%20UI%2026/UI/Tabs/LiveMap/MapAssets/liveMap.js) for a carrier route layer and a carrier marker layer.
User flow:
flowchart LR
carrierTab[CarrierOpsTab] --> placeRoute[Place Route On Live Map]
placeRoute --> liveMap[LiveMap]
liveMap --> routePoints[Carrier Waypoints]
routePoints --> carrierTab
carrierTab --> spawn[Spawn CVN78]
spawn --> simConnect[AICreateSimulatedObject]
simConnect --> registry[SpawnedCarrierRegistry]
registry --> movement[CarrierMovementController]
movement --> liveTrack[Live Map Carrier Marker]
The first version should support:
Carrier type fixed to Miltech CVN78.
Start location from Live Map click or manual lat/lon.
Initial heading and speed in knots.
Route waypoints from Live Map.
Route modes: straight-line leg sequence, loop route, stop at final waypoint.
Buttons: Place Start, Add Route On Map, Spawn CVN-78, Start Moving, Stop, Despawn if supported by current object-id handling.
Live Map marker with label, heading, speed, and route polyline.
Main technical risk: MSFS may accept Miltech CVN78 through AICreateSimulatedObject, but carrier deck physics/catapults/arresting behavior may depend on Miltech's internal systems and nearest-carrier detection. The MVP should validate the object spawns, moves, and remains a usable moving platform before we add advanced carrier operations.
Validation steps:
Confirm SimConnect assignment event returns an object ID for Miltech CVN78.
Confirm SetDataOnSimObject movement updates affect the boat smoothly.
Confirm an F/A-18 can find/see/land on the moving deck.
Confirm Miltech panel still recognizes the carrier nearby, or document any gap if the panel only recognizes its own spawned/static carriers.
After the MVP works, add:
Preset operating areas, such as east of Oceana/Virginia Beach.
Wind-over-deck helper: compute carrier heading/speed from surface wind and desired recovery wind.
Carrier TACAN/Marshal/LSO-style comms workflow.
Saved carrier routes and named operating boxes.
Additional Miltech ships such as Ticonderoga or Arleigh Burke.