Placement d'entités et props persistants¶
medusa-entity-placement expose start(options, callback), selectEntity(options, callback),
cancel et isActive. Il charge le
modèle, crée une prévisualisation locale ped ou object, capture les contrôles, applique le snap
au sol des objets, nettoie l'entité et renvoie {x, y, z, heading}. Le mode point ne charge ni ne
persiste d'entité : il affiche un cercle au sol et une ligne de heading, puis renvoie le même
transform. E confirme et Retour/Échap annule. Un seul placement est actif.
medusa-admin l'utilise pour les magasins et medusa-changing-rooms pour les vestiaires.
La migration 0016_world_props crée world_props. Les routes internes et web réautorisent
ADMIN_ALLOW_EDIT_WORLD_PROPS; le web applique aussi session Discord et CSRF. medusa-world-props
appelle l'API via medusa-core, compare une empreinte toutes les deux secondes et recrée les objets
locaux seulement lors d'un changement. Les objets sont figés, invincibles et non réseau.
Les mutations sont auditées sous world_prop.create, world_prop.move et world_prop.delete.
La sélection générique vise un objet, Ped ou véhicule selon les options. Elle active le contour uniquement au changement de cible, utilise un cylindre pour les Peds et ne supprime jamais l'entité sélectionnée. Vestiaires et immobilier réutilisent désormais ce contrat partagé.
medusa-world-props applique le même single-flight que les autres référentiels de monde. Son
bootstrap peut retenter les erreurs transitoires ; les polls de deux secondes ne se chevauchent pas,
ne remplacent jamais le cache sur erreur et journalisent uniquement les changements d'état API.