示例#1
0
        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."
            }
        }