Ejemplo n.º 1
0
        /// <summary>
        /// SignalWaiter constructor
        /// </summary>
        /// <param name="originalEvents">The sequence of events that emit signals for the current waiter</param>
        /// <param name="signalMode">Signaling mode</param>
        public SignalWaiter(IEnumerable <SignalEvent> originalEvents, SignalMode signalMode)
        {
            if (originalEvents == null)
            {
                throw new ArgumentNullException(nameof(originalEvents));
            }

            TurboContract.Assert(Enum.IsDefined(typeof(SignalMode), signalMode), conditionString: "Enum.IsDefined(typeof(SignalMode), signalMode)");

            _originalEvent = null;
            _signalMode    = signalMode;
            _isDisposed    = false;

            List <WeakReference <SignalEvent> > originalEventsTmp = new List <WeakReference <SignalEvent> >();

            foreach (var ev in originalEvents)
            {
                if (ev == null)
                {
                    throw new ArgumentNullException(nameof(originalEvents), "One of the signal events is null");
                }

                originalEventsTmp.Add(new WeakReference <SignalEvent>(ev));
                ev.Subscribe(SignalHandler);
            }
            _originalEventList = originalEventsTmp.ToArray();
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Creates <see cref="SignalWaiter"/> to wait for some event
        /// </summary>
        /// <param name="signalMode">Signalling mode of the created waiter</param>
        /// <returns>Created SignalWaiter</returns>
        public SignalWaiter CreateWaiter(SignalMode signalMode)
        {
            if (_sourceEvent != null)
            {
                return(new SignalWaiter(_sourceEvent, signalMode));
            }
            if (_sourceEventList != null)
            {
                return(new SignalWaiter(_sourceEventList, signalMode));
            }

            return(new SignalWaiter(Enumerable.Empty <SignalEvent>(), signalMode));
        }
        public override object Evaluate(ParseTreeNode node)
        {
            var        signals     = new List <ISignal>();
            SignalMode signalMode  = SignalMode.NONE;
            var        signalNames = new List <string>();

            foreach (var childNode in node.ChildNodes)
            {
                if (childNode.ChildNodes.Count > 0 && childNode.ChildNodes[0].Term.Name == "object_type")
                {
                    string signalType = childNode.ChildNodes[0].ChildNodes[0].Token.Text.ToLower();

                    if (signalType != "signal")
                    {
                        return(signals);
                    }
                }
                else if (childNode.Term.Name == "identifier_list")
                {
                    foreach (var gchildNode in childNode.ChildNodes)
                    {
                        if (gchildNode.Term.Name == "identifier")
                        {
                            signalNames.Add(gchildNode.Token.Text);
                        }
                    }
                }
                else if (childNode.ChildNodes.Count > 0 && childNode.ChildNodes[0].Term.Name == "object_mode")
                {
                    signalMode = (SignalMode)Enum.Parse(typeof(SignalMode), childNode.ChildNodes[0].ChildNodes[0].Token.Text, true);
                }
                else if (childNode.Term.Name == "subtype_indication")
                {
                    if (childNode.ChildNodes[0].Token.Text.ToLower() == "std_logic")
                    {
                        signals.AddRange(signalNames.Select(x =>
                                                            new StdLogic(new SignalName(x), signalMode)));
                    }
                    else if (childNode.ChildNodes[0].Token.Text.ToLower() == "std_logic_vector")
                    {
                        var range = (Tuple <int, int>)EvaluateGeneral(childNode.ChildNodes[1].ChildNodes[1]);

                        signals.AddRange(signalNames.Select(x =>
                                                            new StdLogicVector(new SignalName(x), range.Item1, range.Item2, signalMode)));
                    }
                }
            }

            return(signals);
        }
Ejemplo n.º 4
0
        public StdLogicVector(SignalName name, int stRange, int edRange, SignalMode mode = SignalMode.NONE)
        {
            this.mode    = mode;
            this.name    = name;
            this.stRange = stRange;
            this.size    = edRange - stRange + 1;

            logic = new StdLogic[this.size];
            for (int i = stRange; i <= edRange; ++i)
            {
                logic[i - stRange] = new StdLogic(new SignalName(name.baseName, i), mode);
            }

            this.attribute = new Dictionary <string, object>();
        }
Ejemplo n.º 5
0
        /// <summary>
        /// SignalWaiter constructor
        /// </summary>
        /// <param name="originalEvent">Event which emits signals for the current waiter</param>
        /// <param name="signalMode">Signaling mode</param>
        public SignalWaiter(SignalEvent originalEvent, SignalMode signalMode)
        {
            if (originalEvent == null)
            {
                throw new ArgumentNullException(nameof(originalEvent));
            }

            TurboContract.Assert(Enum.IsDefined(typeof(SignalMode), signalMode), conditionString: "Enum.IsDefined(typeof(SignalMode), signalMode)");

            _originalEventList = null;
            _signalMode        = signalMode;
            _isDisposed        = false;

            _originalEvent = new WeakReference <SignalEvent>(originalEvent);
            originalEvent.Subscribe(SignalHandler);
        }
        public override void Update()
        {
            m_disableFading = VRage.Input.MyInput.Static.IsGameControlPressed(MyControlsSpace.LOOKAROUND);

            //for now make extra check for control key. Maybe trigger from HandleInput?
            if (VRage.Input.MyInput.Static.IsNewGameControlPressed(MyControlsSpace.TOGGLE_SIGNALS) && !VRage.Input.MyInput.Static.IsAnyCtrlKeyPressed() && Sandbox.Graphics.GUI.MyScreenManager.FocusedControl == null)
            {
                SignalDisplayMode += 1;
                if (SignalDisplayMode >= SignalMode.MaxSignalModes)
                    SignalDisplayMode = SignalMode.DefaultMode;

                if (m_signalModeNotification != null)
                {
                    MyHud.Notifications.Remove(m_signalModeNotification);
                    m_signalModeNotification = null;
                }

                switch (SignalDisplayMode)
                {
                    case SignalMode.DefaultMode:
                        m_signalModeNotification = new MyHudNotification(MyCommonTexts.SignalMode_Switch_DefaultMode, 1000);
                        break;
                    case SignalMode.FullDisplay:
                        m_signalModeNotification = new MyHudNotification(MyCommonTexts.SignalMode_Switch_FullDisplay, 1000);
                        break;
                    case SignalMode.NoNames:
                        m_signalModeNotification = new MyHudNotification(MyCommonTexts.SignalMode_Switch_NoNames, 1000);
                        break;
                    case SignalMode.Off:
                        m_signalModeNotification = new MyHudNotification(MyCommonTexts.SignalMode_Switch_Off, 1000);
                        break;
                }

                if (m_signalModeNotification != null)
                    MyHud.Notifications.Add(m_signalModeNotification);
            }
        }
Ejemplo n.º 7
0
 public StdLogic(SignalName name, SignalMode mode = SignalMode.NONE)
 {
     this.mode      = mode;
     this.name      = name;
     this.attribute = new Dictionary <string, object>();
 }