WAV_FILE = "./examples/assets/piano.wav"
SOUND_GUN_FILE = "./examples/assets/gun.wav"
SOUND_FIREWORKS_FILE = "./examples/assets/fireworks.wav"
class Button(object):
def __init__(self, x1, y1, x2, y2, color, text, highlight=False):
self.x1 = x1
self.y1 = y1
self.x2 = x2
self.y2 = y2
self.color = color
self.text = text
self.clicked = True if highlight else False
def update(self, x, y):
self.clicked = (self.x1 <= x <= self.x2 and
self.y1 <= y <= self.y2)
def draw(self):
rectfill(self.x1, self.y1, self.x2, self.y2, self.color)
i = 3 if self.clicked else 1
px8_print(self.text, self.x1 + 1, self.y1, i)
def is_click(self):
return self.clicked
class InteractiveNumber(object):
def __init__(self, x, y, color):
self.x = x
self.y = y
self.color = color
self.value = 128
self.text = 'Unknown'
base_x_rect = self.x - 4
base_y_rect = self.y - 4
self.rect_minus = [base_x_rect, self.y, base_x_rect+2, self.y+2]
self.rect_plus = [base_x_rect, base_y_rect, base_x_rect+2, base_y_rect+2]
def update(self, x, y):
rect_min_clicked = (self.rect_minus[0] <= x <= self.rect_minus[2] and
self.rect_minus[1] <= y <= self.rect_minus[3])
if rect_min_clicked:
self.value -= 10
self.value = max(0, self.value)
rect_plus_clicked = (self.rect_plus[0] <= x <= self.rect_plus[2] and
self.rect_plus[1] <= y <= self.rect_plus[3])
if rect_plus_clicked:
self.value += 10
self.value = min(128, self.value)
if rect_min_clicked or rect_plus_clicked:
music_volume(self.value)
def draw(self):
rectfill(self.rect_minus[0], self.rect_minus[1], self.rect_minus[2], self.rect_minus[3], self.color)
rectfill(self.rect_plus[0], self.rect_plus[1], self.rect_plus[2], self.rect_plus[3], self.color)
MENU = {
'Volume': InteractiveNumber(18, 24, 7),
'Play': Button(20, 20, 40, 28, 7, 'Play'),
'Stop': Button(42, 20, 62, 28, 7, 'Stop'),
'Pause': Button(64, 20, 84, 28, 7, 'Pause'),
'Resume': Button(86, 20, 110, 28, 7, 'Resume'),
'Gun': Button(20, 30, 40, 38, 7, 'Gun'),
'Fireworks': Button(42, 30, 80, 38, 7, 'Fireworks'),
}
def _init():
show_mouse()
music_load(WAV_FILE)
sound_load(SOUND_GUN_FILE)
sound_load(SOUND_FIREWORKS_FILE)
def _update():
if mouse_state():
mousex, mousey = mouse_x(), mouse_y()
for item in MENU.values():
item.update(mousex, mousey)
if item.text =='Play' and item.is_click():
print("Play")
music_play(WAV_FILE)
elif item.text =='Stop' and item.is_click():
print("Stop")
music_stop()
elif item.text =='Pause' and item.is_click():
print("Pause")
music_pause()
elif item.text =='Resume' and item.is_click():
print("Resume")
music_resume()
elif item.text =='Gun' and item.is_click():
print("Play gun sound")
sound_play(SOUND_GUN_FILE)
if item.text =='Fireworks' and item.is_click():
print("Play fireworks sound")
sound_play(SOUND_FIREWORKS_FILE)
def _draw():
cls()
for item in MENU.values():
item.draw()
idx = 10
for i in range(0, 16):
is_playing = sound_isplaying(i)
color = 7
if is_playing:
color = 8
circfill(idx+i*5, 100, 1, color)