diff --git a/main.py b/main.py index 06a1cc0..c0bf205 100644 --- a/main.py +++ b/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() \ No newline at end of file diff --git a/main_settings.json b/main_settings.json index 46ae12a..9000d32 100644 --- a/main_settings.json +++ b/main_settings.json @@ -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",