/* Effectue la rotation et déplace un objet basé sur des polygones autour de trois axes. Le mouvement est implémenté seulement le long de l'axe Z. Testé avec Borland C++ 4.02 en modèle small par Jim Mischel 12/16/94. */ #include "polygon.h" void RotateAndMovePObject(PObject * ObjectToMove) { if (--ObjectToMove->RDelayCount == 0) { /* effectue une rotation */ ObjectToMove->RDelayCount = ObjectToMove->RDelayCountBase; if (ObjectToMove->Rotate.RotateX != 0.0) AppendRotationX(ObjectToMove->XformToWorld, ObjectToMove->Rotate.RotateX); if (ObjectToMove->Rotate.RotateY != 0.0) AppendRotationY(ObjectToMove->XformToWorld, ObjectToMove->Rotate.RotateY); if (ObjectToMove->Rotate.RotateZ != 0.0) AppendRotationZ(ObjectToMove->XformToWorld, ObjectToMove->Rotate.RotateZ); ObjectToMove->RecalcXform = 1; } /* Se déplace sur Z, en vérifiant les rebonds et les arrêts */ if (--ObjectToMove->MDelayCount == 0) { ObjectToMove->MDelayCount = ObjectToMove->MDelayCountBase; ObjectToMove->XformToWorld[2][3] += ObjectToMove->Move.MoveZ; if (ObjectToMove->XformToWorld[2][3]>ObjectToMove->Move.MaxZ) ObjectToMove->Move.MoveZ = 0; /* s'arrête quand il est suffisamment près */ ObjectToMove->RecalcXform = 1; } }