private static void InvokePartAction(BaseField baseField, bool ignoreDelay) { var field = (baseField as UIPartActionMenuPatcher.WrappedField); if (field == null) { return; } var v = FlightGlobals.ActiveVessel; if (v == null || v.isEVA || RTCore.Instance == null) { field.Invoke(); return; } VesselSatellite vs = null; if (RTCore.Instance != null) { vs = RTCore.Instance.Satellites[v]; } if (vs == null || vs.HasLocalControl) { field.Invoke(); } else if (FieldWhiteList.Contains(baseField.name)) { field.Invoke(); } else if (vs.FlightComputer != null && vs.FlightComputer.InputAllowed) { if (ignoreDelay) { field.Invoke(); } else { // queue command into FC vs.SignalProcessor.FlightComputer.Enqueue(PartActionCommand.Field(baseField, field.NewValue)); } } else if (field.host is PartModule && ((PartModule)field.host).part.Modules.OfType <IAntenna>().Any() && !((PartModule)field.host).part.Modules.OfType <ModuleRTAntennaPassive>().Any() && RTSettings.Instance.ControlAntennaWithoutConnection) { field.Invoke(); } else { ScreenMessages.PostScreenMessage(new ScreenMessage(Localizer.Format("#RT_ModuleUI_SPU_Msg"), 4.0f, ScreenMessageStyle.UPPER_LEFT));//"No connection to send command on." } }