public static void SavePosition()
        {
            // Get the object for the local player controller.
            var controller = BLObject.GetPlayerController();
            // If we could not, stop and present an error.
            if (controller == null)
                goto Failed;

            // Get the object for the pawn from the player controller.
            var pawn = controller["Pawn"] as BLObject;
            // If we could not, stop and present an error.
            if (pawn == null || pawn.Class != "WillowPlayerPawn")
                goto Failed;

            pawn.UsePropertyMode = BLObject.PropertyMode.GetAll;

            // Save the rotation and location for our controller and pawn.
            SavedRotation = controller["Rotation"] as string;
            SavedLocation = pawn["Location"] as string;

            // Provide feedback to the player.
            if (ShowFeedback)
                BLIO.RunCommand("say Saved position");

            return;
            Failed:
            RunCommand("say Failed to save position");
        }
        public static void SavePosition()
        {
            // Get the object for the local player controller.
            var controller = BLObject.GetPlayerController();

            // If we could not, stop and present an error.
            if (controller == null)
            {
                goto Failed;
            }

            // Get the object for the pawn from the player controller.
            var pawn = controller["Pawn"] as BLObject;

            // If we could not, stop and present an error.
            if (pawn == null || pawn.Class != "WillowPlayerPawn")
            {
                goto Failed;
            }

            pawn.UsePropertyMode = BLObject.PropertyMode.GetAll;


            // Save the rotation and location for our controller and pawn.
            SavedRotation = controller["Rotation"] as string;
            SavedLocation = pawn["Location"] as string;

            // Traverse object tree...
            var info = pawn["WorldInfo"] as BLObject;

            info.UsePropertyMode = BLObject.PropertyMode.GetAll;
            var mapLevel = info["CommittedPersistentLevel"] as BLObject;

            // ... until we can get the map name
            SavedPositionMap = mapLevel.Name;

            // Provide feedback to the player.
            if (ShowFeedback)
            {
                BLIO.RunCommand("say Saved position");
            }

            return;


Failed:
            RunCommand("say Failed to save position");
            SavedPositionMap = null;
        }
        // Perform our own initilization when the window initilizes.
        protected override void OnSourceInitialized(EventArgs e)
        {
            base.OnSourceInitialized(e);

            F7Binding = new KeyBinding(Key.F7, ToggleHotkeys);

            var controlUpBinding    = new KeyBinding(Key.Up, Modifier.Control, () => App.MoveForwardBackward(500));
            var controlDownBinding  = new KeyBinding(Key.Down, Modifier.Control, () => App.MoveForwardBackward(-500));
            var controlLeftBinding  = new KeyBinding(Key.Left, Modifier.Control, () => App.MoveLeftRight(-500));
            var controlRightBinding = new KeyBinding(Key.Right, Modifier.Control, () => App.MoveLeftRight(500));

            var controlEndBinding = new KeyBinding(Key.End, Modifier.Control, () => BLIO.RunCommand("disconnect"));

            SymbolBindings = new KeyBinding[]
            {
                new KeyBinding(Key.Equals, App.ToggleThirdPerson),
                new KeyBinding(Key.LeftBracket, App.HalveSpeed),
                new KeyBinding(Key.RightBracket, App.DoubleSpeed),
                new KeyBinding(Key.Backslash, App.ResetSpeed),
                new KeyBinding(Key.Comma, App.RestorePosition),
                new KeyBinding(Key.Period, App.SavePosition),
                new KeyBinding(Key.Semicolon, () => BLIO.RunCommand("togglehud")),
                new KeyBinding(Key.Quote, App.ToggleDamageNumbers),
                new KeyBinding(Key.Slash, App.TogglePlayersOnly),
                controlUpBinding,
                controlDownBinding,
                controlLeftBinding,
                controlRightBinding,
                controlEndBinding,
            };

            NumpadBindings = new KeyBinding[]
            {
                new KeyBinding(Key.NumOne, App.HalveSpeed),
                new KeyBinding(Key.NumTwo, App.DoubleSpeed),
                new KeyBinding(Key.NumThree, App.ResetSpeed),
                new KeyBinding(Key.NumFour, App.RestorePosition),
                new KeyBinding(Key.NumFive, App.SavePosition),
                new KeyBinding(Key.NumSix, App.TogglePlayersOnly),
                new KeyBinding(Key.NumSeven, () => BLIO.RunCommand("togglehud")),
                new KeyBinding(Key.NumEight, App.ToggleDamageNumbers),
                new KeyBinding(Key.NumNine, App.ToggleThirdPerson),
                controlUpBinding,
                controlDownBinding,
                controlLeftBinding,
                controlRightBinding,
                controlEndBinding,
            };

            if (Properties.Settings.Default.NumpadBindings)
            {
                NumpadBindingsMenuItem.Checked = true;
                // Set up the dictionary entires for our keybindings and their callbacks.
                KeyBindings = NumpadBindings;
            }
            else
            {
                SymbolBindingsMenuItem.Checked = true;
                // Set up the dictionary entires for our keybindings and their callbacks.
                KeyBindings = SymbolBindings;
            }

            // Set up the handle variables for binding hotkeys, and set up our
            // callback method as the hook for receiving hotkey events.
            Handle = new WindowInteropHelper(this).Handle;
            source = HwndSource.FromHwnd(Handle);
            source.AddHook(OnHotkeyPressed);

            // Create the delegate to handle notifications of foreground window
            // changes, and register it with the system.
            ForegroundWindowDelegate = (_0, _1, windowHandle, _3, _4, _5, _6) => HandleForegroundWindow(windowHandle);
            SetWinEventHook(0x0003, 0x0003, IntPtr.Zero, ForegroundWindowDelegate, 0, 0, 0);

            // Set up bindings if the foreground window is already Borderlands.
            HandleForegroundWindow(GetForegroundWindow());
        }
        public static KeyBinding[] ToKeyBindings(this List <KeybindInfo> kbis)
        {
            var bindingList = new List <KeyBinding>();

            foreach (var kbi in kbis)
            {
                try
                {
                    uint modifier = 0;
                    if (kbi.bUseCTRLModifier)
                    {
                        modifier |= 2;
                    }
                    if (kbi.bUseALTModifier)
                    {
                        modifier |= 1;
                    }
                    if (kbi.bUseSHIFTModifier)
                    {
                        modifier |= 4;
                    }
                    if (kbi.OwnerName == "textBoxHalveSpeed")
                    {
                        bindingList.Add(new KeyBinding((Keys)Enum.Parse(typeof(Keys), kbi.Key), modifier, App.HalveSpeed));
                    }
                    if (kbi.OwnerName == "textBoxDoubleSpeed")
                    {
                        bindingList.Add(new KeyBinding((Keys)Enum.Parse(typeof(Keys), kbi.Key), modifier, App.DoubleSpeed));
                    }
                    if (kbi.OwnerName == "textBoxResetSpeed")
                    {
                        bindingList.Add(new KeyBinding((Keys)Enum.Parse(typeof(Keys), kbi.Key), modifier, App.ResetSpeed));
                    }
                    if (kbi.OwnerName == "textBoxRestorePosition")
                    {
                        bindingList.Add(new KeyBinding((Keys)Enum.Parse(typeof(Keys), kbi.Key), modifier, App.RestorePosition));
                    }
                    if (kbi.OwnerName == "textBoxSavePosition")
                    {
                        bindingList.Add(new KeyBinding((Keys)Enum.Parse(typeof(Keys), kbi.Key), modifier, App.SavePosition));
                    }
                    if (kbi.OwnerName == "textBoxTogglePlayersOnly")
                    {
                        bindingList.Add(new KeyBinding((Keys)Enum.Parse(typeof(Keys), kbi.Key), modifier, App.TogglePlayersOnly));
                    }
                    if (kbi.OwnerName == "textBoxToggleHUD")
                    {
                        bindingList.Add(new KeyBinding((Keys)Enum.Parse(typeof(Keys), kbi.Key), modifier, () => BLIO.RunCommand("togglehud")));
                    }
                    if (kbi.OwnerName == "textBoxToggleDamageNumbers")
                    {
                        bindingList.Add(new KeyBinding((Keys)Enum.Parse(typeof(Keys), kbi.Key), modifier, App.ToggleDamageNumbers));
                    }
                    if (kbi.OwnerName == "textBoxToggleThirdperson")
                    {
                        bindingList.Add(new KeyBinding((Keys)Enum.Parse(typeof(Keys), kbi.Key), modifier, App.ToggleThirdPerson));
                    }
                    if (kbi.OwnerName == "textBoxDisconnect")
                    {
                        bindingList.Add(new KeyBinding((Keys)Enum.Parse(typeof(Keys), kbi.Key), modifier, () => BLIO.RunCommand("disconnect")));
                    }
                    if (kbi.OwnerName == "textBoxToggleHotkeys")
                    {
                        bindingList.Add(new KeyBinding((Keys)Enum.Parse(typeof(Keys), kbi.Key), modifier, MainWindow.mainWindow.ToggleHotkeys));
                    }
                    if (kbi.OwnerName == "textBoxTeleportForward")
                    {
                        bindingList.Add(new KeyBinding((Keys)Enum.Parse(typeof(Keys), kbi.Key), modifier, () => App.MoveForwardBackward(500)));
                    }
                    if (kbi.OwnerName == "textBoxTeleportLeft")
                    {
                        bindingList.Add(new KeyBinding((Keys)Enum.Parse(typeof(Keys), kbi.Key), modifier, () => App.MoveLeftRight(-500)));
                    }
                    if (kbi.OwnerName == "textBoxTeleportRight")
                    {
                        bindingList.Add(new KeyBinding((Keys)Enum.Parse(typeof(Keys), kbi.Key), modifier, () => App.MoveLeftRight(500)));
                    }
                    if (kbi.OwnerName == "textBoxTeleportBackward")
                    {
                        bindingList.Add(new KeyBinding((Keys)Enum.Parse(typeof(Keys), kbi.Key), modifier, () => App.MoveForwardBackward(-500)));
                    }
                    if (kbi.OwnerName == null)
                    {
                        bindingList.Add(new KeyBinding((Keys)Enum.Parse(typeof(Keys), kbi.Key), modifier, () => BLIO.RunCommand(kbi.Command)));
                    }
                }
                catch (ArgumentException) { }
            }
            return(bindingList.ToArray());
        }