Voila , ça fait un moment que je suis pas venu, car j'essaye de régler un probléme
ça fait 15 kour que je m'arrache les cheveux la dessus
Faire des tourelles de dir automatique , la tourelle est positionée a l'aide d'un attachement
Parent et loose sur le vaisseau mére
Child et loose sur la tourelle
J'utilise l'attachemenrt child pour la rotation de la tourelle en ascention droite
et l'attachement parent pour pour la rotation en Azimut
Déja que c'est pas facile de faire ce type d'orientation mais en plus je tombe sur ce truc
Déclaration de l'attachement parent sur le mothership Millenium falcon , 2 tourelles
turret[0] = CreateAttachment(false,
_V(0.0,10.0,0.0),
_V(0, 0, 1),
_V(0, 1, 0),
"GTUR1",
false);
turret[1] = CreateAttachment(false,
_V(0.0,-10.0,0.0),
_V(0, 0, -1),
_V(0, 1, 0),
"GTUR2",
false);
dans mon scenard j'indique ça
IANSOLO-SHEWI:MFALCON
STATUS Orbiting Earth
RPOS 6100017.44 2195871.15 -1801242.95
RVEL 2926.870 -6985.005 1402.666
AROT -170.64 34.80 109.40
PRPLEVEL 0:1.000
NAVFREQ 0 0
TURRETSTATE 1162694472 0.0000
END
FTURRET1:GUNTURRET
STATUS Orbiting Earth
RPOS 6100025.18 2195873.55 -1801248.81
RVEL 2926.870 -6985.005 1402.666
AROT -170.64 34.80 -70.60
ATTACHED 0:0,IANSOLO-SHEWI
PRPLEVEL 0:0.000
NAVFREQ 0 0
MOTHERSHIP IANSOLO-SHEWI
GUNMOUNT GTUR1
END
ou MOTHERSHIP nom du vaisseaux mére et GUNMOUNT l' ID de l'attachement
apres avoir tenté plusieur modes de calculs sans résultats j'essaye un truc simple
quelque soit la position du vaisseaux mére l'azimut de la tourelle pointe toujours le nord
par rapport a l'horizon local (plan normal a la droite passant par le centre du vaisseau mére et le centre de la planete
la plus proche) je récupére ça a l' aide de oapiGetHeading
dans le code de la tourelle
je récupére l'attachement parent par
void turret::clbkPostStep (double simt, double simdt, double mjd)
{
if(defence_status != defence_OUI){
double DMin, Distance;
double banka ,pitcha, headinga, bankb ,pitchb, headingb ;
OBJHANDLE VaissADminiHandle;
char minh[128];
char NomTurret[256];
VECTOR3 rpos, vdam1, vdam2, vdam3;
DMin = DistanceMiniVaisseau(&VaissADminiHandle);
oapiGetObjectName (VaissADminiHandle, minh, 128 ) ;
VESSEL *cible = oapiGetVesselInterface (VaissADminiHandle);
if (VaissADminiHandle != NULL) {
strcpy (NomTurret, GetName());//nom de la tourelle courante ID d'attachement GUNMOUNTID
OBJHANDLE CourrantHandle = oapiGetVesselByName (NomTurret);
//OBJHANDLE CourrantHandle = oapiGetVesselByName (SHIPNAME);
oapiGetRelativePos(CourrantHandle, VaissADminiHandle, &rpos);
Distance = sqrt(rpos.x*rpos.x + rpos.y*rpos.y + rpos.z*rpos.z);
OBJHANDLE MshipHandle = oapiGetVesselByName (SHIPNAME);
oapiGetBank (MshipHandle, &banka);oapiGetPitch (MshipHandle,
&pitcha);oapiGetHeading(MshipHandle, &headinga);
VESSEL *Mship = oapiGetVesselInterface (MshipHandle);
DWORD nAttach = Mship->AttachmentCount (false);
for (DWORD j = 0; j < nAttach; j++){ //boucle for next sur le nombre d'attachements
ATTACHMENTHANDLE hAtt = Mship->GetAttachmentHandle (false, j);//capture du handle de
l'attachement
const char *id = Mship->GetAttachmentId (hAtt);//capture de l'ID de l'attachement
if (strncmp (id, GUNMOUNTID, 3))continue;//continue la boucle si pas le bon vdam1
Mship->GetAttachmentParams (hAtt, vdam1 , vdam2, vdam3);
sprintf(oapiDebugString(), "vdam1.x: %.1f vdam1.y: %.1f vdam1.z: %.1f GUNMOUNTID
%s",vdam1.x,vdam1.y,vdam1.z,GUNMOUNTID);
Mship->SetAttachmentParams (hAtt,
_V(vdam1.x, vdam1.y ,vdam1.z ),
_V(sin (headinga),0,cos(headinga)),
_V(0,1,0));// rotation autour de laxe y// du vaisseau SHIPNAME en azimut
}//fin boucle for
}//fin (VaissADminiHandle != NULL)
};//fin if(defence_status != defence_OUI)
}
Mon oapidebugstring m'indique un vdam1.y de !!!!!!!! -10 soit l'inverse de ce que j'ai déclaré + haut
turret[0] = CreateAttachment(false,
_V(0.0,10.0,0.0),
_V(0, 0, 1),
_V(0, 1, 0),
"GTUR1",
false);
si c'est normal, c'est marqué nulle part.
ou alors je me goure ???