static bool HandleAdventureCursorKeys(KeyEventArgs e)
        {
            var ob = GameData.Data.FocusedObject;

            if (ob == null)
            {
                return(false);
            }

            var dir = KeyHelpers.KeyToDir(e.Key);

            if (dir == Direction.None)
            {
                return(false);
            }

            CommandPromptHandler.HandleDirection(dir);

            return(true);
        }
Beispiel #2
0
        void OnKeyDown(KeyEventArgs e)
        {
            if (this.Location.HasValue == false)
            {
                return;
            }

            Key key = e.Key;

            if (KeyHelpers.KeyIsDir(key) == false)
            {
                return;
            }

            //m_control.ScrollStop();

            var dir = KeyHelpers.KeyToDir(key);

            IntVector3 v;

            if ((e.KeyboardDevice.Modifiers & ModifierKeys.Control) != 0)
            {
                if (dir == Direction.North)
                {
                    dir = Direction.Up;
                }
                else if (dir == Direction.South)
                {
                    dir = Direction.Down;
                }
                else
                {
                    return;
                }

                v = dir.ToIntVector3();
            }
            else
            {
                var v2 = m_game.Camera.PlanarAdjust(dir.ToIntVector2());
                v = new IntVector3(v2, 0);
            }

            int m = 1;

            if ((e.KeyboardDevice.Modifiers & ModifierKeys.Shift) != 0)
            {
                m = 5;
            }

            var pickMode = ((MapControl3D)m_control).Config.PickMode;

            var loc = this.Location.Value + v * m;

            switch (pickMode)
            {
            case MapControlPickMode.Underground:
            case MapControlPickMode.AboveGround:
                for (int z = m_game.ViewGridProvider.ViewGrid.Z2; z >= 0; --z)
                {
                    var p = new IntVector3(loc.X, loc.Y, z);

                    var td = m_game.Environment.GetTileData(p);

                    if (!td.IsUndefined && !td.IsWall)
                    {
                        continue;
                    }

                    loc = p;
                    break;
                }

                if (pickMode == MapControlPickMode.AboveGround)
                {
                    if (loc.Z < m_game.ViewGridProvider.ViewGrid.Z2)
                    {
                        loc = loc.Up;
                    }
                }

                break;

            case MapControlPickMode.Constant:
                break;

            default:
                throw new Exception();
            }

            this.Location = loc;

            //m_control.KeepOnScreen(this.CursorPosition);

            e.Handled = true;
        }