master
parent
41915d061b
commit
b67e05107a
101
main.py
101
main.py
|
@ -305,15 +305,15 @@ def render_text(text, position, screen, color=text_color, centered=False):
|
||||||
else:
|
else:
|
||||||
screen.blit(text_render, position)
|
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)
|
font = pygame.font.SysFont(FONT, FONT_SIZE2-1)
|
||||||
|
if value is not None:
|
||||||
text_render = font.render(f"{text}: {value}", True, color)
|
text_render = font.render(f"{text}: {value}", True, color)
|
||||||
|
else:
|
||||||
|
text_render = font.render(text, True, color)
|
||||||
|
|
||||||
if centered:
|
|
||||||
text_rect = text_render.get_rect(center=position)
|
text_rect = text_render.get_rect(center=position)
|
||||||
screen.blit(text_render, text_rect.topleft)
|
screen.blit(text_render, text_rect.topleft)
|
||||||
else:
|
|
||||||
screen.blit(text_render, position)
|
|
||||||
|
|
||||||
# MENU MODE
|
# MENU MODE
|
||||||
def browse():
|
def browse():
|
||||||
|
@ -873,17 +873,55 @@ def data_check(current_mode):
|
||||||
return background_image, current_buttons
|
return background_image, current_buttons
|
||||||
|
|
||||||
scroll_offset = 0
|
scroll_offset = 0
|
||||||
space_between_settings = 5
|
space_between_settings = 20
|
||||||
settings_x_position = puzzle_size[0]
|
settings_x_position = puzzle_size[0]
|
||||||
settings_y_offset = 5
|
settings_y_offset = 5
|
||||||
total_settings_height = len(settings_data) * (cons[0] + space_between_settings)
|
total_settings_height = len(settings_data) * (cons[0] + space_between_settings)
|
||||||
max_scroll_offset = max(0, total_settings_height - non_movable_area.height)
|
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
|
# Game state
|
||||||
run = True
|
run = True
|
||||||
current_mode = "menu"
|
current_mode = "menu"
|
||||||
# Dragging and mouse interaction
|
# Dragging and mouse interaction
|
||||||
dragging = False
|
dragging = False
|
||||||
|
slider_moving = False
|
||||||
|
setting = None
|
||||||
can_move = False
|
can_move = False
|
||||||
start_pos = (0, 0)
|
start_pos = (0, 0)
|
||||||
pressed_button = None
|
pressed_button = None
|
||||||
|
@ -998,8 +1036,10 @@ while run:
|
||||||
|
|
||||||
elif event.type == pygame.MOUSEBUTTONUP:
|
elif event.type == pygame.MOUSEBUTTONUP:
|
||||||
dragging = False
|
dragging = False
|
||||||
|
slider_moving = False
|
||||||
pressed_button = None
|
pressed_button = None
|
||||||
can_move = False
|
can_move = False
|
||||||
|
setting = None
|
||||||
|
|
||||||
elif event.type == pygame.MOUSEBUTTONDOWN and current_mode == "settings":
|
elif event.type == pygame.MOUSEBUTTONDOWN and current_mode == "settings":
|
||||||
if event.button == 4:
|
if event.button == 4:
|
||||||
|
@ -1100,34 +1140,47 @@ while run:
|
||||||
clipped_rect = pygame.Rect(non_movable_area.x, non_movable_area.y, settings_x_position, non_movable_area.height)
|
clipped_rect = pygame.Rect(non_movable_area.x, non_movable_area.y, settings_x_position, non_movable_area.height)
|
||||||
screen.set_clip(clipped_rect)
|
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):
|
for index, setting_name in enumerate(settings_data):
|
||||||
if setting_name != "keybinds":
|
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]
|
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)
|
(settings_x_position // 2 + 9, y - settings_y_offset), screen)
|
||||||
|
|
||||||
if setting_name == "gui color":
|
if setting_name == "gui color":
|
||||||
gui_color_slider.position = y
|
gui_color_slider = slider((settings_x_position // 2 - 26, y + 8), 360, value, slider_moving, setting)
|
||||||
gui_color_slider.value = value
|
for slider_part in gui_color_slider:
|
||||||
gui_color_slider.update_positions()
|
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":
|
elif setting_name == "sensitivity":
|
||||||
sensitivity_slider.position = y
|
sensitivity_slider = slider((settings_x_position // 2 - 26, y + 8), 100, value, slider_moving, setting)
|
||||||
sensitivity_slider.value = value
|
for slider_part in sensitivity_slider:
|
||||||
sensitivity_slider.update_positions()
|
slider_part.draw(screen)
|
||||||
|
if dragging and sensitivity_slider[2].rect.collidepoint(event.pos):
|
||||||
|
slider_moving = True
|
||||||
|
setting = setting_name
|
||||||
elif setting_name == "music":
|
elif setting_name == "music":
|
||||||
music_volume_slider.position = y
|
music_volume_slider = slider((settings_x_position // 2 - 26, y + 8), 100, value, slider_moving, setting)
|
||||||
music_volume_slider.value = value
|
for slider_part in music_volume_slider:
|
||||||
music_volume_slider.update_positions()
|
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":
|
elif setting_name == "sound":
|
||||||
sound_volume_slider.position = y
|
sound_volume_slider = slider((settings_x_position // 2 - 26, y + 8), 100, value, slider_moving, setting)
|
||||||
sound_volume_slider.value = value
|
for slider_part in sound_volume_slider:
|
||||||
sound_volume_slider.update_positions()
|
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)
|
screen.set_clip(None)
|
||||||
|
|
||||||
|
|
|
@ -2,16 +2,16 @@
|
||||||
"size": "medium" ,
|
"size": "medium" ,
|
||||||
"style": "classic",
|
"style": "classic",
|
||||||
"grid": "4x4",
|
"grid": "4x4",
|
||||||
"gui color": [0, 0],
|
"gui color": 0,
|
||||||
"sensitivity": 1,
|
"sensitivity": 1,
|
||||||
"music": {
|
"music": {
|
||||||
"on": true,
|
"on": true,
|
||||||
"volume": 0.03,
|
"volume": 30,
|
||||||
"version": "serenity"
|
"version": "serenity"
|
||||||
},
|
},
|
||||||
"sound": {
|
"sound": {
|
||||||
"on": true,
|
"on": true,
|
||||||
"volume": 0.04,
|
"volume": 40,
|
||||||
"version": "wood"
|
"version": "wood"
|
||||||
},
|
},
|
||||||
"display": "time",
|
"display": "time",
|
||||||
|
|
Loading…
Reference in New Issue