Skip to content

Commit d1f7491

Browse files
authored
Merge pull request #1671 from jedgarpark/minecraft-turbopad
Looks good
2 parents 1f2add9 + 1a153f6 commit d1f7491

File tree

1 file changed

+158
-0
lines changed

1 file changed

+158
-0
lines changed

Minecraft_Turbopad/code.py

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
# SPDX-FileCopyrightText: 2021 John Park for Adafruit Industries
2+
# SPDX-License-Identifier: MIT
3+
# Minecraft Turbopad for Adafruit Macropad RP2040
4+
import time
5+
import displayio
6+
import terminalio
7+
from adafruit_display_text import bitmap_label as label
8+
from adafruit_displayio_layout.layouts.grid_layout import GridLayout
9+
from adafruit_macropad import MacroPad
10+
11+
macropad = MacroPad()
12+
13+
# --- Variable setup for action types
14+
KEEB = 0
15+
MEDIA = 1
16+
MOUSE = 2
17+
KBMOUSE = 3
18+
COMMAND = 4
19+
20+
KEY_MOMENT = 0 # momentary press/release keys
21+
KEY_HOLD = 1 # toggle keys
22+
23+
# --- LED colors
24+
GREEN = 0x00ff00
25+
RED = 0xff0000
26+
MAGENTA = 0xff0033
27+
YELLOW = 0xffdd00
28+
AQUA = 0x00ffff
29+
LATCH_COLOR = YELLOW
30+
# --- Key mappings
31+
# (<key>): (<color>, <action type>, <key hold>, <keycodes>, <"text">, <enter>)
32+
keymap = {
33+
(0): (AQUA, COMMAND, KEY_MOMENT, [macropad.Keycode.FORWARD_SLASH],
34+
"gamemode creative", [macropad.Keycode.ENTER]),
35+
(1): (AQUA, COMMAND, KEY_MOMENT, [macropad.Keycode.FORWARD_SLASH],
36+
"gamemode survival", [macropad.Keycode.ENTER]),
37+
(2): (AQUA, COMMAND, KEY_MOMENT, [macropad.Keycode.FORWARD_SLASH],
38+
"say Dinner Time!", [macropad.Keycode.ENTER]),
39+
40+
(3): (AQUA, COMMAND, KEY_MOMENT, [macropad.Keycode.FORWARD_SLASH],
41+
"time set day", [macropad.Keycode.ENTER]),
42+
(4): (AQUA, COMMAND, KEY_MOMENT, [macropad.Keycode.FORWARD_SLASH],
43+
"time set night", [macropad.Keycode.ENTER]),
44+
(5): (AQUA, COMMAND, KEY_MOMENT, [macropad.Keycode.FORWARD_SLASH],
45+
"kill", [macropad.Keycode.ENTER]),
46+
47+
(6): (GREEN, COMMAND, KEY_MOMENT, [macropad.Keycode.FORWARD_SLASH],
48+
"weather clear", [macropad.Keycode.ENTER]),
49+
(7): (GREEN, COMMAND, KEY_MOMENT, [macropad.Keycode.FORWARD_SLASH],
50+
"weather rain", [macropad.Keycode.ENTER]),
51+
(8): (GREEN, COMMAND, KEY_MOMENT, [macropad.Keycode.FORWARD_SLASH],
52+
"weather thunder", [macropad.Keycode.ENTER]),
53+
54+
(9): (RED, COMMAND, KEY_MOMENT, [macropad.Keycode.FORWARD_SLASH],
55+
"summon minecraft:bee", [macropad.Keycode.ENTER]),
56+
(10): (RED, KBMOUSE, KEY_HOLD, [macropad.Keycode.W], [macropad.Mouse.LEFT_BUTTON]),
57+
(11): (RED, COMMAND, KEY_MOMENT, [macropad.Keycode.FORWARD_SLASH],
58+
"playsound minecraft:block.bell.use ambient @a ~ ~ ~", [macropad.Keycode.ENTER]),
59+
}
60+
61+
62+
latched = [False] * 12 # list of the latched states, all off to start
63+
64+
last_knob_pos = macropad.encoder # store knob position state
65+
66+
# --- Pixel setup --- #
67+
macropad.pixels.brightness = 0.1
68+
for i in range(12):
69+
macropad.pixels[i] = (keymap[i][0])
70+
71+
72+
main_group = displayio.Group()
73+
macropad.display.show(main_group)
74+
title = label.Label(
75+
y=4,
76+
font=terminalio.FONT,
77+
color=0x0,
78+
text=" -Minecraft Turbopad- ",
79+
background_color=0xFFFFFF,
80+
)
81+
layout = GridLayout(x=0, y=13, width=128, height=54, grid_size=(3, 4), cell_padding=5)
82+
label_text = [
83+
"CREATE", "SURVIV", "SAY",
84+
"DAY", "NIGHT", "KILL",
85+
"CLEAR", "RAIN", "THUNDR",
86+
"BEE", "MINE", "SOUND",
87+
]
88+
labels = []
89+
for j in range(12):
90+
labels.append(label.Label(terminalio.FONT, text=label_text[j], max_glyphs=10))
91+
92+
for index in range(12):
93+
x = index % 3
94+
y = index // 3
95+
layout.add_content(labels[index], grid_position=(x, y), cell_size=(1, 1))
96+
97+
main_group.append(title)
98+
main_group.append(layout)
99+
100+
while True:
101+
key_event = macropad.keys.events.get() # check for key press or release
102+
if key_event:
103+
if key_event.pressed:
104+
key = key_event.key_number
105+
labels[key].color = 0x0
106+
labels[key].background_color = 0xffffff
107+
108+
if keymap[key][1] == KEEB:
109+
if keymap[key][2] == KEY_HOLD:
110+
macropad.keyboard.press(*keymap[key][3]) # * expands the variable to list
111+
else:
112+
macropad.keyboard.send(*keymap[key][3])
113+
114+
elif keymap[key][1] == MOUSE:
115+
macropad.mouse.click(*keymap[key][3])
116+
117+
elif keymap[key][1] == KBMOUSE:
118+
if keymap[key][2] == KEY_HOLD:
119+
if latched[key] is False:
120+
macropad.keyboard.press(*keymap[key][3])
121+
time.sleep(0.01)
122+
macropad.mouse.press(*keymap[key][4])
123+
latched[key] = True
124+
else:
125+
macropad.keyboard.release(*keymap[key][3])
126+
time.sleep(0.01)
127+
macropad.mouse.release_all()
128+
latched[key] = False
129+
130+
elif keymap[key][1] == COMMAND:
131+
macropad.keyboard.send(*keymap[key][3])
132+
time.sleep(0.1)
133+
macropad.keyboard_layout.write(keymap[key][4])
134+
time.sleep(0.1)
135+
macropad.keyboard.send(*keymap[key][5])
136+
time.sleep(0.1)
137+
macropad.pixels[key] = LATCH_COLOR
138+
139+
if key_event.released:
140+
key = key_event.key_number
141+
if keymap[key][1] == KEEB:
142+
if keymap[key][2] == KEY_HOLD:
143+
macropad.keyboard.release(*keymap[key][3])
144+
145+
if latched[key] is False:
146+
macropad.pixels[key] = (keymap[key][0])
147+
labels[key].color = 0xffffff
148+
labels[key].background_color = 0x0
149+
150+
current_knob_position = macropad.encoder
151+
152+
if macropad.encoder > last_knob_pos:
153+
macropad.mouse.move(wheel=-1)
154+
last_knob_pos = current_knob_position
155+
156+
if macropad.encoder < last_knob_pos:
157+
macropad.mouse.move(wheel=+1)
158+
last_knob_pos = current_knob_position

0 commit comments

Comments
 (0)