public ReentrySimulation(Orbit _initialOrbit, double _UT, SimulatedVessel _vessel, SimCurves _simcurves, IDescentSpeedPolicy _descentSpeedPolicy, double _decelEndAltitudeASL, double _maxThrustAccel, double _parachuteSemiDeployMultiplier, double _probableLandingSiteASL, bool _multiplierHasError, double _dt, double _min_dt) { // Store all the input values as they were given input_initialOrbit = _initialOrbit; input_UT = _UT; vessel = _vessel; input_descentSpeedPolicy = _descentSpeedPolicy; input_decelEndAltitudeASL = _decelEndAltitudeASL; input_maxThrustAccel = _maxThrustAccel; input_parachuteSemiDeployMultiplier = _parachuteSemiDeployMultiplier; input_probableLandingSiteASL = _probableLandingSiteASL; input_multiplierHasError = _multiplierHasError; input_dt = _dt; // the vessel attitude relative to the surface vel. Fixed for now attitude = Quaternion.Euler(180,0,0); min_dt = _min_dt; max_dt = _dt; dt = max_dt; // Get a copy of the original orbit, to be more thread safe initialOrbit = new Orbit(); initialOrbit.UpdateFromOrbitAtUT(_initialOrbit, _UT, _initialOrbit.referenceBody); CelestialBody body = _initialOrbit.referenceBody; bodyHasAtmosphere = body.atmosphere; bodyRadius = body.Radius; gravParameter = body.gravParameter; this.parachuteSemiDeployMultiplier = _parachuteSemiDeployMultiplier; this.multiplierHasError = _multiplierHasError; bodyAngularVelocity = body.angularVelocity; this.descentSpeedPolicy = _descentSpeedPolicy; decelRadius = bodyRadius + _decelEndAltitudeASL; aerobrakedRadius = bodyRadius + body.RealMaxAtmosphereAltitude(); mainBody = body; this.maxThrustAccel = _maxThrustAccel; this.probableLandingSiteASL = _probableLandingSiteASL; this.probableLandingSiteRadius = _probableLandingSiteASL + bodyRadius; referenceFrame = ReferenceFrame.CreateAtCurrentTime(_initialOrbit.referenceBody); orbitReenters = OrbitReenters(_initialOrbit); if (orbitReenters) startUT = _UT; maxDragGees = 0; deltaVExpended = 0; trajectory = new List<AbsoluteVector>(); simCurves = _simcurves; once = true; }
private static void Reset(SimCurves obj) { }
public void Init(Orbit _initialOrbit, double _UT, SimulatedVessel _vessel, SimCurves _simcurves, IDescentSpeedPolicy _descentSpeedPolicy, double _decelEndAltitudeASL, double _maxThrustAccel, double _parachuteSemiDeployMultiplier, double _probableLandingSiteASL, bool _multiplierHasError, double _dt, double _min_dt, double _maxOrbits, bool _noSKiptoFreefall) { // Store all the input values as they were given input_initialOrbit = _initialOrbit; input_UT = _UT; vessel = _vessel; input_descentSpeedPolicy = _descentSpeedPolicy; input_decelEndAltitudeASL = _decelEndAltitudeASL; input_maxThrustAccel = _maxThrustAccel; input_parachuteSemiDeployMultiplier = _parachuteSemiDeployMultiplier; input_probableLandingSiteASL = _probableLandingSiteASL; input_multiplierHasError = _multiplierHasError; input_dt = _dt; // the vessel attitude relative to the surface vel. Fixed for now attitude = Quaternion.Euler(180,0,0); min_dt = _min_dt; max_dt = _dt; dt = max_dt; steps = 0; maxOrbits = _maxOrbits; noSKiptoFreefall = _noSKiptoFreefall; // Get a copy of the original orbit, to be more thread safe //initialOrbit = new Orbit(); initialOrbit.UpdateFromOrbitAtUT(_initialOrbit, _UT, _initialOrbit.referenceBody); CelestialBody body = _initialOrbit.referenceBody; bodyHasAtmosphere = body.atmosphere; bodyRadius = body.Radius; gravParameter = body.gravParameter; this.parachuteSemiDeployMultiplier = _parachuteSemiDeployMultiplier; this.multiplierHasError = _multiplierHasError; bodyAngularVelocity = body.angularVelocity; this.descentSpeedPolicy = _descentSpeedPolicy; decelRadius = bodyRadius + _decelEndAltitudeASL; aerobrakedRadius = bodyRadius + body.RealMaxAtmosphereAltitude(); mainBody = body; this.maxThrustAccel = _maxThrustAccel; this.probableLandingSiteASL = _probableLandingSiteASL; this.probableLandingSiteRadius = _probableLandingSiteASL + bodyRadius; referenceFrame.UpdateAtCurrentTime(_initialOrbit.referenceBody); orbitReenters = OrbitReenters(_initialOrbit); startX = initialOrbit.SwappedRelativePositionAtUT(startUT); // This calls some Unity function so it should be done outside the thread if (orbitReenters) { startUT = _UT; t = startUT; AdvanceToFreefallEnd(initialOrbit); } maxDragGees = 0; deltaVExpended = 0; trajectory = ListPool<AbsoluteVector>.Instance.Borrow(); simCurves = _simcurves; once = true; }
public static ReentrySimulation Borrow(Orbit _initialOrbit, double _UT, SimulatedVessel _vessel, SimCurves _simcurves, IDescentSpeedPolicy _descentSpeedPolicy, double _decelEndAltitudeASL, double _maxThrustAccel, double _parachuteSemiDeployMultiplier, double _probableLandingSiteASL, bool _multiplierHasError, double _dt, double _min_dt, double _maxOrbits, bool _noSKiptoFreefall) { ReentrySimulation sim = pool.Borrow(); sim.Init(_initialOrbit, _UT, _vessel, _simcurves, _descentSpeedPolicy, _decelEndAltitudeASL, _maxThrustAccel, _parachuteSemiDeployMultiplier, _probableLandingSiteASL, _multiplierHasError, _dt, _min_dt, _maxOrbits, _noSKiptoFreefall); return sim; }
public ReentrySimulation(Orbit _initialOrbit, double _UT, SimulatedVessel _vessel, SimCurves _simcurves, IDescentSpeedPolicy _descentSpeedPolicy, double _decelEndAltitudeASL, double _maxThrustAccel, double _parachuteSemiDeployMultiplier, double _probableLandingSiteASL, bool _multiplierHasError, double _dt, double _min_dt) { // Store all the input values as they were given input_initialOrbit = _initialOrbit; input_UT = _UT; vessel = _vessel; input_descentSpeedPolicy = _descentSpeedPolicy; input_decelEndAltitudeASL = _decelEndAltitudeASL; input_maxThrustAccel = _maxThrustAccel; input_parachuteSemiDeployMultiplier = _parachuteSemiDeployMultiplier; input_probableLandingSiteASL = _probableLandingSiteASL; input_multiplierHasError = _multiplierHasError; input_dt = _dt; // the vessel attitude relative to the surface vel. Fixed for now attitude = Quaternion.Euler(180, 0, 0); min_dt = _min_dt; max_dt = _dt; dt = max_dt; // Get a copy of the original orbit, to be more thread safe initialOrbit = new Orbit(); initialOrbit.UpdateFromOrbitAtUT(_initialOrbit, _UT, _initialOrbit.referenceBody); CelestialBody body = _initialOrbit.referenceBody; bodyHasAtmosphere = body.atmosphere; bodyRadius = body.Radius; gravParameter = body.gravParameter; this.parachuteSemiDeployMultiplier = _parachuteSemiDeployMultiplier; this.multiplierHasError = _multiplierHasError; bodyAngularVelocity = body.angularVelocity; this.descentSpeedPolicy = _descentSpeedPolicy; decelRadius = bodyRadius + _decelEndAltitudeASL; aerobrakedRadius = bodyRadius + body.RealMaxAtmosphereAltitude(); mainBody = body; this.maxThrustAccel = _maxThrustAccel; this.probableLandingSiteASL = _probableLandingSiteASL; this.probableLandingSiteRadius = _probableLandingSiteASL + bodyRadius; referenceFrame = ReferenceFrame.CreateAtCurrentTime(_initialOrbit.referenceBody); orbitReenters = OrbitReenters(_initialOrbit); if (orbitReenters) { startUT = _UT; } maxDragGees = 0; deltaVExpended = 0; trajectory = new List <AbsoluteVector>(); simCurves = _simcurves; once = true; }