Пример #1
0
        private void SendLayoutChange(string layout, InputControlLayoutChange change)
        {
            if (m_Subscribers == null)
            {
                return;
            }

            Message msg;

            switch (change)
            {
            case InputControlLayoutChange.Added:
            case InputControlLayoutChange.Replaced:
                var message = NewLayoutMsg.Create(this, layout);
                if (message == null)
                {
                    return;
                }
                msg = message.Value;
                break;

            case InputControlLayoutChange.Removed:
                msg = RemoveLayoutMsg.Create(this, layout);
                break;

            default:
                return;
            }

            Send(msg);
        }
        static void OnLayoutChange(string layout, InputControlLayoutChange change)
        {
            if (change == InputControlLayoutChange.Added)
            {
                if (!layout.StartsWith(k_LayoutOverridePrefix) && InputSystem.IsFirstLayoutBasedOnSecond(layout, k_BaseLayoutName))
                {
                    var layoutName = $"{k_LayoutOverridePrefix}{layout}";

                    // This format is presuming a correct layoutOverride string that uses the right format tags.
                    var layoutJson = string.Format(k_LayoutOverride, layoutName, layout);
                    InputSystem.RegisterLayoutOverride(layoutJson, layoutName);
                }
            }
        }
        public IEnumerator AddDevice()
        {
            var sender      = new Sender();
            var senderInput = new InputRemoting(sender);
            var senderSubscriberDisposer = senderInput.Subscribe(new Observer(_channel1));

            var receiver      = new Receiver(_channel2);
            var receiverInput = new InputRemoting(receiver);
            var receiverSubscriberDisposer = receiverInput.Subscribe(receiverInput);

            InputDevice       device = null;
            InputDeviceChange change = default;

            receiver.onDeviceChange += (_device, _change) => {
                device = _device;
                change = _change;
            };
            string layoutName = null;
            InputControlLayoutChange layoutChange = default;

            receiver.onLayoutChange += (_name, _change) => {
                layoutName   = _name;
                layoutChange = _change;
            };

            receiverInput.StartSending();
            senderInput.StartSending();

            yield return(new WaitUntil(() => device != null));

            yield return(new WaitUntil(() => layoutName != null));

            Assert.That(device, Is.Not.Null);
            Assert.That(change, Is.EqualTo(InputDeviceChange.Added));
            Assert.That(layoutName, Is.Not.Null);
            Assert.That(layoutChange, Is.EqualTo(InputControlLayoutChange.Added));

            Assert.That(receiver.remoteLayouts, Is.Not.Empty);
            Assert.That(receiver.remoteDevices, Is.Not.Empty);
            Assert.That(receiver.remoteDevices, Has.All.Matches <InputDevice>(d => d.remote));

            senderInput.StopSending();
            receiverInput.StopSending();

            senderSubscriberDisposer.Dispose();
            receiverSubscriberDisposer.Dispose();
            sender.Dispose();
            receiver.Dispose();
        }
Пример #4
0
        private void SendLayoutChange(string layout, InputControlLayoutChange change)
        {
            if (m_Subscribers == null)
            {
                return;
            }

            // Don't mirror remoted layouts to other remotes.
            if (layout.StartsWith(kRemoteLayoutNamespacePrefix))
            {
                return;
            }

            Message msg;

            switch (change)
            {
            case InputControlLayoutChange.Added:
            case InputControlLayoutChange.Replaced:
                var message = NewLayoutMsg.Create(this, layout);
                if (message == null)
                {
                    return;
                }
                msg = message.Value;
                break;

            case InputControlLayoutChange.Removed:
                msg = RemoveLayoutMsg.Create(this, layout);
                break;

            default:
                return;
            }

            Send(msg);
        }
Пример #5
0
 private void OnLayoutChange(string name, InputControlLayoutChange change)
 {
     // Update tree if layout setup has changed.
     Refresh();
 }
 private void OnLayoutChange(string name, InputControlLayoutChange change)
 {
     onLayoutChange?.Invoke(name, change);
 }