private static void recurseParts(Part part, Vector3 refVel, ref Vector3 CoL, ref Vector3 DoL, ref float t, double refAlt, double refStp, double refDens) { int num = part.Modules.Count; while (num-- > 0) { ILiftProvider liftProvider = part.Modules[num] as ILiftProvider; if (liftProvider != null) { lQry.Reset(); lQry.refVector = refVel; lQry.refAltitude = refAlt; lQry.refStaticPressure = refStp; lQry.refAirDensity = refDens; liftProvider.OnCenterOfLiftQuery(lQry); CoL += lQry.pos * lQry.lift; DoL += lQry.dir * lQry.lift; t += lQry.lift; } } for (int i = 0; i < part.children.Count; i++) { Part part2 = part.children[i]; recurseParts(part2, refVel, ref CoL, ref DoL, ref t, refAlt, refStp, refDens); } }
private void RecurseCenterOfLift(Part part, Vector3 refVel, double refAlt, double refStp, double refDens) { var count = part.Modules.Count; while (count-- > 0) { var module = part.Modules[count] as ILiftProvider; if (module == null) { continue; } _centerOfLiftQuery.Reset(); _centerOfLiftQuery.refVector = refVel; _centerOfLiftQuery.refAltitude = refAlt; _centerOfLiftQuery.refStaticPressure = refStp; _centerOfLiftQuery.refAirDensity = refDens; module.OnCenterOfLiftQuery(_centerOfLiftQuery); _weightedPositionAvg.Add(_centerOfLiftQuery.pos, _centerOfLiftQuery.lift); _weightedDirectionAvg.Add(_centerOfLiftQuery.dir, _centerOfLiftQuery.lift); } count = part.children.Count; for (var i = 0; i < count; i++) { RecurseCenterOfLift(part.children[i], refVel, refAlt, refStp, refDens); } }