// make all gimbals on vessel synchronous void synchronize_gimbals() { gimbal_spd_norm = float.PositiveInfinity; if (any_gimbals && any_gimbal_spds) { // find minimum normalized gimbaling speed for (int i = 0; i < engines.Count; i++) { IGimbal mg = engines[i].gimbal; if (mg != null) { float norm_spd = mg.UseGimbalSpeed ? mg.GimbalSpeed : float.PositiveInfinity; if (norm_spd < gimbal_spd_norm) { gimbal_spd_norm = norm_spd; } } } // apply it for (int i = 0; i < engines.Count; i++) { IGimbal mg = engines[i].gimbal; if (mg != null) { mg.Modify(gimbal_spd_norm); } } } }
void get_engines() { var eng_list = vessel.FindPartModulesImplementing <ModuleEngines>(); return_gimbals(); engines.Clear(); any_gimbals = false; any_gimbal_spds = false; foreach (var eng in eng_list) { if (eng.isOperational || eng.finalThrust != 0.0f) { IGimbal gimb = null; foreach (Type moduleType in AtmosphereAutopilot.gimbal_module_wrapper_map.Keys) { PartModule gimbal_module = findModuleByName(eng.part, moduleType.Name); if (gimbal_module != null) { gimb = (IGimbal)AtmosphereAutopilot.gimbal_module_wrapper_map[moduleType]. Invoke(new [] { gimbal_module }); if (gimb.Active) { any_gimbals = true; if (gimb.UseGimbalSpeed) { any_gimbal_spds = true; } } break; } } engines.Add(new EngineMoment(eng, gimb)); } } synchronize_gimbals(); }
public EngineMoment(ModuleEngines m, IGimbal g) { engine = m; gimbal = g; }