elukjanovica 2024-03-02 15:25:10 +02:00
parent 11362ede0a
commit 41915d061b
1 changed files with 61 additions and 60 deletions

121
main.py
View File

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