Pour que le labyrinthe reste à sa place nous le déplaçons suivant la rotation et les coordonnées cartésiennes du module. Pour cela on effectue une translation combinée à la rotation.
cell = cell->suivant;
if (destr == 1) {destr = 0;}
}
rp->monde._41=rp->coord_0.x*cos(rp->module_rot)+rp->coord_0.z*sin(rp->module_rot);
rp->monde._43=-rp->coord_0.x*sin(rp->module_rot)+rp->coord_0.z*cos(rp->module_rot);
rotation_Y(&rp->monde, rp->module_rot);
projection(&rp->monde, &(*D3DD));
obj2device_dessin_mesh(mtm_laby->nbr_de_mat, mtm_laby, &(*D3DD), &mtm_laby->obj_mesh);
Pour placer le module adverse on réinitialise la
matrice du module
rp2->monde._42 = -15.0f;
rp2->monde._43 = 0.0f;
rp2->monde._41 = 0.0f;
rp2->monde._11 = rp2->monde._33 = 1.0f; rp2->monde._13 = rp2->monde._31 = 0.0f;
On calcule ensuite le vecteur qui joint les deux modules :
v = (rp->coord_0.x-rp2->coord_0.x , rp->coord_0.z-rp2->coord_0.z)
unsigned int vz = rp->coord_0.z - rp2->coord_0.z;
unsigned int vx = rp->coord_0.x - rp2->coord_0.x;
Pour placer le module adverse on effectue une translation suivant le vecteur v
combinée à la rotation du module 0. Puis on effectue une autre rotation
suivant le module 1, mais comme il est à l'opposé de nous l'angle doit être
inversé.
rp2->monde._41=vx*cos(rp->module_rot)+vz*sin(rp->module_rot);
rp2->monde._43=-vx*sin(rp->module_rot)+vz*cos(rp->module_rot);
rotation_Y(&rp2->monde, rp->module_rot-rp2->module_rot);
projection(&rp2->monde, &(*D3DD));
obj2device_dessin_mesh(mtm_moduleb->nbr_de_mat, mtm_moduleb, &(*D3DD), &mtm_moduleb->obj_mesh);
Enfin on effectue le même raisonnement pour tous
les missiles adverses.
cell = rp2->missile;
while(cell) {
rp2->monde._42 = -15.0f;
rp2->monde._43 = 0.0f;
rp2->monde._41 = 0.0f;
rp2->monde._11 = rp2->monde._33 = 1.0f; rp2->monde._13 = rp2->monde._31 = 0.0f;
vz = rp->coord_0.z - cell->coord.z;
vx = rp->coord_0.x - cell->coord.x;
rp2->monde._41=vx*cos(rp->module_rot)+vz*sin(rp->module_rot);
rp2->monde._43=-vx*sin(rp->module_rot)+vz*cos(rp->module_rot);
rotation_Y(&rp2->monde, rp->module_rot - cell->t_rot);
projection(&rp2->monde, &(*D3DD));
obj2device_dessin_mesh(mtm_missile->nbr_de_mat, mtm_missile, &(*D3DD), &mtm_missile->obj_mesh);
cell = cell->suivant;
}
Téléchargez la source, cliquez ci-dessous :