Les path_track

Ici, on ne rigole plus. Il est temps de voir ce que sont les path_track !

Derrière ce nom un peu barbare, se trouve en réalité quelque chose de simple à comprendre (le nom, c'est juste pour effrayer), mais complexe à utiliser. Nous allons tout de suite entrer dans le vif du sujet :) .

Que sont les path_track ?

path_track est à la fois le nom d'une entité, et à la fois un terme qu'ont les mappeurs pour désigner un moyen de faire bouger des entités en suivant un chemin déterminé.

Un chemin : c'est la clé d'utilisation des path_track. Path veut dire chemin et track, ça veut dire voie.

Les path_track servent à définir un chemin - un itinéraire - par lequel va se déplacer une entité, généralement un func_tracktrain. Dans func_tracktrain, il y a le mot train . Quand on parle de path_track pour désigner le moyen de déplacer des entités, on peut aussi parler de train.

Regardez cette petite mise en situation :

Image utilisateur

Le joueur doit franchir le passage, sans tomber dans l'eau. Pour ce faire, j'ai créé une plateforme qui se déplacera en suivant l'itinéraire que j'ai tracé en utilisant mes talents de graphiste (le premier kiri... :-° ). Grâce aux path_track, nous allons définir cet itinéraire pour que la plateforme le suive et amène le joueur de l'autre côté.

Tracer l'itinéraire

Entité

Type

Description

path_track

Point

Permet définir un point de passage pour un "train"

Dans un premier temps, il convient de placer un premier path_track qui fera office de point de départ. Placez-le, si possible, au centre de la plateforme, et donnez-lui comme nom path_0 (soyons geeks, comptons à partir de 0 ^^ ), comme ceci :

Image utilisateur

Le truc est de placer un path_track à chaque angle pour indiquer à la plateforme qu'elle va devoir changer de direction. Ainsi, dans mon exemple, j'ai besoin de 4 path_track : le départ, le premier angle, le deuxième, et l'arrivée.

Pour placer le deuxième path_track, il y a deux méthodes : une normal, et une super facile pour les faignants. La méthode normale est tout simplement de créer un autre path_track avec l'outil de création d'entités. Il faut ensuite nommer l'entité.
La deuxième méthode, ma préférée, consiste à dupliquer le path_track déjà créé (souvenez-vous, vous sélectionnez l'entité, et en maintenant la touche Shift (Majuscule) enfoncée, vous déplacez l'entité). Et c'est là que la fainéantise se dévoile : Hammer renomme automatiquement la nouvelle entité, en ajoutant une unité : path_0 devient donc path_1.

Ouvrez les propriétés de path_0. La propriété Next Stop Target vaut path_1. Cette propriété sert à définir quel sera le prochain path_track que la plateforme devra atteindre. C'est pour ça que la deuxième méthode est pratique, car c'est Hammer qui va s'occuper de définir cette propriété.

Ainsi, de fil en aiguille, en dupliquant à chaque fois le dernier path_track, vous allez créer votre chemin. Vous pouvez vérifier que le chemin est correctement créé en regardant les vues Top et 3D : une ligne relie les différents path_track, comme ceci :

Image utilisateur

Les propriétés

Il faut savoir que les path_track, en plus d'agir comme des "angles", agissent un peu comme des points de contrôle à partir desquels il est possible par exemple de définir une nouvelle vitesse pour l'élément qui suit le trajet (ici la plateforme).

Les tracks ont donc la propriété New Train Speed qui permet de redéfinir la vitesse du train dès qu'il franchit le point. Une valeur de 0 permet de conserver la vitesse du train (il n'y a donc pas de changement de vitesse).

La propriété Branch Path ressemble à Next Stop Target, mais sert à faire un aiguillage (comprenez, un chemin alternatif au chemin normal). J'y reviendrai avec un exemple.

Orientation Type sert à redéfinir l'orientation que prendra le train :

  • Face direction of motion : si le path_track dit d'aller à droite, le train va s'orienter pour tourner à droite (il s'oriente en fait face un path_track suivant). C'est le comportement normal d'un honnête train.

  • No change : la direction reste toujours la même. C'est la valeur que je choisis pour mon exemple, puisque je n'ai pas besoin que la plateforme s'oriente (elle est carrée, et puis ça ne sert à rien ^^ ).

  • Face this path_track's angles : le train s'oriente en fonction de l'angle du path_track.

Côté flags

  • Disabled : le path est désactivé, le train ne peut donc pas passer par là. Il faudra donc activer ce path_track avec un input (EnablePath)

  • Fire once : le train ne peut passer qu'une seule fois sur ce path. Après le passage du train, l'entité est désactivée

  • Branch reverse : Branch Path fait office de Next Stop target (et à fortiori, Next Stop Target fait office de Branch Path)

  • Disable train : le train s'arrête sur ce path

Inputs et Outputs

Inputs

Parmi les inputs, en voici quelques-uns qui peuvent se révéler utiles :

ToggleAlternatePath, EnableAlternatePath et DisableAlternatePath : ces inputs permettent de contrôler l'aiguillage. Si vous l'activez, le path spécifié dans la propriété Branch Path sera activé, et le train suivra ce chemin.

TogglePath, EnablePath et DisablePath : ceux-ci permettent, comme vous devriez le deviner, de contrôler l'état du path_track : toggle, activé et désactivé.

Output

Il n'y a qu'un output : OnPass qui est déclenché quand le train passe par le path.

Maintenant, le train

Entité

Type

Description

func_tracktrain

Bloc

Permet créer un train parcourant un chemin de path_track

Le chemin est mis en place, passons au train (à la plateforme).

Sélectionnez toute votre plateforme, et transformez-la en func_tracktrain.

A l'inverse des path_track, func_tracktrain possède assez bien de propriétés. Comme toujours, leur fonctionnement est généralement simple. Je fais comme d'habitude l'impasse sur les propriétés déjà connues.

Func_tracktrain permet de définir les propriétés globales du train. Les path_track peuvent modifier certaines valeurs (comme la vitesse), mais si par exemple la vitesse maximale du train est fixée à 100 unités/seconde, un path_track ne peut pas définir une nouvelle vitesse de 150 unités/secondes. C'est donc les propriétés du func_tracktrain qui prévalent sur celles des path_track

  • First Stop Target : une des propriétés les plus importantes : le nom du path_track de départ. Mettez donc path_0 pour coller à mon exemple.

  • Max Speed : la vitesse maximale du train.

  • Initial Speed : la vitesse initiale du train. 0 = arrêt.

  • Change Velocity : c'est la façon dont le train change de vitesse, si une nouvelle vitesse est spécifiée dans le path_track qu'il traverse. Je vous conseille de laisser Instantaneously.

  • Change angles : changement de direction. Mettez Never pour que le train ne change pas de direction à chaque part_track. Cette propriété prévaut donc dur les propriétés Orientation Type des path_track

  • Distance Between the Wheels : la distance entre les roues de devant et celles de derrière. Si vous faites un "vrai" train (un wagonnet sur des rails par exemple), cette valeur est importante et permet au moteur Source de mieux gérer les tournants. Ici, c'est pas important. Si vous avez dur de mesurer la distance, mettez la longueur du train, et ça devrait marcher :) .

  • Height above track : la distance entre le train et les "rails" (si on voit des rails, ce qui n'est pas le cas dans notre exemple).

  • Bank Angle on Turns : le degré d'inclinaison du train quand il prend un tournant. Laissez 0, le moteur Source saura bien se débrouiller seul ^^ .

Les autres propriétés sont en rapport avec le bruit de train, c'est facile à comprendre :) .

Voici maintenant quelques flags :

  • No Pitch : le train ne tangue pas (il ne balance pas de gauche à droite dans les tournants).

  • No User Control : le train n'est pas contrôlable par le joueur (avec un func_traincontrols ).
    <puce>Passable : le joueur passe au travers.

  • Fixed orientation : l'orientation est toujours la même. J'ai coché ce flag pour mon exemple.

Comme mon train est arrêté par défaut (Initial Speed valant 0), il faut que le train démarre quand le joueur se positionne dessus. Pour cela, rien de plus facile : un trigger_once qui déclenche le démarrage (en marche avant du train : StartForward) du train :

Image utilisateur

Voici quelques inputs utiles :

  • Stop : stoppe le train

  • StartForward : démarre le train, en marche avant

  • StartBackward : démarre le train, en marche arrière

  • Resume : redémarre le train s'il avait été stoppé (le contraire de Stop en fait)

  • Reverse : inverse la direction du train

Avec un aiguillage

Je vous ai parlé du Branch Path qui permet de spécifier un chemin alternatif à un path_track. Nous allons donc le mettre en pratique pour faire un l'itinéraire pourvu d'un aiguillage. Voici la maquette :

Image utilisateur

L'aiguillage se fait donc sur le path_2. Sa propriété Branch Path pointe sur le premier path_track du petit chemin dans le bas à gauche de l'image.

J'ai créé un trigger_once (le bloc sélectionné sur l'image). Si le joueur le traverse, le chemin alternatif est activé, et le train sera aiguillé vers la deuxième sortie, en suivant ma jolie flèche verte. L'output est défini de cette façon :

Output named

Targets entities

Via this input

Parameter

Delay

OnTrigger

path_2

EnableAlternatePath

<none>

0.00

Reportez-vous à la première partie pour les inputs des path_track ;) .

Mouvement perpétuel

La boucle

Il est possible de faire un train qui tourne en rond, qui n'a pas de fin. Ca peut être pratique ^^ .
Faire ce genre de truc est très très simple puisqu'il suffit de connecter le dernier path_track du chemin au path_track de départ. Ainsi, quand le train passe par le dernier path, il est dirigé vers le premier, et le cycle recommence :) :

Image utilisateur

Le va-et-vient

Si vous avez joué à Portal, vous devez certainement comprendre d'où vient mon inspiration pour les plateformes qui se déplacent ^^ . Si vous n'avez pas joué à Portal, sachez qu'il y a plusieurs épreuves qui se déroulent en utilisant des plateformes de ce type.
Il y a aussi une autre version de la boucle infinie qui consiste à faire bouger la plateforme d'un point A vers un point B, puis du point B vers le point A. Bref, la plateforme fait continuellement un aller-retour entre les deux extrémités du chemin :

Image utilisateur

Il n'y a pas de secret, ça fonctionne exactement comme la boucle infinie. Le point A pointe vers B, et B pointe vers A :) .

Des utilisations des path_track, il y en a des tonnes.

L'utilisation de base est de faire des trains, mais j'ai choisi de vous les enseigner avec des plateformes. C'est un choix discutable, mais ça me permettait de faire des schémas simples, des mises en situation simples et d'avoir une configuration minimale.

Le must est d'utiliser les path_track pour faire un train qui accélère sur une longue distance, qui ralentit dans un tournant et qui reprend de la vitesse après. D'ailleurs, en parlant de tournants, si vous en faites des vrais, il vous faudra plusieurs path_track, pour ne pas que le train tourne "d'un coup", sinon ça sera particulièrement moche et pas réaliste ;) .

On peut aussi utiliser les path_track pour faire un ascenseur sur plusieurs étages (sur un étage, une func_door suffit ^^ ), dans lequel chaque path_track est un arrêt d'étage. C'est plus complexe à gérer, mais c'est possible :) .