// RCS control modes (based on stock Dragonfly's thruster controls)
double tlevel; // thruster setting
double tlevel_r; // reciprical of 'tlevel'
static int lin_x,lin_y,lin_z;
static int rot_x,rot_y,rot_z;
//dlevel=(VERN_handle>0?1:0.1); //vernier or not!
double dlevel = 1; // **no vern handle so I'm leaving this as 1**
switch (SWITCH_PITCH_CONT)
{
case 2: // Mode Cont. (orbiter normal)
// don't do anything
break;
case 1: // Pulse Mode
if (pinput != 0)
{
DelThrusterGroup(THGROUP_ATT_PITCHUP);
DelThrusterGroup(THGROUP_ATT_PITCHDOWN);
if ((tlevel = GetManualControlLevel(THGROUP_ATT_PITCHUP, MANCTRL_ANYDEVICE, MANCTRL_ROTMODE)) && (!rot_x++)) SetThrusterGroupLevel(th_rot_pup, tlevel*dlevel);
if ((tlevel_r = GetManualControlLevel(THGROUP_ATT_PITCHDOWN, MANCTRL_ANYDEVICE, MANCTRL_ROTMODE)) && (!rot_x++)) SetThrusterGroupLevel(th_rot_pdown, tlevel_r*dlevel);
if (tlevel + tlevel_r==0) rot_x=0;
//sprintf(oapiDebugString(), "tlevel %f, tlevel_r %f, rot_X %f", tlevel, tlevel_r, rot_x);
}
break;
case 0: // Direct Mode (Manual inputs only)
if (oapiGetFocusInterface() == this) // Otherwise Spider will be detecting your control inputs even when focus is on a different vessel
{
DelThrusterGroup(THGROUP_ATT_PITCHUP);
DelThrusterGroup(THGROUP_ATT_PITCHDOWN);
SetThrusterGroupLevel(th_rot_pup,-pinput*dlevel);
SetThrusterGroupLevel(th_rot_pdown, pinput*dlevel);
}
break;
} // end pitch control switch
switch (SWITCH_ROLL_CONT)
{
case 2: // Mode Cont. (orbiter normal)
// don't do anything
break;
case 1: // Pulse Mode
if (rinput != 0)
{
DelThrusterGroup(THGROUP_ATT_BANKRIGHT);
DelThrusterGroup(THGROUP_ATT_BANKLEFT);
if ((tlevel = GetManualControlLevel(THGROUP_ATT_BANKRIGHT, MANCTRL_ANYDEVICE, MANCTRL_ROTMODE)) && (!rot_y++)) SetThrusterGroupLevel(th_rot_rright, tlevel*dlevel);
if ((tlevel_r = GetManualControlLevel(THGROUP_ATT_BANKLEFT, MANCTRL_ANYDEVICE, MANCTRL_ROTMODE)) && (!rot_y++)) SetThrusterGroupLevel(th_rot_rleft, tlevel_r*dlevel);
if ( tlevel+tlevel_r == 0) rot_y=0;
//sprintf(oapiDebugString(), "tlevel %f, tlevel_r %f, rot_X %f", tlevel, tlevel_r, rot_y);
}
break;
case 0: // Direct Mode (Manual inputs only)
if (oapiGetFocusInterface() == this)
{
DelThrusterGroup(THGROUP_ATT_BANKRIGHT);
DelThrusterGroup(THGROUP_ATT_BANKLEFT);
SetThrusterGroupLevel(th_rot_rright, rinput*dlevel);
SetThrusterGroupLevel(th_rot_rleft,-rinput*dlevel);
}
break;
}// end roll control switch
switch (SWITCH_YAW_CONT)
{
case 2: // Mode Cont. (orbiter normal)
// don't do anything
break;
case 1: // Pulse Mode
if (yinput != 0)
{
DelThrusterGroup(THGROUP_ATT_YAWRIGHT);
DelThrusterGroup(THGROUP_ATT_YAWLEFT);
if ((tlevel = GetManualControlLevel(THGROUP_ATT_YAWRIGHT, MANCTRL_ANYDEVICE, MANCTRL_ROTMODE)) && (!rot_z++)) SetThrusterGroupLevel(th_rot_yright, tlevel*dlevel);
if ((tlevel_r = GetManualControlLevel(THGROUP_ATT_YAWLEFT, MANCTRL_ANYDEVICE, MANCTRL_ROTMODE)) && (!rot_z++)) SetThrusterGroupLevel(th_rot_yleft, tlevel_r*dlevel);
if ( tlevel+tlevel_r == 0) rot_z=0;
//sprintf(oapiDebugString(), "tlevel %f, tlevel_r %f, rot_X %f", tlevel, tlevel_r, rot_z);
}
break;
case 0: // Direct Mode (Manual inputs only)
if (oapiGetFocusInterface() == this)
{
DelThrusterGroup(THGROUP_ATT_YAWRIGHT);
DelThrusterGroup(THGROUP_ATT_YAWLEFT);
SetThrusterGroupLevel(th_rot_yright,-yinput*dlevel);
SetThrusterGroupLevel(th_rot_yleft, yinput*dlevel);
}
break;
}// Yaw control switch