コード例 #1
0
 /// <inheritdoc/>
 public override void LostMouse(MouseScreenObjectState state)
 {
     if (IsMouseOver)
     {
         OnMouseExit(state);
     }
 }
コード例 #2
0
        /// <summary>
        /// Raises the <see cref="MouseExit"/> event.
        /// </summary>
        /// <param name="state">Current mouse state in relation to this console.</param>
        protected virtual void OnMouseExit(MouseScreenObjectState state)
        {
            // Force mouse off just in case
            IsMouseOver = false;

            MouseExit?.Invoke(this, state);
        }
コード例 #3
0
        public override bool ProcessMouse(MouseScreenObjectState state)
        {
            _mouseCursor.IsVisible = state.IsOnScreenObject;
            _mouseCursor.Position  = state.CellPosition;

            return(base.ProcessMouse(state));
        }
コード例 #4
0
        public override bool ProcessMouse(MouseScreenObjectState state)
        {
            mouse.Update(state, IsMouseOver);
            if (state.IsOnScreenObject)
            {
                //If the mouse enters the screen held but the hold started from outside the screen, we ignore it
                var(x, y) = state.SurfaceCellPosition;
                var colors = colorPicker.colors;
                if (state.Mouse.LeftButtonDown && mouse.leftPressedOnScreen)
                {
                    model.brush.foreground      = colors[x, y];
                    colorPicker.foregroundPoint = new Point(x, y);

                    colorPicked?.Invoke();
                }
                if (state.Mouse.RightButtonDown && mouse.rightPressedOnScreen)
                {
                    model.brush.background      = colors[x, y];
                    colorPicker.backgroundPoint = new Point(x, y);

                    colorPicked?.Invoke();
                }
            }

            return(base.ProcessMouse(state));
        }
コード例 #5
0
ファイル: Panel.cs プロジェクト: AnotherEpigone/SadConsole
        /// <inheritdoc/>
        public override bool ProcessMouse(MouseScreenObjectState state)
        {
            if (IsEnabled && UseMouse)
            {
                bool processResult = base.ProcessMouse(state);

                var controls = new List <ControlBase>(Controls);
                controls.Reverse();

                foreach (var control in controls)
                {
                    var state2 = new ControlMouseState(control, state);

                    if (state2.IsMouseOver && state.Mouse.RightClicked)
                    {
                        System.Diagnostics.Debugger.Break();
                    }

                    if (control.ProcessMouse(state))
                    {
                        return(true);
                    }
                }

                return(processResult);
            }

            return(false);
        }
コード例 #6
0
        public void Update(MouseScreenObjectState state, bool IsMouseOver)
        {
            prevMouseOver = nowMouseOver;
            nowMouseOver  = IsMouseOver;
            mouseOver     = !prevMouseOver ? (nowMouseOver ? MouseState.Enter : MouseState.Outside) : (nowMouseOver ? MouseState.Hover : MouseState.Exit);

            prevPos = nowPos;
            nowPos  = state.SurfaceCellPosition;

            prevLeft  = nowLeft;
            prevRight = nowRight;
            nowLeft   = state.Mouse.LeftButtonDown;
            nowRight  = state.Mouse.RightButtonDown;

            left  = !prevLeft ? (!nowLeft ? ClickState.Up : ClickState.Pressed) : (nowLeft ? ClickState.Held : ClickState.Released);
            right = !prevRight ? (!nowRight ? ClickState.Up : ClickState.Pressed) : (nowRight ? ClickState.Held : ClickState.Released);
            if (left == ClickState.Pressed)
            {
                leftPressedOnScreen = IsMouseOver;
                leftPressedPos      = state.SurfaceCellPosition;
            }
            if (right == ClickState.Pressed)
            {
                rightPressedOnScreen = IsMouseOver;
                rightPressedPos      = state.SurfaceCellPosition;
            }
        }
コード例 #7
0
 /// <inheritdoc />
 public void ProcessMouse(IScreenObject host, MouseScreenObjectState state, out bool handled)
 {
     handled = false;
     foreach (var entity in _mapEntities.ToArray())
     {
         handled = entity.ProcessMouse(state);
     }
 }
コード例 #8
0
        public override bool ProcessMouse(MouseScreenObjectState state)
        {
            mouse.Update(state, IsMouseOver);
            if (state.IsOnScreenObject)
            {
                int index = (state.SurfaceCellPosition.X) + (state.SurfaceCellPosition.Y * Width);
                if (index > -1 && index < paletteModel.palette.Count)
                {
                    var left  = mouse.leftPressedOnScreen && mouse.nowLeft;
                    var right = mouse.rightPressedOnScreen && mouse.nowRight;
                    if (left || right)
                    {
                        if (left)
                        {
                            if (paletteModel.foregroundIndex != index)
                            {
                                //Don't want the color to flash between index and transparent
                                if (mouse.left == ClickState.Pressed || (mouse.left == ClickState.Held && paletteModel.foregroundIndex != null))
                                {
                                    paletteModel.foregroundIndex = index;
                                    spriteModel.brush.foreground = paletteModel.palette[index];
                                }
                            }
                            else if (mouse.left == ClickState.Pressed)
                            {
                                //Press the same color to deselect
                                paletteModel.foregroundIndex = null;
                                spriteModel.brush.foreground = Color.Transparent;
                            }
                        }
                        if (right)
                        {
                            if (paletteModel.backgroundIndex != index)
                            {
                                //Don't want the color to flash between index and transparent
                                if (mouse.right == ClickState.Pressed || (mouse.right == ClickState.Held && paletteModel.backgroundIndex != null))
                                {
                                    paletteModel.backgroundIndex = index;
                                    spriteModel.brush.background = paletteModel.palette[index];
                                }
                            }
                            else if (mouse.right == ClickState.Pressed)
                            {
                                //Press the same color to deselect
                                paletteModel.backgroundIndex = null;
                                spriteModel.brush.background = Color.Transparent;
                            }
                        }

                        brushChanged?.Invoke();
                    }
                }
            }

            return(base.ProcessMouse(state));
        }
コード例 #9
0
        public override bool ProcessMouse(MouseScreenObjectState state)
        {
            // Process mouse for each console
            var childState = new MouseScreenObjectState(_controlsConsole, state.Mouse);

            if (childState.IsOnScreenObject)
            {
                return(_controlsConsole.ProcessMouse(childState));
            }

            return(false);
        }
コード例 #10
0
        /// <inheritdoc/>
        public override bool ProcessMouse(MouseScreenObjectState state)
        {
            if (!IsVisible)
            {
                return(false);
            }

            foreach (SadConsole.Components.IComponent component in ComponentsMouse.ToArray())
            {
                component.ProcessMouse(this, state, out bool isHandled);

                if (isHandled)
                {
                    return(true);
                }
            }

            if (!UseMouse)
            {
                return(false);
            }

            if (state.IsOnScreenObject)
            {
                if (IsMouseOver != true)
                {
                    IsMouseOver = true;
                    OnMouseEnter(state);
                }

                OnMouseMove(state);

                if (state.Mouse.LeftClicked)
                {
                    OnMouseLeftClicked(state);
                }

                if (state.Mouse.RightClicked)
                {
                    OnRightMouseClicked(state);
                }

                return(true);
            }

            if (IsMouseOver)
            {
                IsMouseOver = false;
                OnMouseExit(state);
            }

            return(false);
        }
コード例 #11
0
 public override bool ProcessMouse(MouseScreenObjectState state)
 {
     mouse.Update(state, IsMouseOver);
     if (isActive && IsMouseOver)
     {
         if (mouse.leftPressedOnScreen && mouse.left == ClickState.Released)
         {
             click();
         }
     }
     return(base.ProcessMouse(state));
 }
コード例 #12
0
 public override void ProcessMouse(IScreenObject host, MouseScreenObjectState state, out bool handled)
 {
     if (state.Mouse.IsOnScreen)
     {
         host.Position = state.WorldCellPosition;
         handled       = true;
     }
     else
     {
         handled = false;
     }
 }
コード例 #13
0
        public override void ProcessMouse(IScreenObject host, MouseScreenObjectState state, out bool handled)
        {
            handled = true;

            var monster = _map.GetEntityAt <Monster>(state.CellPosition);

            if (monster == null)
            {
                Game.DungeonScreen.EnemyStatsConsole.HideStats();
                return;
            }

            Game.DungeonScreen.EnemyStatsConsole.ShowStats(monster);
        }
コード例 #14
0
        public override bool ProcessMouse(MouseScreenObjectState state)
        {
            mouse.Update(state, IsMouseOver);
            if (state.IsOnScreenObject && state.Mouse.LeftButtonDown && mouse.leftPressedOnScreen)
            {
                int index = (state.SurfaceCellPosition.X) + (state.SurfaceCellPosition.Y * Width);
                if (index < 256 && spriteModel.brush.glyph != index)
                {
                    spriteModel.brush.glyph = (char)index;
                    brushChanged?.Invoke();
                }
            }

            return(base.ProcessMouse(state));
        }
コード例 #15
0
 public override bool ProcessMouse(MouseScreenObjectState state)
 {
     var(x, y) = state.SurfaceCellPosition;
     if (state.IsOnScreenObject)
     {
         mouse.Update(state, IsMouseOver);
         if (state.Mouse.LeftButtonDown && mouse.leftPressedOnScreen)
         {
             index           = x;
             colorPicker.hue = index * 360d / bar.Length;
             colorPicker.UpdateColors();
             colorPicker.UpdateBrushPoints(paletteModel);
             colorPicker.UpdatePalettePoints(paletteModel);
         }
     }
     return(base.ProcessMouse(state));
 }
コード例 #16
0
        /// <summary>
        /// Raises the <see cref="MouseMove"/> event.
        /// </summary>
        /// <param name="state">Current mouse state in relation to this console.</param>
        protected virtual void OnMouseMove(MouseScreenObjectState state)
        {
            if (state.Mouse.LeftButtonDown)
            {
                if (MoveToFrontOnMouseClick && Parent != null && Parent.Children.IndexOf(this) != Parent.Children.Count - 1)
                {
                    Parent.Children.MoveToTop(this);
                }

                if (FocusOnMouseClick && !IsFocused)
                {
                    IsFocused = true;
                }
            }

            MouseMove?.Invoke(this, state);
        }
コード例 #17
0
ファイル: KeyboardHandler.cs プロジェクト: jeansberg/Rogue
        public override void ProcessMouse(IScreenObject host, MouseScreenObjectState mouse, out bool handled)
        {
            var mousePos = mouse.CellPosition.ToPoint() + new Point(-1, -1);

            if (state == InputState.Targeting)
            {
                trajectory = new List <Point>();
                Point playerPos = player.Location;

                Algorithms.Line(playerPos.X, playerPos.Y, mousePos.X, mousePos.Y, (int x, int y) => {
                    Point point = new Point(x, y);
                    if (!mapConsole.map.InBounds(point) || !mapConsole.map.IsWalkable(point))
                    {
                        trajectory.Clear();
                        return(false);
                    }

                    trajectory.Add(point);

                    return(true);
                });

                mapConsole.overlayPoints = trajectory.Skip(1).ToList();

                if (mouse.Mouse.LeftClicked && trajectory.Any() && trajectory.Count > 1)
                {
                    if (playerPos.X > mousePos.X || playerPos.Y > mousePos.Y)
                    {
                        trajectory.Reverse();
                    }

                    FireMissile(trajectory, player);
                    state = InputState.Idle;
                    mapConsole.overlayPoints.Clear();
                }
            }

            var actor = actors
                        .SingleOrDefault(a => a.Location == mousePos && player.Fov.IsInFov(a.Location.X, a.Location.Y));

            messageConsole.SetMessage(actor?.Name() ?? "");


            handled = true;
        }
コード例 #18
0
        public override bool ProcessMouse(MouseScreenObjectState state)
        {
            int deltaScroll = state.Mouse.ScrollWheelValueChange / 60;

            if (deltaScroll != 0)
            {
                scroll.index += deltaScroll;
                UpdateListing();
            }
            mouse.Update(state, IsMouseOver);
            if (mouse.left == ClickState.Held && mouse.leftPressedOnScreen)
            {
                var deltaY = mouse.prevPos.Y - mouse.nowPos.Y;
                if (deltaY != 0)
                {
                    scroll.index += deltaY;
                }
            }

            return(base.ProcessMouse(state));
        }
コード例 #19
0
        public override bool ProcessMouse(MouseScreenObjectState state)
        {
            if (state.IsOnScreenObject)
            {
                int index = (state.SurfaceCellPosition.X) + (state.SurfaceCellPosition.Y * Width);
                if (index > -1 && index < tileModel.tiles.Count)
                {
                    bool pressLeft = !prevLeft && state.Mouse.LeftButtonDown;
                    if (pressLeft)
                    {
                        if (spriteModel.brush.cell != tileModel.tiles[index])
                        {
                            spriteModel.brush.cell = tileModel.tiles[index];
                        }
                        brushChanged?.Invoke();
                    }
                }
            }
            prevLeft = state.Mouse.LeftButtonDown;

            return(base.ProcessMouse(state));
        }
コード例 #20
0
        /// <summary>
        /// Processes the mouse on each control hosted by this control.
        /// </summary>
        /// <param name="state">The mouse state based on the parent screen object.</param>
        /// <returns><see langword="true"/> when a control processes the mouse; otherwise <see langword="false"/>.</returns>
        public override bool ProcessMouse(MouseScreenObjectState state)
        {
            if (IsEnabled && UseMouse)
            {
                bool processResult = base.ProcessMouse(state);

                var controls = new List <ControlBase>(Controls);
                controls.Reverse();

                foreach (var control in controls)
                {
                    if (control.ProcessMouse(state))
                    {
                        return(true);
                    }
                }

                return(processResult);
            }

            return(false);
        }
コード例 #21
0
        public override void ProcessMouse(IScreenObject host, MouseScreenObjectState state, out bool handled)
        {
            handled = false;

            WorldPlay world = (WorldPlay)host;

            state = new MouseScreenObjectState(world.GameBoard, state.Mouse);

            if (state.IsOnScreenObject)
            {
                if (state.Mouse.LeftButtonDown)
                {
                    if (!world.GameBoard.GetObjectsAtPosition(state.CellPosition, out _))
                    {
                        //world.GameBoard.PlayerControlledObject = obj;
                        world.GameBoard.CreateGameObject(state.CellPosition, "pusher-east", Factories.GameObjectConfig.Empty);
                    }
                }

                if (state.Mouse.RightClicked)
                {
                    if (world.GameBoard.GetObjectsAtPosition(state.CellPosition, out var objects))
                    {
                        if (objects[0].HasComponent <ObjectComponents.Pusher>())
                        {
                            objects[0].RemoveComponent(objects[0].GetComponent <ObjectComponents.Pusher>());
                        }

                        var pusher = new ObjectComponents.Pusher();
                        pusher.Direction = Direction.Types.Down;

                        objects[0].AddComponent(pusher);
                    }
                }

                handled = true;
            }
        }
コード例 #22
0
        public override bool ProcessMouse(SadConsole.Input.MouseScreenObjectState info)
        {
            var worldLocation   = info.Mouse.ScreenPosition.PixelLocationToSurface(FontSize.X, FontSize.Y);
            var consoleLocation = new Point(worldLocation.X - Position.X, worldLocation.Y - Position.Y);

            // Check if mouse is within the upper/lower bounds of the console
            if (Surface.View.Contains(info.SurfaceCellPosition))
            {
                bool isHexRow = info.SurfaceCellPosition.Y % 2 == 1;

                var newMouse = info.Mouse.Clone();

                // Check if mouse is on an alternating row
                if (isHexRow)
                {
                    newMouse.ScreenPosition = (newMouse.ScreenPosition.X - FontSize.X / 2, newMouse.ScreenPosition.Y);
                }

                var newInfo = new MouseScreenObjectState(this, newMouse);

                if (info.ScreenObject == this)
                {
                    FillHexes(lastCell, 176, lastCellHexRow);
                    lastCell       = info.SurfaceCellPosition.ToIndex(Surface.Width);
                    lastCellHexRow = isHexRow;
                    FillHexes(lastCell, 45, isHexRow);
                    IsDirty = true;
                    return(true);
                }
            }

            //base.ProcessMouse(info);

            FillHexes(lastCell, 176, lastCellHexRow);

            return(true);
        }
コード例 #23
0
ファイル: Screen.cs プロジェクト: AnotherEpigone/SadConsole
            public override bool ProcessMouse(MouseScreenObjectState state)
            {
                if (state.IsOnScreenObject)
                {
                    Rectangle mouseArea = _surfaceView.MouseArea;
                    mouseArea = mouseArea.Translate(_surfaceView.Position);
                    if (mouseArea.Contains(state.SurfaceCellPosition))
                    {
                        _cellTrackOnControl = true;
                        Point pos = state.SurfaceCellPosition - _surfaceView.Position;
                        if (_surfaceView.MouseArea.Contains(pos))
                        {
                            SetEditCell(_surfaceView.Surface[pos.X, pos.Y]);
                        }
                    }
                    else if (_cellTrackOnControl)
                    {
                        _cellTrackOnControl = false;
                        SetEditCell(null);
                    }
                }

                return(base.ProcessMouse(state));
            }
コード例 #24
0
 void IComponent.ProcessMouse(IScreenObject host, MouseScreenObjectState state, out bool handled) =>
 handled = false;
コード例 #25
0
 /// <summary>
 /// Raises the <see cref="MouseButtonClicked"/> event.
 /// </summary>
 /// <param name="state">Current mouse state in relation to this console.</param>
 protected virtual void OnRightMouseClicked(MouseScreenObjectState state) => MouseButtonClicked?.Invoke(this, state);
コード例 #26
0
 /// <summary>
 /// Called when IsMouse is true
 /// </summary>
 /// <param name="host">The "Parent" if you're using RogueLikeEntity</param>
 /// <param name="state">The state of the mouse</param>
 /// <param name="handled">Whether or not we are done handling mouse input</param>
 public virtual void ProcessMouse(IScreenObject host, MouseScreenObjectState state, out bool handled) => handled = false;
コード例 #27
0
ファイル: Teletype.cs プロジェクト: AnotherEpigone/SadConsole
 public void ProcessMouse(IScreenObject host, MouseScreenObjectState state, out bool handled) =>
 throw new System.NotImplementedException();
コード例 #28
0
 public override bool ProcessMouse(MouseScreenObjectState state)
 {
     return(base.ProcessMouse(state));
 }
コード例 #29
0
 public override bool ProcessMouse(MouseScreenObjectState state)
 {
     return(false);
 }
コード例 #30
0
 /// <summary>
 /// Raises the <see cref="MouseEnter"/> event.
 /// </summary>
 /// <param name="state">Current mouse state in relation to this console.</param>
 protected virtual void OnMouseEnter(MouseScreenObjectState state) => MouseEnter?.Invoke(this, state);