So I Am trying to get the LER (Lunar Electric Rover) to work in 2016.
I am following fred18's crawler and general vehicle
But when Try to move the vessel rotates wildly.
scn.
So this is what I have to move it:
I am following fred18's crawler and general vehicle
But when Try to move the vessel rotates wildly.
scn.
Code:
LER:LER5
STATUS Landed Moon
POS -33.4375000 41.1184669
HEADING 0.01
ALT 0.000
AROT 135.534 34.803 150.855
RCSMODE 0
AFCMODE 7
IDS 0:560 100 1:564 100
NAVFREQ 0 0
END
So this is what I have to move it:
Code:
void LER2016::clbkPreStep(double simt, double simdt, double mjd) {
rt = oapiGetSize(GetSurfaceRef());
earth_circ = rt * 2 * PI;
each_deg = earth_circ / 360;
grav_acc = GGRAV*oapiGetMass(GetSurfaceRef()) / (rt*rt);
memset(&vs2, 0, sizeof(vs2));
vs2.version = 2;
GetStatusEx(&vs2);
MoveAround();
}
Code:
int LER2016::clbkConsumeBufferedKey(DWORD key, bool down, char *kstate) {
// only process keydown events
if (!down) return 0;
if (KEYDOWN(kstate, OAPI_KEY_NUMPAD8)) {
FORWARDgear = 1;
REVERSEgear = 0;
neutralgear = 0;
LASTGEAR = 0;
return 1;
}
if (KEYDOWN(kstate, OAPI_KEY_NUMPAD4)) {
if (FORWARDgear == 1)LASTGEAR = 1;
if (REVERSEgear == 1)LASTGEAR = 2;
FORWARDgear = 0;
REVERSEgear = 0;
neutralgear = 1;
return 1;
}
if (KEYDOWN(kstate, OAPI_KEY_NUMPAD2)) {
FORWARDgear = 0;
REVERSEgear = 1;
neutralgear = 0;
LASTGEAR = 0;
return 1;
}
return 0;
}
int LER2016::clbkConsumeDirectKey(char *kstate) {
if (!firstTimestepDone) return 0;
if (KEYDOWN(kstate, OAPI_KEY_ADD)) {
if ((FORWARDgear == 1) || (REVERSEgear == 1)){
//pEngine->IncreaseTgtSpeed(down);
double dv = 0.01;
targetSpeed = (targetSpeed + dv);
if (targetSpeed > MAXSPEED) targetSpeed = MAXSPEED;
//SetAnimation(anim_SPEEDCONTROL, targetSpeed);
//increaseTgtSpeed = down;
//decreaseTgtSpeed = false;
}
return 1;
}
else if (KEYDOWN(kstate, OAPI_KEY_SUBTRACT)) {
//pEngine->DecreaseTgtSpeed(down);
if ((FORWARDgear == 1) || (REVERSEgear == 1)){
double dv = 0.01;
targetSpeed = (targetSpeed - dv);
if (targetSpeed <0) targetSpeed = 0;
//SetAnimation(anim_SPEEDCONTROL, targetSpeed);
//decreaseTgtSpeed = down;
//increaseTgtSpeed = false;
}
return 1;
}
return 0;
}
Code:
void LER2016::MoveAround(){
if (FORWARDgear==1)
{
VESSELSTATUS2 vs2;
memset(&vs2, 0, sizeof(vs2));
vs2.version = 2;
GetStatusEx(&vs2);
double d_lat = (targetSpeed*oapiGetSimStep()*cos(vs2.surf_hdg)) / each_deg;
double d_lng = (targetSpeed*oapiGetSimStep()*sin(vs2.surf_hdg)) / each_deg;
vs2.surf_lat += d_lat*RAD;
vs2.surf_lng += d_lng*RAD;
DefSetStateEx(&vs2);
return;
}
}