예제 #1
0
        private void HandleButtonPressed(HOTASButton button, int offset)
        {
            if (button == null)
            {
                return;
            }

            if (button.IsOneShot)
            {
                HandleOneShot(button, offset);
                return;
            }

            if (button.IsMacro)
            {
                HandleMacro(button, offset);
                return;
            }

            if (button.ShiftModePage > 0)
            {
                HandleShiftMode(button.ShiftModePage, button.IsShift);
                if (button.ActionCatalogItem.Actions.Count == 0)
                {
                    return;
                }
            }

            _actionJobs.Add(new ActionJobItem()
            {
                Offset = offset, MapId = button.MapId, Actions = button.ActionCatalogItem.Actions
            });
        }
예제 #2
0
        private void HandleMacro(HOTASButton button, int offset)
        {
            if (_activeMacros.TryGetValue(offset, out _))
            {
                //cancel a macro already in progress
                _activeMacros.TryRemove(offset, out _);
                MacroCancelled?.Invoke(this, new MacroCancelledEventArgs(offset, (int)Win32Structures.ScanCodeShort.MACRO_CANCELLED));
                return;
            }

            _activeMacros.TryAdd(offset, true);
            Task.Run(() => PlayMacroOnce(offset, button.ActionCatalogItem.Actions));
        }
예제 #3
0
        private void HandleButtonReleased(HOTASButton button, int offset)
        {
            if (button == null)
            {
                return;
            }

            var mapId = button.MapId;

            if (button.IsShift)
            {
                ShiftReleased?.Invoke(this, new EventArgs());
            }

            _actionJobs.Add(new ActionJobItem()
            {
                Offset = offset, MapId = mapId, Actions = null
            });
        }
예제 #4
0
        private static HOTASButton BuildButtonMap(HOTASButton map)
        {
            var newMap = new HOTASButton
            {
                MapId             = map.MapId,
                MapName           = map.MapName,
                ShiftModePage     = 0,
                ActionName        = map.ActionName,
                Type              = map.Type,
                ActionCatalogItem = new ActionCatalogItem()
                {
                    ActionName = map.ActionCatalogItem.ActionName,
                    NoAction   = map.ActionCatalogItem.NoAction,
                    Actions    = map.ActionCatalogItem.Actions.ToObservableCollection()
                }
            };

            return(newMap);
        }
예제 #5
0
        private static void ApplyShiftModePage(int mode, int activationButtonId, bool isShift, HOTASButton button)
        {
            if (button.MapId != activationButtonId)
            {
                return;
            }

            button.ShiftModePage = mode;
            button.IsShift       = isShift;
        }
예제 #6
0
 private void HandleOneShot(HOTASButton button, int offset)
 {
     Task.Run(() => PlayOneShot(offset, button.ActionCatalogItem.Actions));
 }