Exemplo n.º 1
0
        public void Initialize(
            IMessageReceiver receiver, IMessageSender sender,
            RawInputChecker rawInputChecker,
            XInputGamePad gamepadListener,
            MidiInputObserver midiObserver
            )
        {
            _keyboard     = new KeyboardToWordToMotion(rawInputChecker);
            _midi         = new MidiToWordToMotion(receiver, sender, midiObserver);
            _gamepad      = new GamepadToWordToMotion(gamepadListener);
            _wordAnalyzer = new WordAnalyzer();

            _keyboard.RequestExecuteWordToMotionItem += v =>
            {
                if (UseKeyboardInput && _coolDownCount <= 0)
                {
                    _coolDownCount = cooldownTime;
                    RequestExecuteWordToMotionItem?.Invoke(v);
                }
            };

            _midi.RequestExecuteWordToMotionItem += v =>
            {
                if (UseMidiInput && _coolDownCount <= 0)
                {
                    _coolDownCount = cooldownTime;
                    RequestExecuteWordToMotionItem?.Invoke(v);
                }
            };

            _gamepad.RequestExecuteWordToMotionItem += v =>
            {
                if (UseGamepadInput && _coolDownCount <= 0)
                {
                    _coolDownCount = cooldownTime;
                    RequestExecuteWordToMotionItem?.Invoke(v);
                }
            };

            _wordAnalyzer.WordDetected += word =>
            {
                if (UseKeyboardWordTypingForWordToMotion)
                {
                    _coolDownCount = cooldownTime;
                    RequestExecuteWord?.Invoke(word);
                }
            };

            rawInputChecker.PressedRawKeys.Subscribe(keyName =>
            {
                if (UseKeyboardWordTypingForWordToMotion)
                {
                    _count = forgetTime;
                    _wordAnalyzer.Add(KeyName2Char(keyName));
                }
            });
        }
Exemplo n.º 2
0
        public MidiToWordToMotion(IMessageReceiver receiver, IMessageSender sender, MidiInputObserver midiObserver)
        {
            receiver.AssignCommandHandler(
                VmmCommands.LoadMidiNoteToMotionMap,
                c => LoadMidiNoteToMotionMap(c.Content)
                );
            receiver.AssignCommandHandler(
                VmmCommands.RequireMidiNoteOnMessage,
                c => _redirectNoteOnMessageToIpc = c.ToBoolean()
                );

            _midiObserver = midiObserver.NoteOn.Subscribe(noteNumber =>
            {
                if (_redirectNoteOnMessageToIpc)
                {
                    sender.SendCommand(MessageFactory.Instance.MidiNoteOn(noteNumber));
                }

                if (_noteNumberToMotionMap.ContainsKey(noteNumber))
                {
                    RequestExecuteWordToMotionItem?.Invoke(_noteNumberToMotionMap[noteNumber]);
                }
            });
        }