76 lines
4.2 KiB
Markdown
76 lines
4.2 KiB
Markdown
# 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 <vognens parkering>", 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.
|