Last updated: 06/10/2024, 02:17

Current Project: Rejuvenation of Hellkeeper.net

Pathing des véhicules

L'utilisation des véhicules par les bots nécessite un réseau de navigation adapté à la machine considérée. Il existe pour ce faire 4 actors spécifiques, 3 dédiés aux véhicules terrestres, volants et planants (il s'agit respectivement du RoadPathNode, du FlyingRoadPathNode et du HoverPathNode) et un autre, le SpecialVehicleObjective, permettant de signaler des items aux pilotes. Tous sont des sous-classes du PathNode normal.

Actors de pathing des véhicules dans l'actor browser

Véhicules terrestres

Les véhicules terrestres utilisent un réseau de navigation composé de RoadPathNodes.

Réseau de navigation de RoadPathNodes

Leur utilisation est extrêmement simple et leurs paramètres par défaut sont généralement suffisants. Peu de cas particuliers nécessitent de changer leurs propriétés. Le réseau se construit exactement comme le réseau de PathNodes : il suffit de répartir les RoadPathNodes pour couvrir la zone où les bots doivent pouvoir utiliser les véhicules.

Les véhicules, étant beaucoup plus gros que les joueurs, ne circulent qu'entre les RoadPathNodes, sans prendre en compte les PathNodes, InventorySpots et autres points de navigation destinés aux piétons. Ces derniers peuvent en revanche circuler aussi bien sur le réseau normal des points de navigation que sur le réseau des RoadPathNodes, partant du principe que là où un véhicule peut se déplacer, un fantassin a largement la place de passer. Il n'est donc pas nécessaire de doubler chaque RoadPathNode d'un PathNode.

Le RoadPathNode possède une seule propriété spécifique : MaxRoadDist. Il s'agit de la distance maximale jusqu'à laquelle un RoadPathNode en détecte d'autres et crée un chemin. Dans la plupart des cas, il n'est pas nécessaire de changer cette distance. Il est cependant possible d'utiliser cela pour créer un chemin à sens unique en plaçant dans le rayon d'un RoadPathNode un second RoadPathNode au rayon plus petit : ce dernier sera une destination possible alors que le premier sera trop loin pour qu'une liaison soit établie dans le sens inverse.

Un certain nombre de propriétés de la classe NavigationPoint sont également utilisées par le RoadPathNode pour améliorer le comportement des bots aux commandes des véhicules terrestres.

Propriétés du RoadPathNode

Véhicules planants

Les véhicules planants se déplacent au-dessus du sol. Cela leur permet notamment de planer au-dessus de la surface de l'eau, que les véhicules terrestres ne peuvent pas franchir (ils subissent des dégâts tant qu'ils sont immergés). Pour permettre aux bots d'emprunter ce genre de raccourcis, on utilise le HoverPathNode, une sous-classe du RoadPathNode.

HoverPathNodes sur la surface de l'eau de ONS-IslandHop

Le HoverPathNode n'a aucun paramètre spécifique. Il est pré-paramétré pour n'être accessible qu'aux véhicules planants, c'est-à-dire par défaut le Manta. Il s'utilise comme le RoadPathNode, mais les véhicules collés au sol et les piétons ne tentent pas d'emprunter les chemins créés par cet actor.

Véhicules volants

Le pathing des véhicules volants est plus complexe car le fonctionnement du FlyingPathNode est assez déroutant comparé aux autres jalons.

Entièrement dépourvu de paramètres spécifiques, le FlyingPathNode dépend de sa collision. Celle-ci est recalculée à chaque rebuild des chemins de l'IA et étendue au maximum, aussi bien son rayon que sa hauteur, jusqu'à entrer en collision avec un static-mesh ou une surface BSP. Le FlyingPathNode crée alors une connexion (matérialisée par une ligne orange lorsque les paths sont affichés) avec tous les autres FlyingPathNodes du moment que leurs collisions se touchent. La nuance est importante car elle ne nécessite pas que l'un des deux jalons soit dans la collision de l'autre, contrairement au MaxRoadDist du RoadPathNode.

FlyingPathNodes reliés par leur collision

La collision d'un actor sélectionné peut être affichée, comme sur l'image précédente, avec un clic-droit dans la barre de menu d'une des vues et en choisissant Actor puis Radii View.

Affichage des collisions des actors

La hauteur de la collision est importante car elle permet de connecter des FlyingPathNodes sur plusieurs niveaux de hauteur.

FlyingPathNodes reliés par leur collision sur deux niveaux

Notez que la collision du FlyingPathNode de gauche ne descend pas jusqu'au sol car elle touche déjà le plafond. Le cylindre de collision étant centré sur la position de l'actor, il ne peut pas être plus étendu d'un côté que de l'autre.

Le réseau des FlyingPathNode doit se relier au réseau de navigation au sol car les bots sont susceptibles de se poser ou de décoller de n'importe où dans la map. Le réseau aérien doit donc être connecté au réseau terrien un peu partout pour permettre d'atterrir ou de redécoller. Pour ce faire, le FlyingPathNode crée une connexion avec tous les jalons (points de navigation, items, etc.) qui se trouvent dans le rayon horizontal de sa collision. La hauteur de cette collision est ignorée. Cela facilite l'ajustement du pathing car on peut déterminer quels points vont être reliés à quels FlyingPathNodes simplement en affichant le rayon de ces derniers dans la vue de dessus et en regardant les jalons qui entrent dans ce rayon (du moment qu'il existe une ligne de vue dégagée entre les deux points, bien sûr).

FlyingPathNode relié à un PathNode au niveau du sol

Lorsqu'il entre dans un véhicule volant, un bot décolle pour rejoindre l'altitude du FlyingPathNode qu'il tente d'atteindre. Il est donc possible de lui imposer une hauteur de vol en déplaçant verticalement les FlyingPathNodes pour passer au-dessus ou au-dessous d'obstacles.

Le LevelInfo permet de définir la hauteur du StallZ, la hauteur maximale de la map. Si un joueur ou un bot dépasse cette altitude à l'aide d'un véhicule volant, il subira une poussée vers le bas pour le ramener sous ce niveau. Il est possible de placer des FlyingPathNodes au-dessus de cette limite (matérialisée par une ligne bleue dans les vues latérales et frontales de l'éditeur), et ils fonctionneront, mais l'éditeur les signalera au rebuild.

Avertissement de FlyingPathNode hors de la limite verticale

SpecialVehicleObjective

Ce dernier actor permet de signaler à bot qu'un objet spécifique nécessite de sortir d'un véhicule spécifique afin de s'en emparer. En effet, un joueur ou un bot qui conduit ne peut pas interagir avec les items du jeu (ramasser une arme ou un drapeau, etc.). L'exemple classique est le rédempteur au sommet de la tour centrale d'ONS-Torlan, qui n'est accessible qu'en Raptor.

Sommet de la tour de Torlan

Le SpecialVehicleObjective se place là où le bot doit quitter son véhicule. Ses propriétés sont très simples.

Propriétés du SpecialVehicleObjective

© 2005-2025, by Hellkeeper.

Valid XHTML 1.1 & CSS 3