Exemplo n.º 1
0
            public void Main()
            {
                if (accelerateTarget == null || accelerateTarget == Vector3D.Zero || accelerateTarget == Vector3D.PositiveInfinity || PID_Controller == null || !accelerateTarget.IsValid())
                {
                    return;
                }

                Vector3D accelerateTargetNormalized = accelerateTarget;
                double   accelerateTargetLength     = accelerateTargetNormalized.Normalize();
                double   error      = Vector3D.Dot(control.WorldMatrix.Forward, accelerateTarget) + accelerateTargetLength;
                double   multiplier = Math.Abs(PID_Controller.NextValue(error, 0.016));

                if (accelerateTargetLength < negligible)
                {
                    accelerateTargetNormalized = Vector3D.Normalize(control.GetShipVelocities().LinearVelocity);
                }

                GyroUtils.PointInDirection(gyros, control, accelerateTargetNormalized, multiplier);
                //ThrustUtils.SetThrustBasedDot(thrusters, accelerateTargetNormalized, multiplier);
                autopilotModule.ThrustToVelocity(control.GetShipVelocities().LinearVelocity + accelerateTarget);


                if (accelerateInDirection && control.GetShipSpeed() >= (speedLimit - 0.01))
                {
                    accelerateTarget = Vector3D.Zero;
                    BoostForward(0);
                    accelerateInDirection = false;
                }
            }
            public void Main()
            {
                if ((currentMode & AutopilotMode.ThrustToVelocity) != 0)
                {
                    autopilotModule.ThrustToVelocity(_targetVelocity);
                }
                else if ((currentMode & AutopilotMode.TravelToPosition) != 0)
                {
                    if (Vector3D.DistanceSquared(autopilotModule.controller.GetPosition(), _targetLocation) < 0.1 && autopilotModule.controller.GetShipSpeed() < 0.01)
                    {
                        currentMode &= ~AutopilotMode.TravelToPosition;
                    }

                    autopilotModule.TravelToPosition(_targetLocation, _maxVelocity, _safetyMarginMult, (currentMode & AutopilotMode.AimInDirection) != 0);
                }

                if ((currentMode & AutopilotMode.AimInDirection) != 0)
                {
                    autopilotModule.AimInDirection(_targetDirection, _targetDirUp);
                }
            }