public override bool HandleKeyPress(KeyInput e)
        {
            if (IsDisabled() || e.Event == KeyInputEvent.Up)
            {
                return(false);
            }

            if (!HasKeyboardFocus || IgnoreKeys.Contains(e.Key))
            {
                return(false);
            }

            switch (e.Key)
            {
            case Keycode.ESCAPE:
                OnEscKey(e);
                break;

            default:
                Key = Hotkey.FromKeyInput(e);
                break;
            }

            YieldKeyboardFocus();

            return(true);
        }
Beispiel #2
0
        /// <summary>Possibly handle keyboard input (if this widget has keyboard focus)</summary>
        /// <returns><c>true</c>, if keyboard input was handled, <c>false</c> if the input should bubble to the parent widget</returns>
        /// <param name="e">Key input data</param>
        public static bool HandleKeyPress(KeyInput e)
        {
            if (e.Event == KeyInputEvent.Down)
            {
                var hk = Hotkey.FromKeyInput(e);

                if (hk == Game.Settings.Keys.DevReloadChromeKey)
                {
                    ChromeProvider.Initialize(Game.ModData);
                    return(true);
                }

                if (hk == Game.Settings.Keys.HideUserInterfaceKey)
                {
                    Root.Visible ^= true;
                    return(true);
                }

                if (hk == Game.Settings.Keys.TakeScreenshotKey)
                {
                    Game.TakeScreenshot = true;
                    return(true);
                }
            }

            if (KeyboardFocusWidget != null)
            {
                return(KeyboardFocusWidget.HandleKeyPressOuter(e));
            }

            return(Root.HandleKeyPressOuter(e));
        }
Beispiel #3
0
        public override bool HandleKeyPress(KeyInput e)
        {
            if (e.Event == KeyInputEvent.Down)
            {
                var hk = Hotkey.FromKeyInput(e);

                if (hk == Game.Settings.Keys.DevReloadChromeKey)
                {
                    ChromeProvider.Initialize(Game.ModData.Manifest.Chrome);
                    return(true);
                }

                if (hk == Game.Settings.Keys.HideUserInterfaceKey)
                {
                    foreach (var child in this.Children)
                    {
                        child.Visible ^= true;
                    }

                    return(true);
                }

                if (hk == Game.Settings.Keys.TakeScreenshotKey)
                {
                    if (e.Event == KeyInputEvent.Down)
                    {
                        Game.TakeScreenshot = true;
                    }

                    return(true);
                }
            }

            return(base.HandleKeyPress(e));
        }
        public override bool HandleKeyPress(KeyInput e)
        {
            var key = Hotkey.FromKeyInput(e);
            var ks  = Game.Settings.Keys;

            if (key == ks.MapScrollUp)
            {
                keyboardDirections = keyboardDirections.Set(ScrollDirection.Up, e.Event == KeyInputEvent.Down);
                return(true);
            }

            if (key == ks.MapScrollDown)
            {
                keyboardDirections = keyboardDirections.Set(ScrollDirection.Down, e.Event == KeyInputEvent.Down);
                return(true);
            }

            if (key == ks.MapScrollLeft)
            {
                keyboardDirections = keyboardDirections.Set(ScrollDirection.Left, e.Event == KeyInputEvent.Down);
                return(true);
            }

            if (key == ks.MapScrollRight)
            {
                keyboardDirections = keyboardDirections.Set(ScrollDirection.Right, e.Event == KeyInputEvent.Down);
                return(true);
            }

            return(false);
        }
Beispiel #5
0
        public override bool HandleKeyPress(KeyInput e)
        {
            if (IsDisabled() || e.Event == KeyInputEvent.Up)
            {
                return(false);
            }

            if (!HasKeyboardFocus || IgnoreKeys.Contains(e.Key))
            {
                return(false);
            }

            if (e.Key != Keycode.ESCAPE && e.Key != Keycode.RETURN)
            {
                Key = Hotkey.FromKeyInput(e);
            }

            if (e.Key == Keycode.ESCAPE)
            {
                OnEscape();
            }

            if (e.Key == Keycode.RETURN)
            {
                OnReturn();
            }

            YieldKeyboardFocus();

            return(true);
        }
        public MusicControllerLogic(Widget widget, World world, WorldRenderer worldRenderer)
        {
            musicPlaylist = world.WorldActor.Trait <MusicPlaylist>();

            var keyhandler = widget.Get <LogicKeyListenerWidget>("MUSICCONTROLLER_KEYHANDLER");

            keyhandler.OnKeyPress = e =>
            {
                if (e.Event == KeyInputEvent.Down)
                {
                    var key = Hotkey.FromKeyInput(e);

                    if (key == Game.Settings.Keys.NextTrack)
                    {
                        musicPlaylist.Play(musicPlaylist.GetNextSong());
                    }
                    else if (key == Game.Settings.Keys.PreviousTrack)
                    {
                        musicPlaylist.Play(musicPlaylist.GetPrevSong());
                    }
                    else if (key == Game.Settings.Keys.StopMusic)
                    {
                        StopMusic();
                    }
                    else if (key == Game.Settings.Keys.PauseMusic)
                    {
                        PauseOrResumeMusic();
                    }
                }

                return(false);
            };
        }
Beispiel #7
0
        protected SingleHotkeyBaseLogic(Widget widget, string argName, string parentName, Dictionary <string, MiniYaml> logicArgs)
        {
            var      ks = Game.Settings.Keys;
            MiniYaml yaml;

            var namedKey = new NamedHotkey();

            if (logicArgs.TryGetValue(argName, out yaml))
            {
                namedKey = new NamedHotkey(yaml.Value, ks);
            }

            var keyhandler = widget.Get <LogicKeyListenerWidget>(parentName);

            keyhandler.AddHandler(e =>
            {
                if (e.Event == KeyInputEvent.Down)
                {
                    var key = Hotkey.FromKeyInput(e);
                    if (key == namedKey.GetValue())
                    {
                        return(OnHotkeyActivated(e));
                    }
                }

                return(false);
            });
        }
        bool ProcessInput(KeyInput e)
        {
            if (e.Event == KeyInputEvent.Down)
            {
                var key = Hotkey.FromKeyInput(e);
                var ks  = Game.Settings.Keys;

                if (key == ks.CycleBaseKey)
                {
                    return(CycleBases());
                }

                if (key == ks.CycleProductionBuildingsKey)
                {
                    return(CycleProductionBuildings());
                }

                if (key == ks.ToLastEventKey)
                {
                    return(ToLastEvent());
                }

                if (key == ks.ToSelectionKey)
                {
                    return(ToSelection());
                }
            }

            return(false);
        }
        public override bool HandleKeyPress(KeyInput e)
        {
            if (Hotkey.FromKeyInput(e) != CancelKey || e.Event != KeyInputEvent.Down || !Skippable)
            {
                return(false);
            }

            Stop();
            return(true);
        }
        public override bool HandleKeyPress(KeyInput e)
        {
            var player = World.RenderPlayer ?? World.LocalPlayer;

            if (e.Event == KeyInputEvent.Down)
            {
                var key = Hotkey.FromKeyInput(e);

                if (key == Game.Settings.Keys.PauseKey && World.LocalPlayer != null)                 // Disable pausing for spectators
                {
                    World.SetPauseState(!World.Paused);
                }
                else if (key == Game.Settings.Keys.SelectAllUnitsKey && !World.IsGameOver)
                {
                    // Select actors on the screen which belong to the current player
                    var ownUnitsOnScreen = SelectActorsOnScreen(World, worldRenderer, null, player).SubsetWithHighestSelectionPriority();
                    World.Selection.Combine(World, ownUnitsOnScreen, false, false);
                }
                else if (key == Game.Settings.Keys.SelectUnitsByTypeKey && !World.IsGameOver)
                {
                    // Get all the selected actors' selection classes
                    var selectedClasses = World.Selection.Actors
                                          .Where(x => !x.IsDead && x.Owner == player)
                                          .Select(a => a.Trait <Selectable>().Class)
                                          .ToHashSet();

                    // Select actors on the screen that have the same selection class as one of the already selected actors
                    var newSelection = SelectActorsOnScreen(World, worldRenderer, selectedClasses, player).ToList();

                    // Check if selecting actors on the screen has selected new units
                    if (newSelection.Count() > World.Selection.Actors.Count())
                    {
                        Game.Debug("Selected across screen");
                    }
                    else
                    {
                        // Select actors in the world that have the same selection class as one of the already selected actors
                        newSelection = SelectActorsInWorld(World, selectedClasses, player).ToList();
                        Game.Debug("Selected across map");
                    }

                    World.Selection.Combine(World, newSelection, true, false);
                }
                else if (key == Game.Settings.Keys.ToggleStatusBarsKey)
                {
                    return(ToggleStatusBars());
                }
                else if (key == Game.Settings.Keys.TogglePixelDoubleKey)
                {
                    return(TogglePixelDouble());
                }
            }

            return(false);
        }
        public override bool HandleKeyPress(KeyInput e)
        {
            var player = World.RenderPlayer ?? World.LocalPlayer;

            if (e.Event == KeyInputEvent.Down)
            {
                var key = Hotkey.FromKeyInput(e);

                if (key == Game.Settings.Keys.PauseKey && World.LocalPlayer != null)                 // Disable pausing for spectators
                {
                    World.SetPauseState(!World.Paused);
                }
                else if (key == Game.Settings.Keys.SelectAllUnitsKey)
                {
                    var ownUnitsOnScreen = SelectActorsInBox(World, worldRenderer.Viewport.TopLeft, worldRenderer.Viewport.BottomRight,
                                                             a => a.Owner == player);
                    World.Selection.Combine(World, ownUnitsOnScreen, false, false);
                }
                else if (key == Game.Settings.Keys.SelectUnitsByTypeKey)
                {
                    var selectedTypes = World.Selection.Actors
                                        .Where(x => x.Owner == player)
                                        .Select(a => a.Info);

                    Func <Actor, bool> cond = a => a.Owner == player && selectedTypes.Contains(a.Info);
                    var tl           = worldRenderer.Viewport.TopLeft;
                    var br           = worldRenderer.Viewport.BottomRight;
                    var newSelection = SelectActorsInBox(World, tl, br, cond);

                    if (newSelection.Count() > selectedTypes.Count())
                    {
                        Game.Debug("Selected across screen");
                    }
                    else
                    {
                        newSelection = World.ActorMap.ActorsInWorld().Where(cond);
                        Game.Debug("Selected across map");
                    }

                    World.Selection.Combine(World, newSelection, true, false);
                }
                else if (key == Game.Settings.Keys.ToggleStatusBarsKey)
                {
                    return(ToggleStatusBars());
                }
                else if (key == Game.Settings.Keys.TogglePixelDoubleKey)
                {
                    return(TogglePixelDouble());
                }
            }

            return(false);
        }
Beispiel #12
0
        public override bool HandleKeyPress(KeyInput e)
        {
            if (e.Event == KeyInputEvent.Up || CurrentQueue == null)
            {
                return(false);
            }

            var hotkey  = Hotkey.FromKeyInput(e);
            var toBuild = icons.Values.FirstOrDefault(i => i.Hotkey == hotkey);

            return(toBuild != null?HandleEvent(toBuild, MouseButton.Left, Modifiers.None) : false);
        }
Beispiel #13
0
        public override bool HandleKeyPress(KeyInput e)
        {
            if (e.Event == KeyInputEvent.Down)
            {
                var hk = Hotkey.FromKeyInput(e);

                if (hk == Game.Settings.Keys.DevReloadChromeKey)
                {
                    ChromeProvider.Initialize(Game.ModData.Manifest.Chrome);
                    return(true);
                }
            }

            return(base.HandleKeyPress(e));
        }
Beispiel #14
0
        public override bool HandleKeyPress(KeyInput e)
        {
            if (e.Event == KeyInputEvent.Down)
            {
                var hotkey = Hotkey.FromKeyInput(e);
                var a      = icons.Values.FirstOrDefault(i => i.Hotkey == hotkey);

                if (a != null)
                {
                    ClickIcon(a);
                    return(true);
                }
            }

            return(false);
        }
Beispiel #15
0
        public override bool HandleKeyPress(KeyInput e)
        {
            if (IsDisabled() || e.Event == KeyInputEvent.Up)
            {
                return(false);
            }

            if (!HasKeyboardFocus || IgnoreKeys.Contains(e.Key))
            {
                return(false);
            }

            Key = Hotkey.FromKeyInput(e);

            return(true);
        }
Beispiel #16
0
        public MapEditorLogic(Widget widget, World world, WorldRenderer worldRenderer)
        {
            var gridButton           = widget.GetOrNull <ButtonWidget>("GRID_BUTTON");
            var terrainGeometryTrait = world.WorldActor.Trait <TerrainGeometryOverlay>();

            if (gridButton != null && terrainGeometryTrait != null)
            {
                gridButton.OnClick       = () => terrainGeometryTrait.Enabled ^= true;
                gridButton.IsHighlighted = () => terrainGeometryTrait.Enabled;
            }

            var zoomDropdown = widget.Get <DropDownButtonWidget>("ZOOM_BUTTON");

            if (zoomDropdown != null)
            {
                var selectedZoom  = Game.Settings.Graphics.PixelDouble ? 2f : 1f;
                var selectedLabel = selectedZoom.ToString();
                Func <float, ScrollItemWidget, ScrollItemWidget> setupItem = (zoom, itemTemplate) =>
                {
                    var item = ScrollItemWidget.Setup(itemTemplate,
                                                      () => selectedZoom == zoom,
                                                      () => { worldRenderer.Viewport.Zoom = selectedZoom = zoom; selectedLabel = zoom.ToString(); });

                    var label = zoom.ToString();
                    item.Get <LabelWidget>("LABEL").GetText = () => label;

                    return(item);
                };

                var options = new[] { 2f, 1f, 0.5f, 0.25f };
                zoomDropdown.OnMouseDown = _ => zoomDropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 150, options, setupItem);
                zoomDropdown.GetText     = () => selectedLabel;
                zoomDropdown.GetKey      = _ => Game.Settings.Keys.TogglePixelDoubleKey;
                zoomDropdown.OnKeyPress  = e =>
                {
                    var key = Hotkey.FromKeyInput(e);
                    if (key != Game.Settings.Keys.TogglePixelDoubleKey)
                    {
                        return;
                    }

                    var selected = (options.IndexOf(selectedZoom) + 1) % options.Length;
                    worldRenderer.Viewport.Zoom = selectedZoom = options[selected];
                    selectedLabel = selectedZoom.ToString();
                };
            }
        }
        public bool HandleKeyPress(KeyInput e)
        {
            if (e.Event == KeyInputEvent.Down)
            {
                var h = Hotkey.FromKeyInput(e);
                if (h == Game.Settings.Keys.ObserverCombinedView && !limitViews)
                {
                    selected = combined;
                    selected.OnClick();

                    return(true);
                }

                if (h == Game.Settings.Keys.ObserverWorldView && !limitViews)
                {
                    selected = disableShroud;
                    selected.OnClick();

                    return(true);
                }

                if (e.Key >= Keycode.NUMBER_0 && e.Key <= Keycode.NUMBER_9)
                {
                    var key  = (int)e.Key - (int)Keycode.NUMBER_0;
                    var team = teams.Where(t => t.Key == key).SelectMany(s => s);
                    if (!team.Any())
                    {
                        return(false);
                    }

                    if (e.Modifiers == Modifiers.Shift)
                    {
                        team = team.Reverse();
                    }

                    selected = team.SkipWhile(t => t.Player != selected.Player).Skip(1).FirstOrDefault() ?? team.FirstOrDefault();
                    selected.OnClick();

                    return(true);
                }
            }

            return(false);
        }
Beispiel #18
0
        public override bool HandleKeyPress(KeyInput e)
        {
            if (Hotkey.FromKeyInput(e) != Key || e.Event != KeyInputEvent.Down)
            {
                return(false);
            }

            if (!IsDisabled())
            {
                OnKeyPress(e);
                Sound.PlayNotification(ModRules, null, "Sounds", "ClickSound", null);
            }
            else
            {
                Sound.PlayNotification(ModRules, null, "Sounds", "ClickDisabledSound", null);
            }

            return(true);
        }
Beispiel #19
0
        public override bool HandleKeyPress(KeyInput e)
        {
            if (e.Event == KeyInputEvent.Up || CurrentQueue == null)
            {
                return(false);
            }

            var hotkey         = Hotkey.FromKeyInput(e);
            var batchModifiers = e.Modifiers.HasModifier(Modifiers.Shift) ? Modifiers.Shift : Modifiers.None;

            if (batchModifiers != Modifiers.None)
            {
                hotkey = new Hotkey(hotkey.Key, hotkey.Modifiers ^ Modifiers.Shift);
            }

            var toBuild = icons.Values.FirstOrDefault(i => i.Hotkey == hotkey);

            return(toBuild != null?HandleEvent(toBuild, MouseButton.Left, batchModifiers) : false);
        }
        public override bool HandleKeyPress(KeyInput e)
        {
            if (e.Event != KeyInputEvent.Down)
            {
                return(false);
            }

            var hotkey = Hotkey.FromKeyInput(e);

            if (hotkey == Game.Settings.Keys.NextProductionTabKey)
            {
                return(SelectNextTab(false));
            }
            else if (hotkey == Game.Settings.Keys.PreviousProductionTabKey)
            {
                return(SelectNextTab(true));
            }

            return(false);
        }
Beispiel #21
0
        public override bool HandleKeyPress(KeyInput e)
        {
            if (e.Event == KeyInputEvent.Up)
            {
                return(false);
            }

            var hotkey = Hotkey.FromKeyInput(e);

            if (hotkey == Game.Settings.Keys.NextProductionTabKey)
            {
                return(ChangeTab(false));
            }
            else if (hotkey == Game.Settings.Keys.PreviousProductionTabKey)
            {
                return(ChangeTab(true));
            }

            return(DoBuildingHotkey(e, world));
        }
Beispiel #22
0
        bool ProcessInput(KeyInput e)
        {
            if (e.Event == KeyInputEvent.Down)
            {
                var key = Hotkey.FromKeyInput(e);
                var ks  = Game.Settings.Keys;

                if (key == ks.AttackMoveKey)
                {
                    return(PerformAttackMove());
                }

                if (key == ks.StopKey)
                {
                    return(PerformStop());
                }

                if (key == ks.ScatterKey)
                {
                    return(PerformScatter());
                }

                if (key == ks.DeployKey)
                {
                    return(PerformDeploy());
                }

                var stanceKeyIdx = new Hotkey[] { ks.StanceHoldFireKey, ks.StanceReturnFireKey, ks.StanceDefendKey, ks.StanceAttackAnythingKey }.IndexOf(key);
                if (stanceKeyIdx > -1)
                {
                    return(SetUnitStance((UnitStance)stanceKeyIdx));
                }

                if (key == ks.GuardKey)
                {
                    return(PerformGuard());
                }
            }

            return(false);
        }
        bool ProcessInput(KeyInput e)
        {
            if (e.Event == KeyInputEvent.Down)
            {
                var key = Hotkey.FromKeyInput(e);
                var ks  = Game.Settings.Keys;

                if (key == ks.AttackMoveKey)
                {
                    return(PerformAttackMove());
                }

                if (key == ks.StopKey)
                {
                    return(PerformStop());
                }

                if (key == ks.ScatterKey)
                {
                    return(PerformScatter());
                }

                if (key == ks.DeployKey)
                {
                    return(PerformDeploy());
                }

                if (key == ks.StanceCycleKey)
                {
                    return(PerformStanceCycle());
                }

                if (key == ks.GuardKey)
                {
                    return(PerformGuard());
                }
            }

            return(false);
        }
Beispiel #24
0
        public override bool HandleKeyPress(KeyInput e)
        {
            if (e.Event != KeyInputEvent.Down)
            {
                return(false);
            }

            var hotkey = Hotkey.FromKeyInput(e);

            if (hotkey == Game.Settings.Keys.NextProductionTabKey)
            {
                Game.Sound.PlayNotification(world.Map.Rules, null, "Sounds", "ClickSound", null);
                return(SelectNextTab(false));
            }
            else if (hotkey == Game.Settings.Keys.PreviousProductionTabKey)
            {
                Game.Sound.PlayNotification(world.Map.Rules, null, "Sounds", "ClickSound", null);
                return(SelectNextTab(true));
            }

            return(false);
        }
Beispiel #25
0
        public override bool HandleKeyPress(KeyInput e)
        {
            if (Hotkey.FromKeyInput(e) != Key.GetValue() || e.Event != KeyInputEvent.Down || (DisableKeyRepeat && e.IsRepeat))
            {
                return(false);
            }

            if (!IsDisabled())
            {
                OnKeyPress(e);
                if (!DisableKeySound)
                {
                    Game.Sound.PlayNotification(ModRules, null, "Sounds", "ClickSound", null);
                }
            }
            else if (!DisableKeySound)
            {
                Game.Sound.PlayNotification(ModRules, null, "Sounds", "ClickDisabledSound", null);
            }

            return(true);
        }
        public override bool HandleKeyPress(KeyInput e)
        {
            if (e.Event == KeyInputEvent.Down)
            {
                if (e.Key >= Keycode.NUMBER_0 && e.Key <= Keycode.NUMBER_9)
                {
                    var group = (int)e.Key - (int)Keycode.NUMBER_0;
                    World.Selection.DoControlGroup(World, worldRenderer, group, e.Modifiers, e.MultiTapCount);
                    return(true);
                }
                else if (Hotkey.FromKeyInput(e) == Game.Settings.Keys.PauseKey && World.LocalPlayer != null)                 // Disable pausing for spectators
                {
                    World.SetPauseState(!World.Paused);
                }
                else if (Hotkey.FromKeyInput(e) == Game.Settings.Keys.SelectAllUnitsKey)
                {
                    var ownUnitsOnScreen = SelectActorsInBox(World, worldRenderer.Viewport.TopLeft, worldRenderer.Viewport.BottomRight,
                                                             a => a.Owner == World.RenderPlayer);
                    World.Selection.Combine(World, ownUnitsOnScreen, false, false);
                }
            }

            return(false);
        }
Beispiel #27
0
        bool DoBuildingHotkey(KeyInput e, World world)
        {
            if (!paletteOpen)
            {
                return(false);
            }
            if (CurrentQueue == null)
            {
                return(false);
            }

            var key  = Hotkey.FromKeyInput(e);
            var ks   = Game.Settings.Keys;
            var slot = -1;

            for (var i = 0; i < 24; i++)
            {
                if (ks.GetProductionHotkey(i) == key)
                {
                    slot = i;
                    break;
                }
            }

            var allBuildables = CurrentQueue.AllItems().OrderBy(a => a.Traits.Get <BuildableInfo>().BuildPaletteOrder).ToArray();
            var toBuild       = allBuildables.ElementAtOrDefault(slot);

            if (toBuild != null)
            {
                Sound.PlayNotification(world.Map.Rules, null, "Sounds", "TabClick", null);
                HandleBuildPalette(world, toBuild.Name, true);
                return(true);
            }

            return(false);
        }
Beispiel #28
0
        public override bool HandleKeyPress(KeyInput e)
        {
            var key = Hotkey.FromKeyInput(e);

            Func <HotkeyReference, ScrollDirection, bool> handleMapScrollKey = (hotkey, scrollDirection) =>
            {
                var isHotkey = false;
                var keyValue = hotkey.GetValue();
                if (key.Key == keyValue.Key)
                {
                    isHotkey           = key == keyValue;
                    keyboardDirections = keyboardDirections.Set(scrollDirection, e.Event == KeyInputEvent.Down && (isHotkey || keyValue.Modifiers == Modifiers.None));
                }

                return(isHotkey);
            };

            if (handleMapScrollKey(ScrollUpKey, ScrollDirection.Up) || handleMapScrollKey(ScrollDownKey, ScrollDirection.Down) ||
                handleMapScrollKey(ScrollLeftKey, ScrollDirection.Left) || handleMapScrollKey(ScrollRightKey, ScrollDirection.Right))
            {
                return(true);
            }

            if (e.Event != KeyInputEvent.Down)
            {
                return(false);
            }

            if (ZoomInKey.IsActivatedBy(e))
            {
                worldRenderer.Viewport.AdjustZoom(0.25f);
                return(true);
            }

            if (ZoomOutKey.IsActivatedBy(e))
            {
                worldRenderer.Viewport.AdjustZoom(-0.25f);
                return(true);
            }

            if (JumpToTopEdgeKey.IsActivatedBy(e))
            {
                worldRenderer.Viewport.Center(new WPos(worldRenderer.Viewport.CenterPosition.X, 0, 0));
                return(true);
            }

            if (JumpToBottomEdgeKey.IsActivatedBy(e))
            {
                worldRenderer.Viewport.Center(new WPos(worldRenderer.Viewport.CenterPosition.X, worldRenderer.World.Map.ProjectedBottomRight.Y, 0));
                return(true);
            }

            if (JumpToLeftEdgeKey.IsActivatedBy(e))
            {
                worldRenderer.Viewport.Center(new WPos(0, worldRenderer.Viewport.CenterPosition.Y, 0));
                return(true);
            }

            if (JumpToRightEdgeKey.IsActivatedBy(e))
            {
                worldRenderer.Viewport.Center(new WPos(worldRenderer.World.Map.ProjectedBottomRight.X, worldRenderer.Viewport.CenterPosition.Y, 0));
                return(true);
            }

            for (var i = 0; i < saveBookmarkHotkeys.Length; i++)
            {
                if (saveBookmarkHotkeys[i].IsActivatedBy(e))
                {
                    bookmarkPositions[i] = worldRenderer.Viewport.CenterPosition;
                    return(true);
                }
            }

            for (var i = 0; i < restoreBookmarkHotkeys.Length; i++)
            {
                if (restoreBookmarkHotkeys[i].IsActivatedBy(e))
                {
                    var bookmark = bookmarkPositions[i];
                    if (bookmark.HasValue)
                    {
                        worldRenderer.Viewport.Center(bookmark.Value);
                        return(true);
                    }
                }
            }

            return(world.OrderGenerator.HandleKeyPress(e));
        }
Beispiel #29
0
        public override bool HandleKeyPress(KeyInput e)
        {
            var key = Hotkey.FromKeyInput(e);
            var ks  = Game.Settings.Keys;

            if (key == ks.MapScrollUp)
            {
                keyboardDirections = keyboardDirections.Set(ScrollDirection.Up, e.Event == KeyInputEvent.Down);
                return(true);
            }

            if (key == ks.MapScrollDown)
            {
                keyboardDirections = keyboardDirections.Set(ScrollDirection.Down, e.Event == KeyInputEvent.Down);
                return(true);
            }

            if (key == ks.MapScrollLeft)
            {
                keyboardDirections = keyboardDirections.Set(ScrollDirection.Left, e.Event == KeyInputEvent.Down);
                return(true);
            }

            if (key == ks.MapScrollRight)
            {
                keyboardDirections = keyboardDirections.Set(ScrollDirection.Right, e.Event == KeyInputEvent.Down);
                return(true);
            }

            if (key == ks.MapPushTop)
            {
                worldRenderer.Viewport.Center(new WPos(worldRenderer.Viewport.CenterPosition.X, 0, 0));
                return(false);
            }

            if (key == ks.MapPushBottom)
            {
                worldRenderer.Viewport.Center(new WPos(worldRenderer.Viewport.CenterPosition.X, worldRenderer.World.Map.ProjectedBottomRight.Y, 0));
                return(false);
            }

            if (key == ks.MapPushLeftEdge)
            {
                worldRenderer.Viewport.Center(new WPos(0, worldRenderer.Viewport.CenterPosition.Y, 0));
                return(false);
            }

            if (key == ks.MapPushRightEdge)
            {
                worldRenderer.Viewport.Center(new WPos(worldRenderer.World.Map.ProjectedBottomRight.X, worldRenderer.Viewport.CenterPosition.Y, 0));
            }

            if (key == ks.ViewPortBookmarkSaveSlot1)
            {
                SaveCurrentPositionToBookmark(0);
                return(false);
            }

            if (key == ks.ViewPortBookmarkSaveSlot2)
            {
                SaveCurrentPositionToBookmark(1);
                return(false);
            }

            if (key == ks.ViewPortBookmarkSaveSlot3)
            {
                SaveCurrentPositionToBookmark(2);
                return(false);
            }

            if (key == ks.ViewPortBookmarkSaveSlot4)
            {
                SaveCurrentPositionToBookmark(3);
                return(false);
            }

            if (key == ks.ViewPortBookmarkUseSlot1)
            {
                JumpToSavedBookmark(0);
                return(false);
            }

            if (key == ks.ViewPortBookmarkUseSlot2)
            {
                JumpToSavedBookmark(1);
                return(false);
            }

            if (key == ks.ViewPortBookmarkUseSlot3)
            {
                JumpToSavedBookmark(2);
                return(false);
            }

            if (key == ks.ViewPortBookmarkUseSlot4)
            {
                JumpToSavedBookmark(3);
                return(false);
            }

            return(false);
        }
Beispiel #30
0
        public MapEditorLogic(Widget widget, World world, WorldRenderer worldRenderer, Dictionary <string, MiniYaml> logicArgs)
        {
            MiniYaml yaml;
            var      changeZoomKey = new NamedHotkey();

            if (logicArgs.TryGetValue("ChangeZoomKey", out yaml))
            {
                changeZoomKey = new NamedHotkey(yaml.Value, Game.Settings.Keys);
            }

            var editorViewport = widget.Get <EditorViewportControllerWidget>("MAP_EDITOR");

            var gridButton           = widget.GetOrNull <ButtonWidget>("GRID_BUTTON");
            var terrainGeometryTrait = world.WorldActor.Trait <TerrainGeometryOverlay>();

            if (gridButton != null && terrainGeometryTrait != null)
            {
                gridButton.OnClick       = () => terrainGeometryTrait.Enabled ^= true;
                gridButton.IsHighlighted = () => terrainGeometryTrait.Enabled;
            }

            var zoomDropdown = widget.GetOrNull <DropDownButtonWidget>("ZOOM_BUTTON");

            if (zoomDropdown != null)
            {
                var selectedZoom = (Game.Settings.Graphics.PixelDouble ? 2f : 1f).ToString();

                zoomDropdown.SelectedItem = selectedZoom;
                Func <float, ScrollItemWidget, ScrollItemWidget> setupItem = (zoom, itemTemplate) =>
                {
                    var item = ScrollItemWidget.Setup(
                        itemTemplate,
                        () =>
                    {
                        return(float.Parse(zoomDropdown.SelectedItem) == zoom);
                    },
                        () =>
                    {
                        zoomDropdown.SelectedItem   = selectedZoom = zoom.ToString();
                        worldRenderer.Viewport.Zoom = float.Parse(selectedZoom);
                    });

                    var label = zoom.ToString();
                    item.Get <LabelWidget>("LABEL").GetText = () => label;

                    return(item);
                };

                var options = worldRenderer.Viewport.AvailableZoomSteps;
                zoomDropdown.OnMouseDown = _ => zoomDropdown.ShowDropDown("LABEL_DROPDOWN_TEMPLATE", 150, options, setupItem);
                zoomDropdown.GetText     = () => zoomDropdown.SelectedItem;
                zoomDropdown.OnKeyPress  = e =>
                {
                    var key = Hotkey.FromKeyInput(e);
                    if (key != changeZoomKey.GetValue())
                    {
                        return;
                    }

                    var selected = (options.IndexOf(float.Parse(selectedZoom)) + 1) % options.Length;
                    var zoom     = options[selected];
                    worldRenderer.Viewport.Zoom = zoom;
                    selectedZoom = zoom.ToString();
                    zoomDropdown.SelectedItem = zoom.ToString();
                };
            }

            var copypasteButton = widget.GetOrNull <ButtonWidget>("COPYPASTE_BUTTON");

            if (copypasteButton != null)
            {
                copypasteButton.OnClick       = () => editorViewport.SetBrush(new EditorCopyPasteBrush(editorViewport, worldRenderer));
                copypasteButton.IsHighlighted = () => editorViewport.CurrentBrush is EditorCopyPasteBrush;
            }

            var coordinateLabel = widget.GetOrNull <LabelWidget>("COORDINATE_LABEL");

            if (coordinateLabel != null)
            {
                coordinateLabel.GetText = () =>
                {
                    var cell = worldRenderer.Viewport.ViewToWorld(Viewport.LastMousePos);
                    var map  = worldRenderer.World.Map;
                    return(map.Height.Contains(cell) ?
                           "{0},{1} ({2})".F(cell, map.Height[cell], map.Tiles[cell].Type) : "");
                };
            }

            var cashLabel = widget.GetOrNull <LabelWidget>("CASH_LABEL");

            if (cashLabel != null)
            {
                var reslayer = worldRenderer.World.WorldActor.TraitsImplementing <EditorResourceLayer>().FirstOrDefault();
                if (reslayer != null)
                {
                    cashLabel.GetText = () => "$ {0}".F(reslayer.NetWorth);
                }
            }
        }