Une énorme étape vient d'être franchie sur Flare. Un vaisseau est désormais capable de s'orienter automatiquement dans une direction arbitraire, quelles que soient son orientation et vitesse angulaire initiales. L'appui sur une touche permet maintenant à l'autopilote de prendre le contrôle du vaisseau pour le pointer dans une direction prédéfinie (par exemple, la direction du mouvement ou le dock d'une station).
Le mouvement a une précision parfaite (0° d'écart à la commande, 0°/s de vitesse angulaire) et une grande stabilité qui lui permet de résister à un choc par exemple, au prix d'un mouvement pas forcément idéal puisqu'il peut se faire en deux temps (déplacement puis correction).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 | // Rotation data
FQuat LocalCommand = WorldToLocal(AutoAttitudeRotationCommand);
float RemainingTravelDistance = GetRotationAmount(LocalCommand, true);
// Detect if we are going away from the target
static float PreviousRemainingTravelDistance = 360;
bool PilotError = (RemainingTravelDistance > PreviousRemainingTravelDistance);
PreviousRemainingTravelDistance = RemainingTravelDistance;
// Under this angle we consider the variation negligible, and ensure null delta + null speed
if (RemainingTravelDistance < 0.5)
{
IsManual = true;
AngularVelocity = NULL_QUAT;
TargetAngularVelocity = NULL_QUAT;
PreviousRemainingTravelDistance = 360;
AddActorLocalRotation(LocalCommand.Rotator(), true);
}
// Brake if "close" to target or going away from it
else if (RemainingTravelDistance <= CurrentAngularStopDistance || PilotError)
{
TargetAngularVelocity = NULL_QUAT;
}
// The rest of the time we try to follow the command
else
{
TargetAngularVelocity = LocalCommand;
}
|
Je suis conscient que ça n'a l'air de rien, basiquement c'est juste le contrôle de la rotation du vaisseau… Mais c'est une avancée majeure.