Havelock, le 18.08.2009 à 23:10, dit :
Je n'ai sans doute pas bien précisé parce que pour moi ça coule de source mais c'est vrai que j'ai le nez dedans. J'avais tout de même écrit ceci :
Citation
On ne peut pas faire de distinction entre un PNJ passager et un PNJ pilote parce qu'un PNJ ne peut pas piloter. Ce ne sont pas les mouvements du PJ (ou du PNJ pilote supposé) qui donnent les ordres au voilier. La détection des distances que j'ai expliquée plus haut ne sert que pour savoir quelle touche du clavier a été enfoncée par le joueur.
Bien sûr, on pourrait faire que si le PNJ pilote marche, l'effet soit le même que si le joueur enfonce les touches de son clavier mais ça n'a aucune intérêt car il faudrait dans ce cas commencer par faire les scripts qui fassent marcher le PNJ pilote dans le bon sens, au bon moment, y compris la marche arrière et les pas de côté. Autant faire directement la programmation du déplacement du voilier et laisser le PNJ immobile à une place fixe.
Ce qui peut rendre difficile la compréhension du fonctionnement, c'est qu'en général les véhicules dans Morrowind suivent le PJ mais là, c'est l'inverse. C'est le PJ qui est sans cesse replacé sur le voilier et on pourrait même télécommander le voilier et le faire se déplacer en laissant le PJ au même endroit. (C'est d'ailleurs comme ça que le joueur pourra déplacer les balises (waypoints) sur la carte).
Si tu regardes par exemple le fonctionnement des chevaux du Ranch Pégase, quand le PJ se tourne par l'action de la souris, le cheval se tourne également et pour que le PJ puisse se tourner (et le joueur regarder ailleurs que devant le PJ) sans que ça fasse tourner le cheval, il faut déconnecter temporairement le lien "cheval->PJ" en appuyant sur une touche détectable (discrétion).
Un véhicule primaire qui fonctionne selon le principe qu'il doit suivre le PJ réagit directement à tout mouvement du PJ. Le PJ avance, il avance, le PJ marche en arrière, il recule et si le PJ pivote d'un coup de 180°, il pivote aussi de 180°
Un véhicule plus élaboré sur le même principe peut temporiser certaines actions pour un rendu moins artificiel. Par exemple, si le PJ pivote de 180°, le véhicule pivotera dans le même sens mais de 1° par frame, jusqu'à ce que l'angle du PJ soit atteint. Si le PJ va vers l'avant, ça enclenche la marche avant du véhicule jusqu'à ce que le PJ marche vers l'arrière (ce qui mettra fin à la marche avant).
C'est d'ailleurs comme ça que fonctionnaient mes premiers scripts. Mais ça ne me convenait pas parce que avec ce système, le PJ n'est pas libre de se tourner a volonté sauf en actionnant une touche à chaque fois. Et la seule touche pour laquelle il existe une fonction de détection est "discrétion" et j'utilise cette touche pour les commandes avec MessageBox. (Il y a aussi la détection de la course mais ce n'est pas bien adapté).
Avec mon système actuel, rotations et mouvements du voilier sont totalement indépendants de ceux du PJ. Le PJ peut par exemple pivoter vers la droite (par l'action de la souris) pendant que le voilier pivote vers la gauche parce que la barre est à gauche. Et si le joueur ne fait pas pivoter le PJ avec la souris, le PJ pivote dans le sens du voilier. Et ceci, sans avoir besoin d'appuyer sur une touche pour les déconnecter temporairement. C'est comme dans la vie. Si tu es sur un véhicule qui tourne vers la gauche et que tu veux continuer à regarder un point fixe, il faut que tu pivotes vers la droite (à part que dans la vie, tu commences d'abord par tourner la tête et quand tu ne peux pas la tourner plus parce que tu n'es pas la gamine du film l'exorciste, tu fais pivoter ton corps).
Bref, le voilier ne suivant pas les mouvements du PJ, un PNJ pilote n'aurait aucun sens.
Pour l'histoire des pieds du compagnon, il ne faut jamais qu'on puisse les voir. Le pont du bateau monte et descend en cours de navigation. La position z du compagnon étant quand à elle fixe, on verrait le pont passer des pieds au genoux du compagnon (ça casse l'ambiance ! ). Et même si on repositionne la hauteur du PNJ à chaque frame pour qu'elle suive celle changeante du pont, quand le voilier giterait, il se retrouverait avec un pied qui touche le pont et l'autre dans le vide (ou un pied sur le pont et un autre à l'intérieur du bateau).
Pour le PJ, ce n'est pas un problème car en vue à la première personne, on ne voit pas ses pieds. Note que j'ai essayé de faire giter le PJ en même temps que le voilier. Contrairement à ce qu'en dit le MSfD, c'est tout à fait possible de donner n'importe quel angle au PJ (x et y inclus). On peut par exemple faire marcher le PJ penché vers l'avant pour faire un effet de vieillissement ou le faire marcher la tête en bas si on veut. Mais sur le voilier, ça n'a pas donné la sensation à laquelle je m'attendais. Je crois que ça vient du fait que lorsqu'on est sur un objet qui penche dans la vie réelle, on compense automatiquement avec la tête pour garder un regard horizontal. Donc, incliner le PJ pour avoir une vision penchée quand le voilier gite donnait une sensation plus artificielle qu'en le laissant droit.
Voili.