Exemplo n.º 1
0
        public AndroidInput(AndroidSimpleGestures gestures, AGS.API.Size virtualResolution,
                            IGameState state, IShouldBlockInput shouldBlockInput, IGameWindowSize windowSize)
        {
            MousePosition     = new MousePosition(0f, 0f, state.Viewport);
            _shouldBlockInput = shouldBlockInput;
            _windowSize       = windowSize;
            _state            = state;
            API.MousePosition.VirtualResolution = virtualResolution;
            float density = Resources.System.DisplayMetrics.Density;

            API.MousePosition.GetWindowWidth  = () => (int)(_windowSize.GetWidth(null) - ((GLUtils.ScreenViewport.X * 2) / density));
            API.MousePosition.GetWindowHeight = () => (int)(_windowSize.GetHeight(null) - ((GLUtils.ScreenViewport.Y * 2) / density));
            MouseDown = new AGSEvent <AGS.API.MouseButtonEventArgs>();
            MouseUp   = new AGSEvent <AGS.API.MouseButtonEventArgs>();
            MouseMove = new AGSEvent <MousePositionEventArgs>();
            KeyDown   = new AGSEvent <KeyboardEventArgs>();
            KeyUp     = new AGSEvent <KeyboardEventArgs>();

            gestures.OnUserDrag += async(sender, e) =>
            {
                if (isInputBlocked())
                {
                    return;
                }
                DateTime now = DateTime.Now;
                _lastDrag   = now;
                IsTouchDrag = true;
                setMousePosition(e);
                await MouseMove.InvokeAsync(new MousePositionEventArgs(MousePosition));

                await Task.Delay(300);

                if (_lastDrag <= now)
                {
                    IsTouchDrag = false;
                }
            };
            gestures.OnUserSingleTap += async(sender, e) =>
            {
                if (isInputBlocked())
                {
                    return;
                }
                setMousePosition(e);
                LeftMouseButtonDown = true;
                await MouseDown.InvokeAsync(new MouseButtonEventArgs(null, MouseButton.Left, MousePosition));

                await Task.Delay(250);

                await MouseUp.InvokeAsync(new MouseButtonEventArgs(null, MouseButton.Left, MousePosition));

                LeftMouseButtonDown = false;
            };
            AndroidGameWindow.Instance.OnNewView += onViewChanged;
            onViewChanged(null, AndroidGameWindow.Instance.View);
        }
Exemplo n.º 2
0
        public AGSInput(GameWindow game, AGS.API.Size virtualResolution, IGameState state, 
                        IAGSRoomTransitions roomTransitions, IGameWindowSize windowSize)
        {
            _windowSize = windowSize;
            this._roomTransitions = roomTransitions;
            this._virtualWidth = virtualResolution.Width;
            this._virtualHeight = virtualResolution.Height;
            this._state = state;
            this._keysDown = new AGSConcurrentHashSet<Key>();

            this._game = game;
            this._originalOSCursor = _game.Cursor;

            MouseDown = new AGSEvent<AGS.API.MouseButtonEventArgs>();
            MouseUp = new AGSEvent<AGS.API.MouseButtonEventArgs>();
            MouseMove = new AGSEvent<MousePositionEventArgs>();
            KeyDown = new AGSEvent<KeyboardEventArgs>();
            KeyUp = new AGSEvent<KeyboardEventArgs>();

            game.MouseDown += async (sender, e) =>
            {
                if (isInputBlocked()) return;
                var button = convert(e.Button);
                if (button == AGS.API.MouseButton.Left) LeftMouseButtonDown = true;
                else if (button == AGS.API.MouseButton.Right) RightMouseButtonDown = true;
                await MouseDown.InvokeAsync(sender, new AGS.API.MouseButtonEventArgs(button, convertX(e.X), convertY(e.Y)));
            };
            game.MouseUp += async (sender, e) =>
            {
                if (isInputBlocked()) return;
                var button = convert(e.Button);
                if (button == AGS.API.MouseButton.Left) LeftMouseButtonDown = false;
                else if (button == AGS.API.MouseButton.Right) RightMouseButtonDown = false;
                await MouseUp.InvokeAsync(sender, new AGS.API.MouseButtonEventArgs(button, convertX(e.X), convertY(e.Y)));
            };
            game.MouseMove += async (sender, e) =>
            {
                if (isInputBlocked()) return;
                await MouseMove.InvokeAsync(sender, new MousePositionEventArgs(convertX(e.X), convertY(e.Y)));
            };
            game.KeyDown += async (sender, e) =>
            {
                Key key = convert(e.Key);
                _keysDown.Add(key);
                if (isInputBlocked()) return;
                await KeyDown.InvokeAsync(sender, new KeyboardEventArgs(key));
            };
            game.KeyUp += async (sender, e) =>
            {
                Key key = convert(e.Key);
                _keysDown.Remove(key);
                if (isInputBlocked()) return;
                await KeyUp.InvokeAsync(sender, new KeyboardEventArgs(key));
            };
        }
Exemplo n.º 3
0
        public AGSGameWindow(IGameSettings settings, IGameWindowSize windowSize)
        {
            _windowSize = windowSize;
            _gameWindow = new GameWindow(settings.WindowSize.Width, settings.WindowSize.Height,
                                         GraphicsMode.Default, settings.Title);
            OnInit?.Invoke();

            _updateFrameArgs         = new FrameEventArgs();
            _renderFrameArgs         = new FrameEventArgs();
            _gameWindow.UpdateFrame += onUpdateFrame;
            _gameWindow.RenderFrame += onRenderFrame;
        }
Exemplo n.º 4
0
        public AndroidInput(AndroidSimpleGestures gestures, AGS.API.Size virtualResolution,
                            IGameState state, IShouldBlockInput shouldBlockInput, IGameWindowSize windowSize)
        {
            _shouldBlockInput   = shouldBlockInput;
            _windowSize         = windowSize;
            _state              = state;
            this._virtualWidth  = virtualResolution.Width;
            this._virtualHeight = virtualResolution.Height;
            MouseDown           = new AGSEvent <AGS.API.MouseButtonEventArgs>();
            MouseUp             = new AGSEvent <AGS.API.MouseButtonEventArgs>();
            MouseMove           = new AGSEvent <MousePositionEventArgs>();
            KeyDown             = new AGSEvent <KeyboardEventArgs>();
            KeyUp = new AGSEvent <KeyboardEventArgs>();

            gestures.OnUserDrag += async(sender, e) =>
            {
                if (isInputBlocked())
                {
                    return;
                }
                DateTime now = DateTime.Now;
                _lastDrag   = now;
                IsTouchDrag = true;
                setMousePosition(e);
                await MouseMove.InvokeAsync(sender, new MousePositionEventArgs(MouseX, MouseY));

                await Task.Delay(300);

                if (_lastDrag <= now)
                {
                    IsTouchDrag = false;
                }
            };
            gestures.OnUserSingleTap += async(sender, e) =>
            {
                if (isInputBlocked())
                {
                    return;
                }
                setMousePosition(e);
                LeftMouseButtonDown = true;
                await MouseDown.InvokeAsync(sender, new MouseButtonEventArgs(MouseButton.Left, MouseX, MouseY));

                await Task.Delay(250);

                await MouseUp.InvokeAsync(sender, new MouseButtonEventArgs(MouseButton.Left, MouseX, MouseY));

                LeftMouseButtonDown = false;
            };
            AndroidGameWindow.Instance.OnNewView += onViewChanged;
            onViewChanged(null, AndroidGameWindow.Instance.View);
        }
Exemplo n.º 5
0
        public AGSGameWindow(IGameSettings settings, IGameWindowSize windowSize, Resolver resolver)
        {
            _windowSize = windowSize;
            _gameWindow = new GameWindow(settings.WindowSize.Width, settings.WindowSize.Height, 
                                         GraphicsMode.Default, settings.Title);
            
            var updater = new ContainerBuilder();
            updater.RegisterType<AGSInput>().SingleInstance().As<IInput>();
            updater.RegisterInstance(_gameWindow);
            updater.Update(resolver.Container);

            _updateFrameArgs = new FrameEventArgs();
            _renderFrameArgs = new FrameEventArgs();
            _gameWindow.UpdateFrame += onUpdateFrame;
            _gameWindow.RenderFrame += onRenderFrame;
        }
Exemplo n.º 6
0
        public AGSGameWindow(IGameSettings settings, IGameWindowSize windowSize, Resolver resolver)
        {
            _windowSize = windowSize;
            _gameWindow = new GameWindow(settings.WindowSize.Width, settings.WindowSize.Height,
                                         GraphicsMode.Default, settings.Title);

            var updater = new ContainerBuilder();

            updater.RegisterType <AGSInput>().SingleInstance().As <IInput>();
            updater.RegisterInstance(_gameWindow);
            updater.Update(resolver.Container);

            _updateFrameArgs         = new FrameEventArgs();
            _renderFrameArgs         = new FrameEventArgs();
            _gameWindow.UpdateFrame += onUpdateFrame;
            _gameWindow.RenderFrame += onRenderFrame;
        }
Exemplo n.º 7
0
        private int _inUpdate; //For preventing re-entrancy

        public AGSInput(IGameState state, IGameEvents events,
                        IShouldBlockInput shouldBlockInput, IGameWindowSize windowSize)
        {
            _events                           = events;
            _actions                          = new ConcurrentQueue <Func <Task> >();
            _windowSize                       = windowSize;
            this._shouldBlockInput            = shouldBlockInput;
            API.MousePosition.GetWindowWidth  = () => _windowSize.GetWidth(_game);
            API.MousePosition.GetWindowHeight = () => _windowSize.GetHeight(_game);
            this._state                       = state;
            this._keysDown                    = new AGSConcurrentHashSet <API.Key>();

            MouseDown = new AGSEvent <AGS.API.MouseButtonEventArgs>();
            MouseUp   = new AGSEvent <AGS.API.MouseButtonEventArgs>();
            MouseMove = new AGSEvent <MousePositionEventArgs>();
            KeyDown   = new AGSEvent <KeyboardEventArgs>();
            KeyUp     = new AGSEvent <KeyboardEventArgs>();

            if (AGSGameWindow.GameWindow != null)
            {
                Init(AGSGameWindow.GameWindow);
            }
        }
Exemplo n.º 8
0
        public AGSInput(GameWindow game, AGS.API.Size virtualResolution, IGameState state,
                        IShouldBlockInput shouldBlockInput, IGameWindowSize windowSize)
        {
            _windowSize            = windowSize;
            this._shouldBlockInput = shouldBlockInput;
            this._virtualWidth     = virtualResolution.Width;
            this._virtualHeight    = virtualResolution.Height;
            this._state            = state;
            this._keysDown         = new AGSConcurrentHashSet <Key>();

            this._game             = game;
            this._originalOSCursor = _game.Cursor;

            MouseDown = new AGSEvent <AGS.API.MouseButtonEventArgs>();
            MouseUp   = new AGSEvent <AGS.API.MouseButtonEventArgs>();
            MouseMove = new AGSEvent <MousePositionEventArgs>();
            KeyDown   = new AGSEvent <KeyboardEventArgs>();
            KeyUp     = new AGSEvent <KeyboardEventArgs>();

            game.MouseDown += async(sender, e) =>
            {
                if (isInputBlocked())
                {
                    return;
                }
                var button = convert(e.Button);
                if (button == AGS.API.MouseButton.Left)
                {
                    LeftMouseButtonDown = true;
                }
                else if (button == AGS.API.MouseButton.Right)
                {
                    RightMouseButtonDown = true;
                }
                await MouseDown.InvokeAsync(sender, new AGS.API.MouseButtonEventArgs(button, convertX(e.X), convertY(e.Y)));
            };
            game.MouseUp += async(sender, e) =>
            {
                if (isInputBlocked())
                {
                    return;
                }
                var button = convert(e.Button);
                if (button == AGS.API.MouseButton.Left)
                {
                    LeftMouseButtonDown = false;
                }
                else if (button == AGS.API.MouseButton.Right)
                {
                    RightMouseButtonDown = false;
                }
                await MouseUp.InvokeAsync(sender, new AGS.API.MouseButtonEventArgs(button, convertX(e.X), convertY(e.Y)));
            };
            game.MouseMove += async(sender, e) =>
            {
                if (isInputBlocked())
                {
                    return;
                }
                await MouseMove.InvokeAsync(sender, new MousePositionEventArgs(convertX(e.X), convertY(e.Y)));
            };
            game.KeyDown += async(sender, e) =>
            {
                Key key = convert(e.Key);
                _keysDown.Add(key);
                if (isInputBlocked())
                {
                    return;
                }
                await KeyDown.InvokeAsync(sender, new KeyboardEventArgs(key));
            };
            game.KeyUp += async(sender, e) =>
            {
                Key key = convert(e.Key);
                _keysDown.Remove(key);
                if (isInputBlocked())
                {
                    return;
                }
                await KeyUp.InvokeAsync(sender, new KeyboardEventArgs(key));
            };
        }