Ejemplo n.º 1
0
        public unsafe GlfwInputContext(IView window)
        {
            void OnConnectionChanged(IInputDevice a, bool b) => ConnectionChanged?.Invoke(a, b);

            if (!(window is GlfwWindow))
            {
                throw new ArgumentNullException
                          (nameof(window), "Attempted to create input context for null or non-GLFW window.");
            }

            Handle = window.Handle;
            for (var i = 0; i < _gamepads.Length; i++)
            {
                _gamepads[i] = new GlfwGamepad(i)
                {
                    OnConnectionChanged = OnConnectionChanged
                };
            }

            for (var i = 0; i < _joysticks.Length; i++)
            {
                _joysticks[i] = new GlfwJoystick(i)
                {
                    OnConnectionChanged = OnConnectionChanged
                };
            }

            _subscribers[0] = _keyboards[0] = new GlfwKeyboard();
            _subscribers[1] = _mice[0] = new GlfwMouse();

            Gamepads  = new IsConnectedWrapper <GlfwGamepad>(_gamepads);
            Joysticks = new IsConnectedWrapper <GlfwJoystick>(_joysticks);
            Keyboards = _keyboards;
            Mice      = _mice;

            GlfwInputPlatform.RegisterWindow((WindowHandle *)Handle, _subscribers);
            window.Update += _update = _ =>
            {
                foreach (var updatable in _mice)
                {
                    updatable.Update();
                }

                foreach (var updatable in _gamepads)
                {
                    updatable.Update();
                }

                foreach (var updatable in _joysticks)
                {
                    updatable.Update();
                }
            };

            _window = window;
        }
Ejemplo n.º 2
0
 public SdlInputContext(SdlView view) : base(view)
 {
     _sdlView     = view;
     SdlGamepads  = new Dictionary <int, SdlGamepad>();
     SdlJoysticks = new Dictionary <int, SdlJoystick>();
     Gamepads     = new IsConnectedWrapper <IGamepad>
                    (
         new CastReadOnlyList <SdlGamepad, IGamepad>
             (new ReadOnlyCollectionListAdapter <SdlGamepad>(SdlGamepads.Values))
                    );
     Joysticks = new IsConnectedWrapper <IJoystick>
                 (
         new CastReadOnlyList <SdlJoystick, IJoystick>
             (new ReadOnlyCollectionListAdapter <SdlJoystick>(SdlJoysticks.Values))
                 );
     Keyboards = new IKeyboard[] { new SdlKeyboard(this) };
     Mice      = new IMouse[] { new SdlMouse(this) };
 }