# Flow-vogne — design Dato: 2026-09-28 · Status: godkendt i chat ("1 vognen hører til flowet", "1 automatisk", "ja alle tre", "når du har det hele klar"). Bygger på maskinpuljen (`2026-09-28-maskinpulje-design.md`). ## Formål Alle påhæng har nu egen AD-parkering "P X" og en markør "Connect P X". Flows (fodring, mælk, slurry …) skal ikke længere have traktor og vogn låst sammen: et flow henter **sin egen** vogn, når det starter, og når flowet ikke har noget job længere, køres vognen på plads og traktoren hjem, så begge bliver ledige i puljen. ## Brugerens valg | Spørgsmål | Valg | |---|---| | Hvem ejer en flow-vogn? | Flowet. Puljen må kun låne den, når flowet er stoppet/slettet/uden bygning | | Hvordan kendes flowets vogn? | Automatisk: vognen der hænger på flowets traktor huskes pr. traktor | | Hvornår "intet job"? | Alle tre: bygning væk, flow slettet, flow stoppet | | Mejetærskere/skærebord | Uændret — skærebord er aldrig i puljen; mejetærsker henter ikke redskaber | ## Begreber - **Flowets vogn:** `run.wagons = {[traktorId] = vognId}`. Opdateres automatisk: hænger der et redskab bagpå en af flowets traktorer (mens flowet ikke er stoppet), huskes det som traktorens vogn. Gemmes i `ADSmartPickup_runs.xml` (`wagons="traktorId=vognId;…"`). - **Stoppet flow:** `run.stopped = true`, gemt. Sættes af Stop på flowet, "Stop alle"/"Stop alt og parkér" og "bygning væk"; ryddes af Start / "Start alle". Ikke udledt af om AD kører (en traktor ved et Wait-punkt kan holde stille uden at flowet er stoppet). - **Bygning væk:** en bygning i flowets kilde-/mål-/lagerliste findes ikke længere som placeable (uniqueId) i to tjek i træk (60 s mellem tjek). ## Adfærd 1. **Husk vogn** (hvert 10. s): for hvert ikke-stoppet flow og hver traktor med et bagerste redskab → `wagons[traktor] = redskab` (ændringer gemmes med næste gem). 2. **Start** (`startVehicle`): er traktoren solo og har den en husket vogn: - vognen frakoblet og ikke reserveret/lånt → `ADHitch.fetch` til "Connect ", derefter startes traktoren i flowet som i dag. Fanen/loggen: "henter sin vogn". - vognen er lånt ud / koblet på en anden → traktoren venter ("venter på sin vogn"), der prøves igen hvert 10. s. - vognen findes ikke eller har ingen Connect-markør → startes som i dag (solo; valideringen afgør). 3. **Stop / "Stop alle" / "Stop alt og parkér"**: `stopped = true`; hver traktor stoppes og køres hjem med `ADHitch.returnHome` (vogn af på sin parkering, traktor til sin egen). Vognen forbliver flowets. 4. **Slet flow**: som stop; derefter er vognen ikke længere flowets (flowet findes ikke). 5. **Bygning væk**: flowet stoppes som i 3, markeres i loggen og med en besked: "Flow 'X': bygning findes ikke længere — stoppet, traktorer kørt hjem". ## Puljen og flows - `ADPool.collect`: traktor i et flow er kun puljetraktor, når flowet er **stoppet**. - Puljeredskab: en vogn, der er husket af et **ikke-stoppet** flow, er aldrig puljeredskab. - `ADFieldWork.getRigs`: uændret for kørende flows; traktorer i stoppede flows må indgå. ## Komponenter - `adFlowWagons.lua` (nyt): ren logik (serialisering af `wagons`, beslutning ved start: fetch/wait/start, "bygning væk"-debounce, ejer-opslag) + spil-del (tick: husk vogne, ventende starter, bygningstjek; `fetchThenStart`, `sendHome(run)`). - `adRuns.lua`/`adRunsStorage.lua`: felterne `stopped`, `wagons` i records. - `adRunsController.lua`: kroge i `startVehicle`, `stopRun`, `deleteRun`, `stopAllRuns`, `stopAllAndPark`, `startRun`/`startAllRuns`/`queueStartAll` (ryd `stopped`). - `adPool.lua`: udelukker vogne ejet af ikke-stoppede flows; traktorer i stoppede flows tæller. - `adSmartPickup.lua`: `ADFlowWagons.tick` i update-løkken. ## Test - `tests/test_adFlowWagons.lua`: serialisering frem/tilbage, startbeslutning (fetch/wait/start), debounce af bygning væk, ejer-opslag (stoppet vs kørende). - `tests/test_adRuns.lua`: records med `stopped` og `wagons`. - In-game: savegame2 — stop et fodringsflow → vogne sættes på plads, traktorer hjem; start det → traktorerne henter deres egne vogne og kører. ## Uden for scope - Valg af vogn i GUI (automatisk er valgt). - At et flow tager en anden vogn end sin egen.