void update() { if (TransferTime < 0) { TrajectoryCalculator.ClosestApproach(Orbit, TargetOrbit, StartUT, VSL.Geometry.MinDistance, out AtTargetUT); TransferTime = AtTargetUT - StartUT; } else { AtTargetUT = StartUT + TransferTime; } var obt = TrajectoryCalculator.NextOrbit(Orbit, AtTargetUT); var t_orbit = TrajectoryCalculator.NextOrbit(TargetOrbit, AtTargetUT); AtTargetPos = obt.getRelativePositionAtUT(AtTargetUT); AtTargetVel = obt.getOrbitalVelocityAtUT(AtTargetUT); TargetPos = TrajectoryCalculator.RelativePosAtUT(obt.referenceBody, t_orbit, AtTargetUT); AtTargetRelPos = AtTargetPos - TargetPos; DistanceToTarget = AtTargetRelPos.magnitude - VSL.Geometry.MinDistance; DirectHit = DistanceToTarget < 1; DistanceToTarget = Utils.ClampL(DistanceToTarget, 0); BrakeDeltaV = t_orbit.GetFrameVelAtUT(AtTargetUT) - obt.GetFrameVelAtUT(AtTargetUT); var brake_dV = (float)BrakeDeltaV.magnitude; BrakeDuration = VSL.Engines.TTB_Precise(brake_dV); BrakeFuel = VSL.Engines.FuelNeeded(brake_dV); FullBrake = GetTotalFuel() < VSL.Engines.AvailableFuelMass; //check if this trajectory is too close to any of celestial bodies it passes by KillerOrbit = TransferTime < BrakeDuration + ManeuverDuration; update_killer(OrigOrbit, StartUT); update_killer(Orbit, AtTargetUT); // Utils.Log("{}", this);//debug }