// Interpolate between current and target orientation over the duration public override void Update(double elapsedTime, SpaceCraftBase spaceCraft) { double altitude = spaceCraft.GetRelativeAltitude(); double atmosphereheight = spaceCraft.GravitationalParent.AtmosphereHeight; DVector2 retrograde = spaceCraft.GetRelativeVelocity(); if (altitude > atmosphereheight) { retrograde = spaceCraft.GetInertialVelocity(); } retrograde.Negate(); retrograde.Normalize(); double retrogradeAngle = retrograde.Angle(); double adjustRatio = (elapsedTime - StartTime) / _adjustmentTime; if (adjustRatio > 1) { spaceCraft.SetPitch(retrogradeAngle); } else { double interpolatedAdjust = MathHelper.LerpAngle(_curentOrientation, retrogradeAngle, adjustRatio); spaceCraft.SetPitch(interpolatedAdjust); } }
public override void UpdateAnimations(TimeStep timeStep) { DVector2 retrogradeVelocity = GetRelativeVelocity(); retrogradeVelocity.Negate(); DVector2 engineBase = Position - DVector2.FromAngle(Pitch) * Height * 0.5; double altitude = GetRelativeAltitude(); double atmosphericDensity = GravitationalParent.GetAtmosphericDensity(altitude); _engineSmoke.Update(timeStep, engineBase, Velocity, retrogradeVelocity, atmosphericDensity, _sootRatio); base.UpdateAnimations(timeStep); }
public virtual void Update(double dt) { ElapsedTime += dt; if (IsPrograde) { DVector2 prograde = SpaceCraft.GetRelativeVelocity(); prograde.Normalize(); SpaceCraft.SetRotation(prograde.Angle()); } if (IsRetrograde) { DVector2 retrograde = SpaceCraft.GetRelativeVelocity(); retrograde.Negate(); retrograde.Normalize(); SpaceCraft.SetRotation(retrograde.Angle()); } }
// Interpolate between current and target orientation over the duration public override void Update(double elapsedTime, SpaceCraftBase spaceCraft) { DVector2 retrograde = spaceCraft.GetRelativeVelocity(); retrograde.Negate(); retrograde.Normalize(); double retrogradeAngle = retrograde.Angle(); double adjustRatio = (elapsedTime - StartTime) / _adjustmentTime; if (adjustRatio > 1) { spaceCraft.SetPitch(retrogradeAngle); } else { double interpolatedAdjust = MathHelper.LerpAngle(_curentOrientation, retrogradeAngle, adjustRatio); spaceCraft.SetPitch(interpolatedAdjust); } }
// Interpolate between current and target orientation over the duration public override void Update(double elapsedTime, ISpaceCraft spaceCraft) { DVector2 retrograde = spaceCraft.GetRelativeVelocity(); retrograde.Negate(); retrograde.Normalize(); double retrogradeAngle = retrograde.Angle(); double adjustRatio = (elapsedTime - StartTime) / _adjustmentTime; if (adjustRatio > 1) { spaceCraft.SetRotation(retrogradeAngle); } else { double interpolatedAdjust = _curentOrientation * (1 - adjustRatio) + retrogradeAngle * adjustRatio; spaceCraft.SetRotation(interpolatedAdjust); } }