private static double CalculateAreaRadiative( ModularFlightIntegrator fi, Part part, FARAeroPartModule aeroModule ) { if (aeroModule is null) { return(fi.BaseFICalculateAreaRadiative(part)); } double radArea = aeroModule.ProjectedAreas.totalArea; return(radArea > 0 ? radArea : fi.BaseFICalculateAreaRadiative(part)); }
private static void UpdateThermodynamicsPre(ModularFlightIntegrator fi) { bool voxelizationCompleted = (fi.Vessel.vesselModules.Find(module => module is FARVesselAero) as FARVesselAero)? .HasEverValidVoxelization() ?? false; for (int i = 0; i < fi.PartThermalDataCount; i++) { PartThermalData ptd = fi.partThermalDataList[i]; Part part = ptd.part; FARAeroPartModule aeroModule = part.Modules.GetModule <FARAeroPartModule>(); if (aeroModule is null) { continue; } // make sure drag cube areas are correct based on voxelization if (voxelizationCompleted) { if (!part.DragCubes.None && aeroModule) { for (int j = 0; j < 6; j++) { part.DragCubes.AreaOccluded[FARAeroPartModule.ProjectedArea.FaceMap[j]] = (float)aeroModule.ProjectedAreas[j]; } } part.radiativeArea = CalculateAreaRadiative(fi, part, aeroModule); part.exposedArea = part.machNumber > 0 ? CalculateAreaExposed(fi, part, aeroModule) : part.radiativeArea; } else { part.radiativeArea = fi.BaseFICalculateAreaRadiative(part); part.exposedArea = fi.BaseFICalculateAreaExposed(part); } if (FARSettings.ExposedAreaLimited && part.exposedArea > part.radiativeArea) { part.exposedArea = part.radiativeArea; //sanity check just in case } } }