2020 February 29 Breaking Changes Update (#8064)
[jackhill/qmk/firmware.git] / keyboards / planck / keymaps / dodger / keymap.c
1 /* Copyright 2015-2017 Jack Humbert
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #include QMK_KEYBOARD_H
18
19 extern keymap_config_t keymap_config;
20 bool isGame = false;
21 bool isMusic = false;
22
23
24 enum planck_layers {
25 _COLEMAK,
26 _GAME,
27 _MUSIC,
28 _LOWER,
29 _RAISE,
30 _ADJUST,
31 };
32
33 enum planck_keycodes {
34 COLEMAK = SAFE_RANGE,
35 GCTOGG,
36 MCTOGG,
37 LOWER,
38 RAISE,
39 LENNY,
40 COMMENTHEAD,
41 RICKANDMORT,
42 MARIO,
43 MARIOE,
44 OVERWATCH,
45 DOOM,
46 DISNEY,
47 NUMBERONE,
48 CABBAGE,
49 OLDSPICE,
50 };
51
52 enum {
53 TD_SPC_ENT = 0,
54 TD_ESC_CAPS
55 };
56
57 qk_tap_dance_action_t tap_dance_actions[] = {
58 [TD_SPC_ENT] = ACTION_TAP_DANCE_DOUBLE(KC_SPC, KC_ENT),
59 [TD_ESC_CAPS] = ACTION_TAP_DANCE_DOUBLE(KC_ESC, KC_CAPS)
60 };
61
62 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
63
64 /* Colemak
65 * ,-----------------------------------------------------------------------------------.
66 * | Tab | Q | W | F | P | G | J | L | U | Y | ; | = |
67 * |------+------+------+------+------+-------------+------+------+------+------+------|
68 * | Esc | A | R | S | T | D | H | N | E | I | O | " |
69 * |------+------+------+------+------+------|------+------+------+------+------+------|
70 * | Shift| Z | X | C | V | B | K | M | , | . | / | - |
71 * |------+------+------+------+------+------+------+------+------+------+------+------|
72 * | Ctrl | GUI | Alt |lenny |Lower | shift|space |Raise | macro|macro2|macro3|QWERTY|
73 * `-----------------------------------------------------------------------------------'
74 */
75 [_COLEMAK] = LAYOUT_planck_grid(
76 KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_EQL,
77 KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
78 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
79 KC_LCTL, KC_LGUI, KC_LALT, LENNY, LOWER, RSFT_T(KC_BSPC), TD(TD_SPC_ENT), RAISE, COMMENTHEAD, RICKANDMORT, KC_LEFT, KC_RGHT
80 ),
81
82 /* Lower
83 * ,-----------------------------------------------------------------------------------.
84 * | | | | [ | ] | | ( | ) | { | } | | + |
85 * |------+------+------+------+------+-------------+------+------+------+------+------|
86 * | Del | F1 | F2 | F3 | F4 | F5 | F6 | left | down | up | right| | |
87 * |------+------+------+------+------+------|------+------+------+------+------+------|
88 * | | F7 | F8 | F9 | F10 | F11 | F12 | | | | | _ |
89 * |------+------+------+------+------+------+------+------+------+------+------+------|
90 * | | | | | | | | Next | Vol- | Vol+ | Play |
91 * `-----------------------------------------------------------------------------------'
92 */
93 [_LOWER] = LAYOUT_planck_grid(
94 _______, _______, _______, KC_LBRC, KC_RBRC, _______, KC_LPRN, KC_RPRN, KC_LCBR, KC_RCBR, _______, S(KC_EQL),
95 KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_PIPE,
96 _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, KC_UNDS,
97 _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
98 ),
99
100 /* Raise
101 * ,-----------------------------------------------------------------------------------.
102 * | ` | ! | @ | # | $ | % | ^ | & | * | ( | ) | DEL |
103 * |------+------+------+------+------+-------------+------+------+------+------+------|
104 * | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | \ |
105 * |------+------+------+------+------+------|------+------+------+------+------+------|
106 * | | | | | | | | | | | | |
107 * |------+------+------+------+------+------+------+------+------+------+------+------|
108 * | | | | | | | | | bl- | bl+ | GCTG |
109 * `-----------------------------------------------------------------------------------'
110 */
111 [_RAISE] = LAYOUT_planck_grid(
112 KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL,
113 KC_TILD, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSLS,
114 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
115 _______, _______, _______, _______, _______, _______, _______, _______, _______, BL_DEC, MCTOGG, GCTOGG
116 ),
117
118 /* Adjust (Lower + Raise)
119 * ,-----------------------------------------------------------------------------------.
120 * | | Reset| | | | | | | | | | Del |
121 * |------+------+------+------+------+-------------+------+------+------+------+------|
122 * | | | |Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
123 * |------+------+------+------+------+------|------+------+------+------+------+------|
124 * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof| | | | | |
125 * |------+------+------+------+------+------+------+------+------+------+------+------|
126 * | | | | | | | | | | | |
127 * `-----------------------------------------------------------------------------------'
128 */
129 [_ADJUST] = LAYOUT_planck_grid(
130 _______, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
131 _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, _______, COLEMAK, _______, _______, _______,
132 _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, _______, _______, TERM_ON, TERM_OFF, _______, _______, _______,
133 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
134 ),
135
136 [_GAME] = LAYOUT_planck_grid(
137 KC_TAB, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_EQL,
138 KC_ESC, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
139 KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_MINS,
140 KC_LCTL, RAISE, KC_LALT, LOWER, KC_SPC, RSFT_T(KC_BSPC), TD(TD_SPC_ENT), RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
141 ),
142
143 [_MUSIC] = LAYOUT_planck_grid(
144 MARIO, MARIOE, OVERWATCH, DOOM, DISNEY, NUMBERONE, CABBAGE, OLDSPICE, _______, _______, _______, _______,
145 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
146 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
147 _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
148 )
149
150 };
151
152 #ifdef AUDIO_ENABLE
153 float guitar[][2] = SONG(GUITAR_SOUND);
154 float mario[][2] = SONG(MARIO_THEME);
155 float marioe[][2] = SONG(MARIO_GAMEOVER);
156 float overwatch[][2] = SONG(OVERWATCH_THEME);
157 float doom[][2] = SONG(E1M1_DOOM);
158 float disney[][2] = SONG(DISNEY_SONG);
159 float numberone[][2] = SONG(NUMBER_ONE);
160 float cabbage[][2] = SONG(CABBAGE_SONG);
161 float oldspice[][2] = SONG(OLD_SPICE);
162 #endif
163
164 void setLayer(int layer) {
165 if (layer == _COLEMAK) {
166 #ifdef AUDIO_ENABLE
167 stop_all_notes();
168 PLAY_SONG(marioe);
169 #endif
170 set_single_persistent_default_layer(_COLEMAK);
171 #ifdef BACKLIGHT_ENABLE
172 backlight_set(0);
173 #endif
174 } else if (layer == _GAME) {
175 #ifdef AUDIO_ENABLE
176 stop_all_notes();
177 PLAY_SONG(mario);
178 #endif
179 set_single_persistent_default_layer(_GAME);
180 #ifdef BACKLIGHT_ENABLE
181 backlight_set(15);
182 #endif
183 } else if (layer == _MUSIC) {
184 #ifdef AUDIO_ENABLE
185 stop_all_notes();
186 PLAY_SONG(guitar);
187 #endif
188 set_single_persistent_default_layer(_MUSIC);
189 #ifdef BACKLIGHT_ENABLE
190 backlight_set(1);
191 #endif
192 }
193 }
194
195 bool process_record_user(uint16_t keycode, keyrecord_t *record) {
196 switch (keycode) {
197 case COLEMAK:
198 if (record->event.pressed) {
199 set_single_persistent_default_layer(_COLEMAK);
200 #ifdef BACKLIGHT_ENABLE
201 backlight_set(0);
202 #endif
203 }
204 return false;
205 break;
206 case GCTOGG:
207 if (record->event.pressed) {
208 if (isGame) {
209 if (isMusic)
210 setLayer(_MUSIC);
211 else
212 setLayer(_COLEMAK);
213 isGame = false;
214 } else {
215 setLayer(_GAME);
216 isGame = true;
217 }
218 }
219 return false;
220 break;
221 case MCTOGG:
222 if (record->event.pressed) {
223 if (isMusic) {
224 if (isGame)
225 setLayer(_GAME);
226 else
227 setLayer(_COLEMAK);
228 isMusic = false;
229 } else {
230 setLayer(_MUSIC);
231 isMusic = true;
232 }
233 }
234 return false;
235 break;
236 case LOWER:
237 if (record->event.pressed) {
238 layer_on(_LOWER);
239 update_tri_layer(_LOWER, _RAISE, _ADJUST);
240 } else {
241 layer_off(_LOWER);
242 update_tri_layer(_LOWER, _RAISE, _ADJUST);
243 }
244 return false;
245 break;
246 case RAISE:
247 if (record->event.pressed) {
248 layer_on(_RAISE);
249 update_tri_layer(_LOWER, _RAISE, _ADJUST);
250 } else {
251 layer_off(_RAISE);
252 update_tri_layer(_LOWER, _RAISE, _ADJUST);
253 }
254 return false;
255 break;
256 case LENNY:
257 if (record->event.pressed) {
258 SEND_STRING("()");
259 }
260 return false; break;
261 case COMMENTHEAD:
262 if (record->event.pressed) {
263 SEND_STRING("// ---------------------------------------------------------------");
264 }
265 return false; break;
266 case RICKANDMORT:
267 if (record->event.pressed) {
268 SEND_STRING("// ***************************************************************");
269 }
270 return false; break;
271 case MARIO:
272 if(record->event.pressed) {
273 #ifdef AUDIO_ENABLE
274 PLAY_SONG(mario);
275 #endif
276 }
277 return false; break;
278 case MARIOE:
279 if(record->event.pressed) {
280 #ifdef AUDIO_ENABLE
281 PLAY_SONG(marioe);
282 #endif
283 }
284 return false; break;
285 case OVERWATCH:
286 if(record->event.pressed) {
287 #ifdef AUDIO_ENABLE
288 PLAY_SONG(overwatch);
289 #endif
290 }
291 return false; break;
292 case DOOM:
293 if(record->event.pressed) {
294 #ifdef AUDIO_ENABLE
295 PLAY_SONG(doom);
296 #endif
297 }
298 return false; break;
299 case DISNEY:
300 if(record->event.pressed) {
301 #ifdef AUDIO_ENABLE
302 PLAY_SONG(disney);
303 #endif
304 }
305 return false; break;
306 case NUMBERONE:
307 if(record->event.pressed) {
308 #ifdef AUDIO_ENABLE
309 PLAY_SONG(numberone);
310 #endif
311 }
312 return false; break;
313 case CABBAGE:
314 if(record->event.pressed) {
315 #ifdef AUDIO_ENABLE
316 PLAY_SONG(cabbage);
317 #endif
318 }
319 return false; break;
320 case OLDSPICE:
321 if(record->event.pressed) {
322 #ifdef AUDIO_ENABLE
323 PLAY_SONG(oldspice);
324 #endif
325 }
326 return false; break;
327 }
328 return true;
329 }
330
331 void matrix_init_user(void) {
332 set_single_persistent_default_layer(_COLEMAK);
333 isGame = false;
334 #ifdef BACKLIGHT_ENABLE
335 backlight_level(0);
336 #endif
337 }