Beispiel #1
0
        public void Init(GameWindow game)
        {
            if (_game != null)
            {
                return;
            }
            _game = game;
            this._originalOSCursor = _game.Cursor;

            game.MouseDown += (sender, e) =>
            {
                if (isInputBlocked())
                {
                    return;
                }
                var button = convert(e.Button);
                _actions.Enqueue(() => MouseDown.InvokeAsync(new AGS.API.MouseButtonEventArgs(null, button, MousePosition)));
            };
            game.MouseUp += (sender, e) =>
            {
                if (isInputBlocked())
                {
                    return;
                }
                var button = convert(e.Button);
                _actions.Enqueue(() => MouseUp.InvokeAsync(new AGS.API.MouseButtonEventArgs(null, button, MousePosition)));
            };
            game.MouseMove += (sender, e) =>
            {
                if (isInputBlocked())
                {
                    return;
                }
                _mouseX = e.Mouse.X;
                _mouseY = e.Mouse.Y;
                _actions.Enqueue(() => MouseMove.InvokeAsync(new MousePositionEventArgs(MousePosition)));
            };
            game.KeyDown += (sender, e) =>
            {
                API.Key key = convert(e.Key);
                _keysDown.Add(key);
                if (isInputBlocked())
                {
                    return;
                }
                _actions.Enqueue(() => KeyDown.InvokeAsync(new KeyboardEventArgs(key)));
            };
            game.KeyUp += (sender, e) =>
            {
                API.Key key = convert(e.Key);
                _keysDown.Remove(key);
                if (isInputBlocked())
                {
                    return;
                }
                _actions.Enqueue(() => KeyUp.InvokeAsync(new KeyboardEventArgs(key)));
            };

            _events.OnRepeatedlyExecuteAlways.Subscribe(onRepeatedlyExecute);
        }
Beispiel #2
0
        private async void onKeyDown(object sender, Tuple <Keycode, KeyEvent> args)
        {
            var key = args.Item1.Convert();

            if (key == null)
            {
                return;
            }
            await KeyDown.InvokeAsync(sender, new KeyboardEventArgs(key.Value));
        }
Beispiel #3
0
        private void init(GameWindow game)
        {
            if (_game != null)
            {
                return;
            }
            _game             = game;
            _originalOSCursor = game.Cursor;

            _cursor.PropertyChanged += (sender, e) =>
            {
                if (_cursor.Cursor != null)
                {
                    _game.Cursor = MouseCursor.Empty;
                }
            };
            game.MouseDown += (sender, e) =>
            {
                if (isInputBlocked())
                {
                    return;
                }
                var button = convert(e.Button);
                _actions.Enqueue(() => MouseDown.InvokeAsync(new API.MouseButtonEventArgs(_hitTest.ObjectAtMousePosition, button, MousePosition)));
            };
            game.MouseUp += (sender, e) =>
            {
                if (isInputBlocked())
                {
                    return;
                }
                var button = convert(e.Button);
                _actions.Enqueue(() => MouseUp.InvokeAsync(new API.MouseButtonEventArgs(_hitTest.ObjectAtMousePosition, button, MousePosition)));
            };
            game.MouseMove += (sender, e) =>
            {
                _mouseX = e.Mouse.X;
                _mouseY = e.Mouse.Y;
                _actions.Enqueue(() => MouseMove.InvokeAsync(new MousePositionEventArgs(MousePosition)));
            };
            game.KeyDown += (sender, e) =>
            {
                API.Key key = convert(e.Key);
                _keysDown.Add(key);
                if (isInputBlocked())
                {
                    return;
                }
                _actions.Enqueue(() => KeyDown.InvokeAsync(new KeyboardEventArgs(key)));
            };
            game.KeyUp += (sender, e) =>
            {
                API.Key key = convert(e.Key);
                _keysDown.Remove(key);
                if (isInputBlocked())
                {
                    return;
                }
                _actions.Enqueue(() => KeyUp.InvokeAsync(new KeyboardEventArgs(key)));
            };

            _events.OnRepeatedlyExecuteAlways.Subscribe(onRepeatedlyExecute);
        }
        private async Task OnKeyDownAsync(KeyboardEventArgs args)
        {
            if (IsEditing)
            {
                switch (args.Code)
                {
                case "Escape":
                    CancelEdit();
                    break;

                case "Enter":
                case "Return":
                    await CommitEditAsync().ConfigureAwait(true);

                    break;
                }
            }
            else
            {
                switch (args.Code)
                {
                case "F2":
                    await BeginEditAsync().ConfigureAwait(true);

                    break;

                case "KeyA":
                    if (args.CtrlKey && SelectionMode == TableSelectionMode.Multiple)
                    {
                        await ClearSelectionAsync().ConfigureAwait(true);

                        Selection.AddRange(ItemsToDisplay.Select(x => KeyField !(x).ToString()));
                        await SelectionChanged.InvokeAsync(null).ConfigureAwait(true);
                    }
                    break;

                case "ArrowUp":
                case "ArrowDown":
                    if (Selection.Count == 1 && KeyField != null)
                    {
                        var items = ItemsToDisplay.ToList();
                        var item  = items.Find(x => KeyField(x).ToString() == Selection[0]);
                        if (item != null)
                        {
                            var idx = items.IndexOf(item);
                            if (args.Code == "ArrowUp" && idx > 0)
                            {
                                Selection.Clear();
                                Selection.Add(KeyField(items[idx - 1]).ToString());
                            }
                            else if (args.Code == "ArrowDown" && idx < items.Count - 1)
                            {
                                Selection.Clear();
                                Selection.Add(KeyField(items[idx + 1]).ToString());
                            }
                        }
                    }
                    break;
                }
            }

            await KeyDown.InvokeAsync(args).ConfigureAwait(true);
        }