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); }
/// <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)); }
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); }
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); }; }
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); }
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); }
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)); }
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); }
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); }
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); }
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); }
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); }
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)); }
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); }
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); }
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); }
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); }
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)); }
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); }
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); } } }