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)); } }); }
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]); } }); }