diff --git a/keyboards/kbdfans/kbdpad_mk2/keymaps/iracing_replay/keymap.c b/keyboards/kbdfans/kbdpad_mk2/keymaps/iracing_replay/keymap.c new file mode 100644 index 00000000000..39ebb77ff84 --- /dev/null +++ b/keyboards/kbdfans/kbdpad_mk2/keymaps/iracing_replay/keymap.c @@ -0,0 +1,156 @@ +/* Copyright 2021 Aaron VerDow + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include QMK_KEYBOARD_H + +// Layer declarations +enum { + DEF_LAYER, + MOD_LAYER, +}; + +// Tap Dance declarations +enum { + TD_CAR, + TD_PRINT, + TD_CAM_UP, + TD_CAM_DN +}; + +void camera_number(uint16_t tens, uint16_t ones) { +/* Switch to a specific camera number + * + * I haven't been able to find official docs for this. + * + * To determine the number click the dropdown in UI and + * count from the top. The list can change with updates. + * + * Shift must be held between both * presses or the combo + * won't be recognized. + */ + + register_code16(KC_LSFT); + tap_code(KC_8); + tap_code(KC_8); + unregister_code16(KC_LSFT); + tap_code(tens); + tap_code(ones); + tap_code(KC_ENT); +} + +void cam_up(qk_tap_dance_state_t *state, void *user_data) { + switch (state->count) { + case 1: + tap_code(KC_C); // tap once for next cam + break; + case 2: + camera_number(KC_2,KC_0); // tap twice for reverse chase cam + break; + } +} + +void cam_down(qk_tap_dance_state_t *state, void *user_data) { + switch (state->count) { + case 1: + tap_code16(LSFT(KC_C)); // tap once for prev cam + break; + case 2: + camera_number(KC_1,KC_8); // tap twice for chase cam + break; + } +} + +// Tap Dance definitions +qk_tap_dance_action_t tap_dance_actions[] = { + [TD_CAR] = ACTION_TAP_DANCE_DOUBLE( + LSFT(KC_V), // tap once for prev car + LCTL(KC_V) // tap twice for my car + ), + [TD_PRINT] = ACTION_TAP_DANCE_DOUBLE( + LCTL(LALT(LSFT(KC_S))), // tap once for iRacing screenshot (must be enabled in options) + LGUI(KC_PSCR) // tap twice for Windows print screen and save to file + ), + [TD_CAM_UP] = ACTION_TAP_DANCE_FN(cam_up), + [TD_CAM_DN] = ACTION_TAP_DANCE_FN(cam_down) +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [DEF_LAYER] = LAYOUT_ortho_6x4( /* Base */ + + TD(TD_CAM_UP), // next cam, double tap for reverse chase cam + KC_V, // next car + LSFT(KC_P3), // next lap + LCTL(KC_P3), // next inc + + TD(TD_CAM_DN), // prev cam, double tap for chase cam + TD(TD_CAR), // prev car, double tap for my car + LSFT(KC_P1), // prev lap + LCTL(KC_P1), // prev inc + + LSFT(KC_P4), // rewind + KC_P5, // play/pause + LSFT(KC_P6), // fast forward + KC_P8, // slow mo + + KC_P4, // prev frame + KC_W, // up + KC_P6, // next frame + TD(TD_PRINT), // print screen + + KC_A, // left + KC_S, // down + KC_D, // right + LALT(KC_K), // toggle click and drag ui elements (in car) + + KC_LCTL, // ctrl + KC_LALT, // alt + LCTL(KC_F12), // camera tool + LT(MOD_LAYER, KC_SPACE) // press once for UI, hold for MOD layer + ), + + [MOD_LAYER] = LAYOUT_ortho_6x4( /* Base */ + + KC_B, // next sub cam + KC_PGUP, // next driver cam + LCTL(KC_P6), // next session + KC_P7, // start + + LSFT(KC_B), // prev sub cam + KC_PGDOWN, // prev driver cam + LCTL(KC_P4), // prev session + KC_P1, // end + + KC_RBRC, // FOV up + KC_EQL, // step factor up + _______, + _______, + + KC_LBRC, // FOV down + KC_MINS, // step factor down + _______, + _______, + + _______, + _______, + _______, + _______, + + _______, + LALT(KC_M), // cycle aim + RALT(KC_ENTER), // fullscreen (unreliable) + _______ + ), +}; diff --git a/keyboards/kbdfans/kbdpad_mk2/keymaps/iracing_replay/readme.md b/keyboards/kbdfans/kbdpad_mk2/keymaps/iracing_replay/readme.md new file mode 100644 index 00000000000..a574499c6b3 --- /dev/null +++ b/keyboards/kbdfans/kbdpad_mk2/keymaps/iracing_replay/readme.md @@ -0,0 +1,17 @@ +# iRacing Replay Tool + +![](https://imgur.com/0948eBGh.jpg) + +Replay/camera tool for iRacing. This uses the default keybindings for the game so nothing should need to be mapped. This makes replays much easier to view in VR and makes waiting through heats a lot more enjoyable. + +To make full use of the arrow keys open the camera tool (you can close the UI after) and optionally switch the AIM to static. + +The code to generate stl files for the keycap set are ![available here.](https://github.com/AaronVerDow/KeyV2/blob/numpad/src/layouts/numpad/iracing.scad) + +Other notes: +* Hold MOD (UI key) to access features on the front of +* Double tap car down is a shortcut for your car +* Double tap cam down is a shortcut for chase cam +* Double tap cam up is a shortcut for reverse chase cam +* The record button takes a screenshot using iRacing. Double tap record button to auto save a screenshot using Windows. +* The key above UI is unassigned diff --git a/keyboards/kbdfans/kbdpad_mk2/keymaps/iracing_replay/rules.mk b/keyboards/kbdfans/kbdpad_mk2/keymaps/iracing_replay/rules.mk new file mode 100644 index 00000000000..e5ddcae8d92 --- /dev/null +++ b/keyboards/kbdfans/kbdpad_mk2/keymaps/iracing_replay/rules.mk @@ -0,0 +1 @@ +TAP_DANCE_ENABLE = yes