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); } }