Ici, il s'agit de créer une porte de garage qui s'ouvre en même temps que le joueur tourne une vanne. A la fin d'Half-Life² EpisodeOne, Gordon ouvre une porte de cette manière pour faire passer Alyx. Il se fait alors canarder par un strider.
Nous avons vu comment réaliser une vanne, dans le chapitre sur les déclencheurs (La VALVe). Nous allons donc en créer une de la même façons (un model parenté à un
momentary_rot_button avec une texture invisible).
Ehh, tu nous avais appris à faire une vanne avec un func_door_rotating. Pourquoi on prend cette nouvelle entité ?
momentary_rot_button se comporte de la même façon que
func_door_rotation, mais il possède quelque chose en plus : il revient à sa position initiale quand on le lâche (quand on lâche la vanne donc).
Vous appellerez ce
momentary_rot_button,
door_vanne.
Ensuite, il faut créer la porte de garage. Faites votre bloc, et transformez-le en func_movelinear. Vous l'appellerez door_garage. La configuration est simple, si ce n'est quelques paramètres :
- Move Direction : c'est la direction dans laquelle le bloc bougera. Ici, la porte va monter, donc sélectionnez Up dans la petite liste déroulante.
- Start Position : c'est le position de départ. Si votre porte est fermée, mettez 0.
- Move Distance : c'est la distance, en unités de Hammer, sur laquelle l'entité va pouvoir bouger. Ca correspond généralement à la hauteur de votre bloc (moins quelques unités).
Revenons à notre
momentary_rot_button. Il y a quelques propriétés à modifier :
- Speed : vitesse de rotation en degrés par secondes
- Distance : c'est le nombre de degrés maximum dont l'entité tournera
- Auto-return Speed : c'est la vitesse de rotation quand la vanne est lâchée et qu'elle revient à sa position initiale
- Start position : position de départ. Mettez 0.
- Start Direction : direction dans laquelle tournera la vanne. Laissez Forward (en avant).
Vous pouvez aussi cocher certains flags comme
Not Solid,
Use Activate et l'axe de rotation (moi c'est
Y Axis).
Passons maintenant aux outputs appliqués sur
door_vanne 
.
| Output named | Targets entities | Via this input | Parameter | Delay |
|---|
| OnFullyClosed |
door_vanne |
Lock |
<none> |
0.00 |
| Position |
door_garage |
SetPosition |
<none> |
0.00 |
Le premier output dit que quand la vanne est complètement fermée, elle s'appele elle même pour se bloquer. Ainsi, elle ne retournera pas à sa position d'origine si elle est complètement fermée.
Pourquoi c'est pas OnFullyOpen ?
C'est tordu ça

. L'état initial est
Open, et l'état final est
Close. Donc quand la vanne est tournée, elle est fermée (close).
Le deuxième output appelle la porte
door_garage à chaque fois que le position de la vanne change (quand vous tournez quoi

). Et à chaque fois on va modifier, avec
SetPosition, la position de la porte sur son axe, en fonction de l'ouverture de la vanne. Donc, plus on tourne, plus la porte s'ouvre

.
J'avais commencé par tester ce système avec HL²DM, et je me disais :
c'est pas possible ça la porte monte par accoups et il faut faire E à chaque fois!. En fait, ça marche beaucoup mieux sous HL². Donc, c'est à privilégier pour les maps solo

.