master
parent
41915d061b
commit
b67e05107a
111
main.py
111
main.py
|
@ -305,15 +305,15 @@ def render_text(text, position, screen, color=text_color, centered=False):
|
|||
else:
|
||||
screen.blit(text_render, position)
|
||||
|
||||
def render_settings_text(text, value, position, screen, color=text_color, centered=True):
|
||||
def render_settings_text(text, position, screen, value=None,color=text_color):
|
||||
font = pygame.font.SysFont(FONT, FONT_SIZE2-1)
|
||||
text_render = font.render(f"{text}: {value}", True, color)
|
||||
|
||||
if centered:
|
||||
text_rect = text_render.get_rect(center=position)
|
||||
screen.blit(text_render, text_rect.topleft)
|
||||
if value is not None:
|
||||
text_render = font.render(f"{text}: {value}", True, color)
|
||||
else:
|
||||
screen.blit(text_render, position)
|
||||
text_render = font.render(text, True, color)
|
||||
|
||||
text_rect = text_render.get_rect(center=position)
|
||||
screen.blit(text_render, text_rect.topleft)
|
||||
|
||||
# MENU MODE
|
||||
def browse():
|
||||
|
@ -873,17 +873,55 @@ def data_check(current_mode):
|
|||
return background_image, current_buttons
|
||||
|
||||
scroll_offset = 0
|
||||
space_between_settings = 5
|
||||
space_between_settings = 20
|
||||
settings_x_position = puzzle_size[0]
|
||||
settings_y_offset = 5
|
||||
total_settings_height = len(settings_data) * (cons[0] + space_between_settings)
|
||||
max_scroll_offset = max(0, total_settings_height - non_movable_area.height)
|
||||
|
||||
f_line = [135, 38, 80, 12]
|
||||
s_line = [135, 53, 80, 12]
|
||||
s_button = [218, 38, 10, 16]
|
||||
gap = (s_button[2]/2)-(s_line[3]/2)-1
|
||||
|
||||
def slider(position, value_range, value, slider_moving, setting):
|
||||
second_x = value / value_range * s_line[2]
|
||||
value_pos = second_x - s_button[2] / 2
|
||||
first_line = Image((f_line[0], f_line[1]), (position[0], position[1]), (f_line[2], f_line[3]))
|
||||
second_line = Image((s_line[0], s_line[1]), (position[0], position[1]), (second_x, s_line[3]))
|
||||
slider_button = Button((s_button[0], s_button[1]), (position[0] + value_pos, position[1] + gap), (s_button[2], s_button[3]))
|
||||
|
||||
if slider_moving:
|
||||
mouse_buttons = pygame.mouse.get_pressed()
|
||||
mouse_pos = pygame.mouse.get_pos()
|
||||
if mouse_buttons[0] and slider_button.rect.collidepoint(mouse_pos):
|
||||
mouse_x = mouse_pos[0]
|
||||
new_value_pos = mouse_x - s_button[2] / 2 - position[0]
|
||||
new_second_x = min(max(new_value_pos + s_button[2] / 2, 0), s_line[2])
|
||||
new_value = int((new_second_x / s_line[2]) * value_range)
|
||||
|
||||
second_x = new_second_x
|
||||
value_pos = new_value_pos
|
||||
slider_button.rect.x = position[0] + value_pos
|
||||
value = new_value
|
||||
if setting == "gui color":
|
||||
settings_data["gui color"] = value
|
||||
elif setting == "sensitivity":
|
||||
settings_data["sensitivity"] = value
|
||||
elif setting == "music":
|
||||
settings_data["music"]["volume"] = value
|
||||
elif setting == "sound":
|
||||
settings_data["sound"]["volume"] = value
|
||||
|
||||
return first_line, second_line, slider_button
|
||||
|
||||
# Game state
|
||||
run = True
|
||||
current_mode = "menu"
|
||||
# Dragging and mouse interaction
|
||||
dragging = False
|
||||
slider_moving = False
|
||||
setting = None
|
||||
can_move = False
|
||||
start_pos = (0, 0)
|
||||
pressed_button = None
|
||||
|
@ -998,9 +1036,11 @@ while run:
|
|||
|
||||
elif event.type == pygame.MOUSEBUTTONUP:
|
||||
dragging = False
|
||||
slider_moving = False
|
||||
pressed_button = None
|
||||
can_move = False
|
||||
|
||||
setting = None
|
||||
|
||||
elif event.type == pygame.MOUSEBUTTONDOWN and current_mode == "settings":
|
||||
if event.button == 4:
|
||||
scroll_offset -= 20
|
||||
|
@ -1099,38 +1139,51 @@ while run:
|
|||
if current_mode == "settings":
|
||||
clipped_rect = pygame.Rect(non_movable_area.x, non_movable_area.y, settings_x_position, non_movable_area.height)
|
||||
screen.set_clip(clipped_rect)
|
||||
|
||||
gui_color_slider = Slider(50, (0, 255), 0, False)
|
||||
sensitivity_slider = Slider(50, (0, 100), 50, False)
|
||||
music_volume_slider = Slider(50, (0, 100), 50, False)
|
||||
sound_volume_slider = Slider(50, (0, 100), 50, False)
|
||||
|
||||
for index, setting_name in enumerate(settings_data):
|
||||
if setting_name != "keybinds":
|
||||
y = slider_size[1] - scroll_offset + index * (cons[0] + space_between_settings)
|
||||
y = f_line[3] - scroll_offset + index * (cons[0] + space_between_settings)
|
||||
value = settings_data[setting_name]
|
||||
render_settings_text(setting_name.upper(), value,
|
||||
if setting_name in ["gui color", "sensitivity", "music", "sound"]:
|
||||
if setting_name in ["music", "sound"]:
|
||||
value = value["volume"]
|
||||
render_settings_text(setting_name.upper(),
|
||||
(settings_x_position // 2 + 9, y - settings_y_offset), screen, value)
|
||||
else:
|
||||
render_settings_text(setting_name.upper(),
|
||||
(settings_x_position // 2 + 9, y - settings_y_offset), screen)
|
||||
|
||||
if setting_name == "gui color":
|
||||
gui_color_slider.position = y
|
||||
gui_color_slider.value = value
|
||||
gui_color_slider.update_positions()
|
||||
gui_color_slider = slider((settings_x_position // 2 - 26, y + 8), 360, value, slider_moving, setting)
|
||||
for slider_part in gui_color_slider:
|
||||
slider_part.draw(screen)
|
||||
if dragging and gui_color_slider[2].rect.collidepoint(event.pos):
|
||||
slider_moving = True
|
||||
setting = setting_name
|
||||
elif setting_name == "sensitivity":
|
||||
sensitivity_slider.position = y
|
||||
sensitivity_slider.value = value
|
||||
sensitivity_slider.update_positions()
|
||||
sensitivity_slider = slider((settings_x_position // 2 - 26, y + 8), 100, value, slider_moving, setting)
|
||||
for slider_part in sensitivity_slider:
|
||||
slider_part.draw(screen)
|
||||
if dragging and sensitivity_slider[2].rect.collidepoint(event.pos):
|
||||
slider_moving = True
|
||||
setting = setting_name
|
||||
elif setting_name == "music":
|
||||
music_volume_slider.position = y
|
||||
music_volume_slider.value = value
|
||||
music_volume_slider.update_positions()
|
||||
music_volume_slider = slider((settings_x_position // 2 - 26, y + 8), 100, value, slider_moving, setting)
|
||||
for slider_part in music_volume_slider:
|
||||
slider_part.draw(screen)
|
||||
if dragging and music_volume_slider[2].rect.collidepoint(event.pos):
|
||||
slider_moving = True
|
||||
setting = setting_name
|
||||
elif setting_name == "sound":
|
||||
sound_volume_slider.position = y
|
||||
sound_volume_slider.value = value
|
||||
sound_volume_slider.update_positions()
|
||||
sound_volume_slider = slider((settings_x_position // 2 - 26, y + 8), 100, value, slider_moving, setting)
|
||||
for slider_part in sound_volume_slider:
|
||||
slider_part.draw(screen)
|
||||
if dragging and sound_volume_slider[2].rect.collidepoint(event.pos):
|
||||
slider_moving = True
|
||||
setting = setting_name
|
||||
|
||||
screen.set_clip(None)
|
||||
|
||||
pygame.display.flip()
|
||||
|
||||
pygame.quit()
|
||||
pygame.quit()
|
|
@ -2,16 +2,16 @@
|
|||
"size": "medium" ,
|
||||
"style": "classic",
|
||||
"grid": "4x4",
|
||||
"gui color": [0, 0],
|
||||
"gui color": 0,
|
||||
"sensitivity": 1,
|
||||
"music": {
|
||||
"on": true,
|
||||
"volume": 0.03,
|
||||
"volume": 30,
|
||||
"version": "serenity"
|
||||
},
|
||||
"sound": {
|
||||
"on": true,
|
||||
"volume": 0.04,
|
||||
"volume": 40,
|
||||
"version": "wood"
|
||||
},
|
||||
"display": "time",
|
||||
|
|
Loading…
Reference in New Issue