public void SetMode(AttitudeMode mode, AttitudeButtonState input)
{
this.attitideActive = input.Active;
if (!input.Active)
{
return;
}
switch (mode)
{
case AttitudeMode.MANEUVERNODE:
if (input.MN != Quaternion.identity)
{
Target = input.MN;
Reference = AttitudeReference.INERTIAL;
}
else
{
Target = Quaternion.LookRotation(vessel.ReferenceTransform.up, -vessel.ReferenceTransform.forward);
Reference = AttitudeReference.INERTIAL;
}
break;
case AttitudeMode.KILLROT:
Target = Quaternion.LookRotation(vessel.ReferenceTransform.up, -vessel.ReferenceTransform.forward);
Reference = AttitudeReference.INERTIAL;
break;
case AttitudeMode.PROGRADE:
Target = Direction(Vector3d.forward, AttitudeReference.ORBIT);
Reference = AttitudeReference.ORBIT;
break;
case AttitudeMode.RETROGRADE:
Target = Direction(Vector3d.back, AttitudeReference.ORBIT);
Reference = AttitudeReference.ORBIT;
break;
case AttitudeMode.SRF_PROGRADE:
Target = Direction(Vector3d.forward, AttitudeReference.SURFACE_VELOCITY);
Reference = AttitudeReference.SURFACE_VELOCITY;
break;
case AttitudeMode.SRF_RETROGRADE:
Target = Direction(Vector3d.back, AttitudeReference.SURFACE_VELOCITY);
Reference = AttitudeReference.SURFACE_VELOCITY;
break;
case AttitudeMode.NORMAL_PLUS:
Target = Direction(Vector3d.left, AttitudeReference.ORBIT);
Reference = AttitudeReference.ORBIT;
break;
case AttitudeMode.NORMAL_MINUS:
Target = Direction(Vector3d.right, AttitudeReference.ORBIT);
Reference = AttitudeReference.ORBIT;
break;
case AttitudeMode.RADIAL_PLUS:
Target = Direction(Vector3d.up, AttitudeReference.ORBIT);
Reference = AttitudeReference.ORBIT;
break;
case AttitudeMode.RADIAL_MINUS:
Target = Direction(Vector3d.down, AttitudeReference.ORBIT);
Reference = AttitudeReference.ORBIT;
break;
case AttitudeMode.SURFACE:
if (input.USEROL)
Target = Quaternion.AngleAxis(input.HDG, Vector3.up) * Quaternion.AngleAxis(-input.PIT, Vector3.right) * Quaternion.AngleAxis(-input.ROL, Vector3.forward);
else
Target = Direction(Quaternion.AngleAxis(input.HDG, Vector3.up) * Quaternion.AngleAxis(-input.PIT, Vector3.right) * Vector3d.forward, AttitudeReference.SURFACE_NORTH);
Reference = AttitudeReference.SURFACE_NORTH;
break;
}
}