62 lines
2.8 KiB
Python
62 lines
2.8 KiB
Python
from level.selection.ScreenManager import ScreenManager
|
|
from physics.SpriteManager import DrawLayers, SpriteManager
|
|
from physics.TickData import TickData
|
|
from sprite.PositionScale import PositionScale
|
|
from sprite.SpritesheetManager import SpritesheetManager
|
|
from ui_elements import CoordinateTransform
|
|
from ui_elements.ClickEvent import ClickEvent
|
|
from ui_elements.KeyManager import KeyManager
|
|
from ui_elements.TextLabel import TextLabel
|
|
|
|
|
|
class OptionsScreenManager(ScreenManager):
|
|
def __init__(self, sprite_manager: SpriteManager, spritesheet_manager: SpritesheetManager, main_loop):
|
|
super().__init__(sprite_manager, spritesheet_manager, main_loop)
|
|
|
|
def go_to_menu(self, click):
|
|
if click.is_click_down(ClickEvent.CLICK_LEFT):
|
|
self.main_loop.select_main_menu()
|
|
|
|
def create_label(self, name: str, x_position, y_position, font_size):
|
|
label = TextLabel(name, x_position, y_position, font_size, alignment="left")
|
|
self.add_element(DrawLayers.UI, label)
|
|
label.position_scale.scale = (1, 1)
|
|
self.create_button(name, label)
|
|
|
|
self.back_button = TextLabel('BACK [ESC]', 610, 430, font_size=30)
|
|
self.back_button.position_scale.scale = (0.5, 0.5)
|
|
self.add_element(DrawLayers.UI, self.back_button)
|
|
self.back_button.add_click_listener(lambda click: self.go_to_menu(click))
|
|
|
|
def create_button(self, name: str, label: TextLabel):
|
|
if name == "SMALL":
|
|
label.add_click_listener(lambda click: self.make_small_screen(click))
|
|
elif name == "MEDIUM":
|
|
label.add_click_listener(lambda click: self.make_medium_screen(click))
|
|
elif name == "LARGE":
|
|
label.add_click_listener(lambda click: self.make_large_screen(click))
|
|
|
|
def make_small_screen(self, click):
|
|
self.main_loop.update_position_scale(PositionScale((0, 0), (1, 1)))
|
|
|
|
def make_medium_screen(self, click):
|
|
self.main_loop.update_position_scale(PositionScale((0, 0), (1.25, 1.25)))
|
|
|
|
def make_large_screen(self, click):
|
|
self.main_loop.update_position_scale(PositionScale((0, 0), (1.5, 1.5)))
|
|
|
|
def initialize(self):
|
|
size = CoordinateTransform.transform_screen_to_world(self.main_loop.window_size,
|
|
self.main_loop.screen_transform)
|
|
self.create_label("SCREEN SIZE", size[0] * 0.2, size[1] * 0.2, font_size=70)
|
|
self.create_label("SMALL", size[0] * 0.15, size[1] * 0.6, font_size=30)
|
|
self.create_label("MEDIUM", size[0] * 0.45, size[1] * 0.6, font_size=30)
|
|
self.create_label("LARGE", size[0] * 0.75, size[1] * 0.6, font_size=30)
|
|
|
|
def destroy(self):
|
|
super().destroy()
|
|
|
|
def tick(self, tick_data: TickData):
|
|
if tick_data.key_manager.is_keymap_down(KeyManager.KEY_ESCAPE):
|
|
self.main_loop.select_main_menu()
|