private void CalculateAndApplyVesselAeroProperties() { float atmDensity = (float)vessel.atmDensity; if (atmDensity <= 0) { MachNumber = 0; ReynoldsNumber = 0; return; } MachNumber = vessel.mach; ReynoldsNumber = FARAeroUtil.CalculateReynoldsNumber(vessel.atmDensity, Length, vessel.srfSpeed, MachNumber, FlightGlobals.getExternalTemperature((float)vessel .altitude, vessel.mainBody), vessel.mainBody.atmosphereAdiabaticIndex); float skinFrictionDragCoefficient = (float)FARAeroUtil.SkinFrictionDrag(ReynoldsNumber, MachNumber); float pseudoKnudsenNumber = (float)(MachNumber / (ReynoldsNumber + MachNumber)); Vector3 frameVel = Krakensbane.GetFrameVelocityV3f(); //start from the top and come down to improve performance if it needs to remove anything for (int i = _currentAeroModules.Count - 1; i >= 0; i--) { FARAeroPartModule m = _currentAeroModules[i]; if (m != null && m.part != null && m.part.partTransform != null) { m.UpdateVelocityAndAngVelocity(frameVel); } else { _currentAeroModules.RemoveAt(i); } } foreach (FARAeroSection aeroSection in _currentAeroSections) { aeroSection.FlightCalculateAeroForces((float)MachNumber, (float)(ReynoldsNumber / Length), pseudoKnudsenNumber, skinFrictionDragCoefficient); } _vesselIntakeRamDrag.ApplyIntakeRamDrag((float)MachNumber, vessel.srf_velocity.normalized); foreach (FARAeroPartModule m in _currentAeroModules) { m.ApplyForces(); } }
private void CalculateAndApplyVesselAeroProperties() { float atmDensity = (float)_vessel.atmDensity; if (atmDensity <= 0) { machNumber = 0; reynoldsNumber = 0; return; } machNumber = _vessel.mach; reynoldsNumber = FARAeroUtil.CalculateReynoldsNumber(_vessel.atmDensity, Length, _vessel.srfSpeed, machNumber, FlightGlobals.getExternalTemperature((float)_vessel.altitude, _vessel.mainBody), _vessel.mainBody.atmosphereAdiabaticIndex); float skinFrictionDragCoefficient = (float)FARAeroUtil.SkinFrictionDrag(reynoldsNumber, machNumber); Vector3 frameVel = Krakensbane.GetFrameVelocityV3f(); if (_updateQueued) //only happens if we have an voxelization scheduled, then we need to check for null { for (int i = _currentAeroModules.Count - 1; i >= 0; i--) //start from the top and come down to improve performance if it needs to remove anything { FARAeroPartModule m = _currentAeroModules[i]; if (m != null) { m.UpdateVelocityAndAngVelocity(frameVel); } else { _currentAeroModules.RemoveAt(i); i++; } } } else //otherwise, we don't need to do Unity's expensive "is this part dead" null-check { for (int i = _currentAeroModules.Count - 1; i >= 0; i--) //start from the top and come down to improve performance if it needs to remove anything { FARAeroPartModule m = _currentAeroModules[i]; m.UpdateVelocityAndAngVelocity(frameVel); } } for (int i = 0; i < _currentAeroSections.Count; i++) { _currentAeroSections[i].FlightCalculateAeroForces(atmDensity, (float)machNumber, (float)(reynoldsNumber / Length), skinFrictionDragCoefficient); } _vesselIntakeRamDrag.ApplyIntakeRamDrag((float)machNumber, _vessel.srf_velocity.normalized, (float)_vessel.dynamicPressurekPa); for (int i = 0; i < _currentAeroModules.Count; i++) { FARAeroPartModule m = _currentAeroModules[i]; m.ApplyForces(); } }
private void CalculateAndApplyVesselAeroProperties() { float atmDensity = (float)_vessel.atmDensity; if (atmDensity <= 0) { machNumber = 0; reynoldsNumber = 0; return; } machNumber = _vessel.mach; reynoldsNumber = FARAeroUtil.CalculateReynoldsNumber(_vessel.atmDensity, Length, _vessel.srfSpeed, machNumber, FlightGlobals.getExternalTemperature((float)_vessel.altitude, _vessel.mainBody), _vessel.mainBody.atmosphereAdiabaticIndex); float skinFrictionDragCoefficient = (float)FARAeroUtil.SkinFrictionDrag(reynoldsNumber, machNumber); Vector3 frameVel = Krakensbane.GetFrameVelocityV3f(); for (int i = 0; i < _currentAeroModules.Count; i++) { FARAeroPartModule m = _currentAeroModules[i]; if (m != null) { m.UpdateVelocityAndAngVelocity(frameVel); } else { _currentAeroModules.RemoveAt(i); i--; } } for (int i = 0; i < _currentAeroSections.Count; i++) { _currentAeroSections[i].FlightCalculateAeroForces(atmDensity, (float)machNumber, (float)(reynoldsNumber / Length), skinFrictionDragCoefficient); } _vesselIntakeRamDrag.ApplyIntakeRamDrag((float)machNumber, _vessel.srf_velocity.normalized, (float)_vessel.dynamicPressurekPa); for (int i = 0; i < _currentAeroModules.Count; i++) { FARAeroPartModule m = _currentAeroModules[i]; if ((object)m != null) { m.ApplyForces(); } } }