docs(roadmap): mobile pickup zone on a transport truck + FARP correction - #138
Conversation
Requested by the user: attach a TRZ_ to a transport truck as a mobile troop pickup point, following the truck. Found while grounding it that createTroopZoneAtObject already resolves any unit/static via _linkedUnit (CTLD_zone.lua:1615) - the same anchor mechanism already proven for a ship-anchored zone - so position-following may already work today with zero new code, pending live verification. Also corrects a stale claim in the existing "generic zone-link" entry: it assumed FARP would need the same composite integrity model as FOB; FEAT-FARP-TROOP-PICKUP (PR #137) showed FARP is actually a real DCS Airbase (binary isExist()), reusing CTLDStaticWatcher instead.
Reviewer's GuideUpdates the roadmap with a transport-truck mobile TRZ_ concept and its unresolved automation/cleanup decisions, while correcting the FARP lifecycle documentation to reflect native Airbase existence and CTLDStaticWatcher-based polling. Sequence diagram for a mobile troop pickup zone anchored to a transport trucksequenceDiagram
participant MM as MissionManager
participant ZM as CTLDZoneManager
participant Resolver as _resolveTroopZoneObject
participant Zone as CTLDTroopZone
participant Truck as TransportTruck
MM->>ZM: createTroopZoneAtObject(MonCamion, TRZ_...)
ZM->>Resolver: _resolveTroopZoneObject(MonCamion)
Resolver-->>ZM: Truck Unit
ZM->>Zone: Create zone with linkedUnit
loop While truck exists
Zone->>Truck: isAlive()
Zone->>Truck: getCenter()
Truck-->>Zone: Current position
Zone->>Zone: Update pickup zone position
end
alt Truck destroyed
Zone-->>Zone: Freeze at last known position
end
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
There was a problem hiding this comment.
Hey - I've found 1 issue
Prompt for AI Agents
Please address the comments from this code review:
## Individual Comments
### Comment 1
<location path="dev/roadmap.md" line_range="304-313" />
<code_context>
+
+Constat en explorant le code existant : **la moitié "suivi de position" de cette idée est déjà
+livrée, sans code nouveau.** `createTroopZoneAtObject` résout déjà un `objectName` quelconque —
+zone éditeur, **unité ou statique**, groupe, ou airbase (`_resolveTroopZoneObject`,
+`CTLD_zone.lua:1615`) — et pour une unité/statique/groupe, pose `linkedUnit` sur la
+`CTLDTroopZone` créée, exactement le même mécanisme déjà utilisé pour une TRZ_ ancrée sur un
+navire (`FIX-SHIP-ZONE-ANCHOR-PARITY`). Rien n'y limite le type d'unité à un navire — un camion
+DCS ordinaire (`Unit`) fonctionne déjà de la même façon. Concrètement : un MM peut probablement
+déjà appeler `CTLDZoneManager:createTroopZoneAtObject("MonCamion", "TRZ_...")` aujourd'hui et
+obtenir une zone de pickup qui suit le camion — **à vérifier en test live avant de considérer que
+c'est un vrai gap**, mais rien dans le code lu ne l'empêche.
+
</code_context>
<issue_to_address>
**issue (bug_risk):** The roadmap presents `createTroopZoneAtObject("MonCamion", ...)` as resolving the truck, but `_resolveTroopZoneObject` checks `trigger.misc.getZone(objectName)` before `Unit.getByName(objectName)`. When a Mission Editor trigger zone has the same name as the truck, the function creates a fixed trigger-zone-backed TRZ instead of a truck-linked zone, so the pickup zone does not follow the truck.
**Triggers:** When the transport truck shares its name with a Mission Editor trigger zone.
**Suggested fix:** Document the trigger-zone precedence and require unique truck names, or change the resolver to disambiguate the requested object type.
```suggestion
Constat en explorant le code existant : **la moitié "suivi de position" de cette idée est déjà
livrée, sans code nouveau, sous réserve d'une résolution de nom sans collision.**
`createTroopZoneAtObject` résout un `objectName` quelconque — zone éditeur, **unité ou statique**,
groupe, ou airbase (`_resolveTroopZoneObject`, `CTLD_zone.lua:1615`) — mais `_resolveTroopZoneObject`
consulte d'abord `trigger.misc.getZone(objectName)`, avant `Unit.getByName(objectName)`. Une zone
éditeur portant le même nom qu'un camion prend donc la priorité et produit une TRZ fixe, au lieu
d'une zone liée au camion. Les noms des camions doivent par conséquent être uniques vis-à-vis des
zones trigger de la mission. Pour une unité/statique/groupe effectivement résolu, la fonction pose
`linkedUnit` sur la `CTLDTroopZone` créée, exactement le même mécanisme déjà utilisé pour une TRZ_
ancrée sur un navire (`FIX-SHIP-ZONE-ANCHOR-PARITY`). Rien n'y limite le type d'unité à un navire —
un camion DCS ordinaire (`Unit`) fonctionne déjà de la même façon. Concrètement : un MM peut
appeler `CTLDZoneManager:createTroopZoneAtObject("MonCamion", "TRZ_...")` aujourd'hui si
`MonCamion` est unique par rapport aux zones trigger, et obtenir une zone de pickup qui suit le
camion — **à vérifier en test live avant de considérer que c'est un vrai gap**.
```
</issue_to_address>Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
| Constat en explorant le code existant : **la moitié "suivi de position" de cette idée est déjà | ||
| livrée, sans code nouveau.** `createTroopZoneAtObject` résout déjà un `objectName` quelconque — | ||
| zone éditeur, **unité ou statique**, groupe, ou airbase (`_resolveTroopZoneObject`, | ||
| `CTLD_zone.lua:1615`) — et pour une unité/statique/groupe, pose `linkedUnit` sur la | ||
| `CTLDTroopZone` créée, exactement le même mécanisme déjà utilisé pour une TRZ_ ancrée sur un | ||
| navire (`FIX-SHIP-ZONE-ANCHOR-PARITY`). Rien n'y limite le type d'unité à un navire — un camion | ||
| DCS ordinaire (`Unit`) fonctionne déjà de la même façon. Concrètement : un MM peut probablement | ||
| déjà appeler `CTLDZoneManager:createTroopZoneAtObject("MonCamion", "TRZ_...")` aujourd'hui et | ||
| obtenir une zone de pickup qui suit le camion — **à vérifier en test live avant de considérer que | ||
| c'est un vrai gap**, mais rien dans le code lu ne l'empêche. |
There was a problem hiding this comment.
issue (bug_risk): The roadmap presents createTroopZoneAtObject("MonCamion", ...) as resolving the truck, but _resolveTroopZoneObject checks trigger.misc.getZone(objectName) before Unit.getByName(objectName). When a Mission Editor trigger zone has the same name as the truck, the function creates a fixed trigger-zone-backed TRZ instead of a truck-linked zone, so the pickup zone does not follow the truck.
Triggers: When the transport truck shares its name with a Mission Editor trigger zone.
Suggested fix: Document the trigger-zone precedence and require unique truck names, or change the resolver to disambiguate the requested object type.
| Constat en explorant le code existant : **la moitié "suivi de position" de cette idée est déjà | |
| livrée, sans code nouveau.** `createTroopZoneAtObject` résout déjà un `objectName` quelconque — | |
| zone éditeur, **unité ou statique**, groupe, ou airbase (`_resolveTroopZoneObject`, | |
| `CTLD_zone.lua:1615`) — et pour une unité/statique/groupe, pose `linkedUnit` sur la | |
| `CTLDTroopZone` créée, exactement le même mécanisme déjà utilisé pour une TRZ_ ancrée sur un | |
| navire (`FIX-SHIP-ZONE-ANCHOR-PARITY`). Rien n'y limite le type d'unité à un navire — un camion | |
| DCS ordinaire (`Unit`) fonctionne déjà de la même façon. Concrètement : un MM peut probablement | |
| déjà appeler `CTLDZoneManager:createTroopZoneAtObject("MonCamion", "TRZ_...")` aujourd'hui et | |
| obtenir une zone de pickup qui suit le camion — **à vérifier en test live avant de considérer que | |
| c'est un vrai gap**, mais rien dans le code lu ne l'empêche. | |
| Constat en explorant le code existant : **la moitié "suivi de position" de cette idée est déjà | |
| livrée, sans code nouveau, sous réserve d'une résolution de nom sans collision.** | |
| `createTroopZoneAtObject` résout un `objectName` quelconque — zone éditeur, **unité ou statique**, | |
| groupe, ou airbase (`_resolveTroopZoneObject`, `CTLD_zone.lua:1615`) — mais `_resolveTroopZoneObject` | |
| consulte d'abord `trigger.misc.getZone(objectName)`, avant `Unit.getByName(objectName)`. Une zone | |
| éditeur portant le même nom qu'un camion prend donc la priorité et produit une TRZ fixe, au lieu | |
| d'une zone liée au camion. Les noms des camions doivent par conséquent être uniques vis-à-vis des | |
| zones trigger de la mission. Pour une unité/statique/groupe effectivement résolu, la fonction pose | |
| `linkedUnit` sur la `CTLDTroopZone` créée, exactement le même mécanisme déjà utilisé pour une TRZ_ | |
| ancrée sur un navire (`FIX-SHIP-ZONE-ANCHOR-PARITY`). Rien n'y limite le type d'unité à un navire — | |
| un camion DCS ordinaire (`Unit`) fonctionne déjà de la même façon. Concrètement : un MM peut | |
| appeler `CTLDZoneManager:createTroopZoneAtObject("MonCamion", "TRZ_...")` aujourd'hui si | |
| `MonCamion` est unique par rapport aux zones trigger, et obtenir une zone de pickup qui suit le | |
| camion — **à vérifier en test live avant de considérer que c'est un vrai gap**. |
Summary
TRZ_to a transport truck as a mobile troop pickup point that follows the truck — requested by the user.createTroopZoneAtObjectalready resolves any unit/static via_linkedUnit(the same anchor mechanism already proven for a ship-anchored zone), so the position-following half may already work today with zero new code — flagged as needing live verification, not assumed.FEAT-FARP-TROOP-PICKUP(PR feat(farp): register a troop pickup zone when a FARP scene completes #137) showed FARP is a real DCS Airbase (binaryisExist()), reusingCTLDStaticWatcherinstead — corrected inline.Test plan
Summary by Sourcery
Document mobile troop pickup zones on transport trucks and correct the roadmap’s FARP lifecycle assumptions.
Enhancements:
Documentation: