From 41915d061b1ed8dc76e22ba002bf470856b9acca Mon Sep 17 00:00:00 2001 From: elukjanovica Date: Sat, 2 Mar 2024 15:25:10 +0200 Subject: [PATCH] --- main.py | 121 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 61 insertions(+), 60 deletions(-) diff --git a/main.py b/main.py index 43135df..06a1cc0 100644 --- a/main.py +++ b/main.py @@ -232,42 +232,40 @@ class Button: screen.blit(self.img, self.rect) +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) + + class Slider: - def __init__(self, position, value_range, aspect): - self.second_x= 80*aspect - self.slider_pos = self.handle_event() - self.first_line = Image((135, 38), position, (80, 12)) - self.second_line = Image((135, 53), position, (self.second_x, 12)) - self.slider_button = Button((218, 38), self.slider_pos, (10, 16)) + def __init__(self, position, value_range, value, dragging): self.position = position self.value_range = value_range - self.value = value_range[0] - self.dragging = False - + self.value = value + self.dragging = dragging + self.update_positions() + + def update_positions(self): + self.second_x = int(80 * (self.value / self.value_range[1])) + self.value_pos = self.second_x - (s_button[2] / 2) + self.first_line_img = Image((f_line[0], f_line[1]), self.position, (f_line[2], f_line[3])) + self.second_line_img = Image((s_line[0], s_line[1]), self.position, (self.second_x, s_line[3])) + self.slider_button = Button((s_button[0], s_button[1]), (self.value_pos, self.position + gap), + (s_button[2], s_button[3])) + self.handle_event() + def handle_event(self): - self.second_x - self.slider_pos[0] = self.position[0] #not really, 1. it takes value_range and current value, 2. it has to be movable only in slider x rect - self.slider_pos[1] = self.position[1]+2 - - self.dragging = True - - mouse_x = max(self.white_line.rect.x, min(event.pos[0], self.white_line.rect.x + self.white_line.rect.width)) - value = ((mouse_x - self.white_line.rect.x) / (self.white_line.rect.width - self.slider_button.rect.width)) * 360 - self.white_line.update_value(value) - self.blue_line.update_value(value) - self.slider_button.rect.x = mouse_x - self.slider_button.rect.width // 2 - - return self.slider_pos + if self.dragging and pygame.mouse.get_pressed()[0]: + mouse_x, mouse_y = pygame.mouse.get_pos() + if self.slider_button.rect.collidepoint(mouse_x, mouse_y): + self.value_pos = mouse_x - s_button[2] / 2 + self.second_x = int(self.value_pos + s_button[2] / 2) + self.value = int((self.second_x / 80) * self.value_range[1]) - def update_position(self, position): - self.position = position - self.white_line.position = position - self.blue_line.position = position - self.slider_button.window_position = (position[0], position[1] + (self.slider_button.size[1] - self.white_line.rect.height) // 2) - - def blit(self, screen): - screen.blit(self.white_line.img, self.white_line.rect) - screen.blit(self.blue_line.img, self.blue_line.rect) + def draw(self, screen): + self.first_line_img.draw(screen) + self.second_line_img.draw(screen) self.slider_button.draw(screen) @@ -776,12 +774,6 @@ slider_size = (80, 12) button_size = (10, 16) space_between_settings = 20 -gui_color_slider = Slider(slider_size, button_size, (settings_x_position, 10), (0, 360)) -sensitivity_slider = Slider(slider_size, button_size, (settings_x_position, 58), (0, 100)) -music_volume_slider = Slider(slider_size, button_size, (settings_x_position, 106), (0, 1)) -sound_volume_slider = Slider(slider_size, button_size, (settings_x_position, 154), (0, 1)) - - def load_data(): path_components = puzzle_data[f'current {puzzle_version}']['selected_image'].split('/')[2:] current_data = storage["albums"][path_components[0]] @@ -1104,32 +1096,41 @@ while run: pygame.display.flip() pygame.time.delay(16) -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) + 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) - value = settings_data[setting_name] - render_settings_text(setting_name.upper(), value, - (settings_x_position // 2 + 9, y - settings_y_offset), screen) + for index, setting_name in enumerate(settings_data): + if setting_name != "keybinds": + y = slider_size[1] - scroll_offset + index * (cons[0] + space_between_settings) + value = settings_data[setting_name] + render_settings_text(setting_name.upper(), value, + (settings_x_position // 2 + 9, y - settings_y_offset), screen) - if setting_name == "gui color": - gui_color_slider.update_position((settings_x_position, y + 10)) - gui_color_slider.blit(screen) - elif setting_name == "sensitivity": - sensitivity_slider.update_position((settings_x_position, y + 10)) - sensitivity_slider.blit(screen) - elif setting_name == "music": - music_volume_slider.update_position((settings_x_position, y + 10)) - music_volume_slider.blit(screen) - elif setting_name == "sound": - sound_volume_slider.update_position((settings_x_position, y + 10)) - sound_volume_slider.blit(screen) + if setting_name == "gui color": + gui_color_slider.position = y + gui_color_slider.value = value + gui_color_slider.update_positions() + elif setting_name == "sensitivity": + sensitivity_slider.position = y + sensitivity_slider.value = value + sensitivity_slider.update_positions() + elif setting_name == "music": + music_volume_slider.position = y + music_volume_slider.value = value + music_volume_slider.update_positions() + elif setting_name == "sound": + sound_volume_slider.position = y + sound_volume_slider.value = value + sound_volume_slider.update_positions() - screen.set_clip(None) + screen.set_clip(None) -pygame.display.flip() + pygame.display.flip() pygame.quit()