示例#1
0
        private void SendButtonEvent <T>(bool pressed_now, XBroadcaster <T> b, T e) where T : class
        {
            XUtils.Assert(_mCurrentlyPressed != null);
            _mCurrentlyPressed.SetPressed(pressed_now);
            b.Post(e);

            if (!pressed_now)
            {
                _mCurrentlyPressed = null;
            }
        }
示例#2
0
        public void Update()
        {
            // check for create menu
            var enumerator_fiveContacts = mListener_FiveContacts.CreateEnumerator();

            if (enumerator_fiveContacts.MoveNext())
            {
                if (mRootSelector == null)
                {
                    mRootSelector = XUI.Instance().CreateSelector(new XUI._Position(), "Debug Menu",
                                                                  XUI.eStyle.Frontend, XUI.eStyle.FrontendButton,
                                                                  XUI.eStyle.FrontendTitle, mOptions);
                }
            }

            // check for menu selection
            var selection_data = mListener_SelectorSelection.GetMaxOne();

            if (selection_data != null)
            {
                if (selection_data.mSelectorID == mRootSelector.GetID())
                {
                    // destroy this selector
                    XUI.Instance().DestroySelector(mRootSelector.GetID());
                    mRootSelector = null;

                    switch (selection_data.mIndexSelected)
                    {
                    case 0:
                        // map selected, sent message for that system to do what it wants
                        Console.WriteLine("map selected");
                        mBroadcaster_MenuSelection.Post(new MenuSelectionEvent(selection_data.mSelectorID, mOptions[0]));
                        break;

                    case 2:
                        // exit selected, do nothing, menu will close
                        break;

                    case 4:
                        // quit selected, send message to end program.  this menu will close
                        XBulletinBoard.Instance().mBroadcaster_ExitGameEvent.Post(new Game1.ExitGameEvent());
                        break;

                    default:
                        // problem
                        XUtils.Assert(false);
                        break;
                    }
                }
            }
        }
示例#3
0
文件: World.cs 项目: barronds/XNARTS
        private void ProcessInput()
        {
            bool generate_map    = false;
            bool resize_map      = false;
            bool change_map_type = false;

            var key_enumerator = mListenter_KeyUp.CreateEnumerator();

            while (key_enumerator.MoveNext())
            {
                if (key_enumerator.GetCurrent().mKey == Microsoft.Xna.Framework.Input.Keys.W)
                {
                    generate_map = true;
                }
                else if (key_enumerator.GetCurrent().mKey == Microsoft.Xna.Framework.Input.Keys.T)
                {
                    change_map_type = true;
                }
                else if (key_enumerator.GetCurrent().mKey == Microsoft.Xna.Framework.Input.Keys.S)
                {
                    resize_map = true;
                }
            }

            var button_enumerator = mListener_Button.CreateEnumerator();

            while (button_enumerator.MoveNext())
            {
                if (button_enumerator.GetCurrent().mID == mRegnerateMapButton.GetID())
                {
                    generate_map = true;
                }
                else if (button_enumerator.GetCurrent().mID == mMapTypeButton.GetID())
                {
                    change_map_type = true;
                }
                else if (button_enumerator.GetCurrent().mID == mMapSizeButton.GetID())
                {
                    resize_map = true;
                }
            }

            if (change_map_type)
            {
                // loop through map types
                mMapType     = (XWorldGen.eMapType)(((int)mMapType + 1) % (int)XWorldGen.eMapType.Num);
                mGenSet      = mGen.GetTuningSet(mMapType);
                generate_map = true;
            }

            if (resize_map)
            {
                ++mMapScale;
                generate_map = true;

                if (mMapScale > mGen.GetMaxMapScale())
                {
                    mMapScale = 1;
                }
            }

            if (generate_map)
            {
                XSimpleDraw simple_draw = XSimpleDraw.Instance(xeSimpleDrawType.WorldSpace_Persistent_Map);
                simple_draw.CancelPrimitives();
                mRendered = false;
                Generate();

                WorldRegenerated world_regenerated = new WorldRegenerated();
                mBroadcaster_WorldRegenerated.Post(world_regenerated);
            }
        }
示例#4
0
        public void Update()
        {
            var state        = Microsoft.Xna.Framework.Input.Keyboard.GetState();
            var curr_pressed = state.GetPressedKeys();

            // get pressed keys
            // check if previously pressed keys are now not pressed - send key up events
            // check if previously pressed keys still pressed - send key held events
            for (int p = 0; p < mPrevPressedKeys.Count; ++p)
            {
                bool found = false;

                for (int c = 0; c < curr_pressed.Length; ++c)
                {
                    if (curr_pressed[c] == mPrevPressedKeys[p])
                    {
                        found = true;
                        break;
                    }
                }

                if (found)
                {
                    KeyHeld msg = new KeyHeld();
                    msg.mKey = mPrevPressedKeys[p];
                    mBroadcaster_KeyHeld.Post(msg);
                }
                else
                {
                    KeyUp msg = new KeyUp();
                    msg.mKey = mPrevPressedKeys[p];
                    mBroadcaster_KeyUp.Post(msg);
                }
            }

            // check if previously not pressed keys are now pressed - send key down events
            for (int c = 0; c < curr_pressed.Length; ++c)
            {
                bool found = false;

                for (int p = 0; p < mPrevPressedKeys.Count; ++p)
                {
                    if (mPrevPressedKeys[p] == curr_pressed[c])
                    {
                        found = true;
                        break;
                    }
                }

                if (!found)
                {
                    KeyDown msg = new KeyDown();
                    msg.mKey = curr_pressed[c];
                    mBroadcaster_KeyDown.Post(msg);
                }
            }

            // update keys prev pressed
            mPrevPressedKeys.Clear();

            for (int c = 0; c < curr_pressed.Length; ++c)
            {
                mPrevPressedKeys.Add(curr_pressed[c]);
            }
        }