public isValidFor ( Vessel vessel, CelestialBody body ) : bool | ||
vessel | Vessel | |
body | CelestialBody | |
return | bool |
public bool isValidFor(Vessel vessel, CelestialBody body)
{
if (vessel != vessel_ || body_ != body)
return false;
if (Settings.fetch.AutoUpdateAerodynamicModel)
{
double newRefDrag = ComputeReferenceDrag();
if (referenceDrag == 0)
{
referenceDrag = newRefDrag;
}
double ratio = Math.Max(newRefDrag, referenceDrag) / Math.Max(1, Math.Min(newRefDrag, referenceDrag));
if (ratio > 1.2 && DateTime.Now > nextAllowedAutomaticUpdate || referencePartCount != vessel.Parts.Count)
{
nextAllowedAutomaticUpdate = DateTime.Now.AddSeconds(10); // limit updates frequency (could make the game almost unresponsive on some computers)
#if DEBUG
ScreenMessages.PostScreenMessage("Trajectory aerodynamic model auto-updated");
#endif
isValid = false;
}
}
return isValid;
}
private IEnumerable <bool> computeTrajectoryIncrement(Vessel vessel, DescentProfile profile) { if (aerodynamicModel_ == null || !aerodynamicModel_.isValidFor(vessel, vessel.mainBody)) { aerodynamicModel_ = AerodynamicModelFactory.GetModel(vessel, vessel.mainBody); } else { aerodynamicModel_.IncrementalUpdate(); } var state = vessel.LandedOrSplashed ? null : new VesselState(vessel); for (int patchIdx = 0; patchIdx < Settings.fetch.MaxPatchCount; ++patchIdx) { if (state == null) { break; } if (incrementTime_.ElapsedMilliseconds > MaxIncrementTime) { yield return(false); } if (null != vessel_.patchedConicSolver) { var maneuverNodes = vessel_.patchedConicSolver.maneuverNodes; foreach (var node in maneuverNodes) { if (node.UT == state.time) { state.velocity += node.GetBurnVector(createOrbitFromState(state)); break; } } foreach (var result in AddPatch(state, profile)) { yield return(false); } } state = AddPatch_outState; } }