void WORMHOLE::clbkPostStep(double simt, double simdt, double mjd)
{
for (UINT i = 0; i<oapiGetVesselCount(); i++)
{
OBJHANDLE hvessel = oapiGetVesselByIndex(i);
if (hvessel != GetHandle())
{
//VECTOR3 rpos, rvel,gpos1;
VECTOR3 vesselpos = _V(0, 0, 0);
VECTOR3 gatepos = _V(0, 0, 0);
oapiGetGlobalPos(hvessel, &vesselpos);
oapiGetGlobalPos(hvessel, &gatepos);
VECTOR3 relpos = vesselpos - gatepos;
double distance = length(relpos);
oapiGetRelativePos(hvessel, GetHandle(), &rpos);
//double distance = length(rpos);
oapiGetRelativeVel(hvessel, GetHandle(), &rvel);
GetGlobalPos(gpos1);
sprintf(oapiDebugString(), "DISTANCE %0.4f", distance);
if ((distance<2) && (rpos.z>0) && (rvel.z<0))
{
VESSELSTATUS2 vs_vessel, vs_other_gate;
memset(&vs_vessel, 0, sizeof(vs_vessel));
memset(&vs_other_gate, 0, sizeof(vs_other_gate));
vs_vessel.version = 2;
vs_other_gate.version = 2;
VESSEL *v;
v = oapiGetVesselInterface(hvessel);
v->GetStatusEx(&vs_vessel);
OBJHANDLE h_other_gate;
char myname[16];
char GateA[16];
sprintf(myname, GetName());
sprintf(GateA, "Gate_A");
if (strcmp(myname, GateA) == 0)
{
h_other_gate = oapiGetVesselByName("Gate_B");
}
else{
h_other_gate = oapiGetVesselByName("Gate_A");
}
VESSEL *v_other_gate;
v_other_gate = oapiGetVesselInterface(h_other_gate);
v_other_gate->GetStatusEx(&vs_other_gate);
vs_vessel.rbody = vs_other_gate.rbody;
vs_vessel.rpos = vs_other_gate.rpos;
vs_vessel.vrot = vs_other_gate.vrot;
vs_vessel.arot = vs_other_gate.arot;
VECTOR3 outvel = _V(rvel.x, rvel.y, rvel.z);
VECTOR3 rofs;
GlobalRot(outvel, rofs);
vs_vessel.rvel.x = vs_other_gate.rvel.x + rofs.x;
vs_vessel.rvel.y = vs_other_gate.rvel.y + rofs.y;
vs_vessel.rvel.z = vs_other_gate.rvel.z + rofs.z;
v->DefSetStateEx(&vs_vessel);
}
}
}
}