4.2 KiB
4.2 KiB
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 iADSmartPickup_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
- 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). - Start (
startVehicle): er traktoren solo og har den en husket vogn:- vognen frakoblet og ikke reserveret/lånt →
ADHitch.fetchtil "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).
- vognen frakoblet og ikke reserveret/lånt →
- Stop / "Stop alle" / "Stop alt og parkér":
stopped = true; hver traktor stoppes og køres hjem medADHitch.returnHome(vogn af på sin parkering, traktor til sin egen). Vognen forbliver flowets. - Slet flow: som stop; derefter er vognen ikke længere flowets (flowet findes ikke).
- 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 afwagons, 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: felternestopped,wagonsi records.adRunsController.lua: kroge istartVehicle,stopRun,deleteRun,stopAllRuns,stopAllAndPark,startRun/startAllRuns/queueStartAll(rydstopped).adPool.lua: udelukker vogne ejet af ikke-stoppede flows; traktorer i stoppede flows tæller.adSmartPickup.lua:ADFlowWagons.ticki 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 medstoppedogwagons.- 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.