elukjanovica 2024-03-02 22:56:53 +02:00
parent 41915d061b
commit b67e05107a
2 changed files with 85 additions and 32 deletions

111
main.py
View File

@ -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()

View File

@ -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",