class_name OpponentSelectScreen extends Control ## Einzelspieler: Schwierigkeit wählen und die Gegnerzahl schieben. Die Gegnerdecks ## werden erst beim Start zufällig gezogen (siehe BattleScreen und DeckGen). var app var rating_label: Label var diff_buttons := {} var count_slider: HSlider var count_label: Label var info_label: Label func _ready() -> void: var col := Style.column(self, 1000, 60, 14) Style.clabel(col, "Einzelspieler", 36, Style.GOLD, "center", true) Style.spacer(col, 10) Style.clabel(col, "Schwierigkeit", 20, Style.TEXT, "center", true) var dr := Style.row(col, 10) dr.alignment = BoxContainer.ALIGNMENT_CENTER for key in ["leicht", "normal", "schwer"]: var k: String = key diff_buttons[k] = Style.cbutton(dr, Profile.DIFFICULTIES[k].name, Vector2(150, 40), func(): set_difficulty(k)) rating_label = Style.clabel(col, "", 15, Style.MUTED) Style.spacer(col, 24) count_label = Style.clabel(col, "", 20, Style.TEXT, "center", true) var sr := Style.row(col, 12) sr.alignment = BoxContainer.ALIGNMENT_CENTER Style.clabel(sr, "1", 15, Style.MUTED, "right", false, 20) count_slider = HSlider.new() count_slider.min_value = 1 count_slider.max_value = Game.MAX_OPPONENTS count_slider.step = 1 count_slider.value = 1 count_slider.tick_count = Game.MAX_OPPONENTS count_slider.ticks_on_borders = true count_slider.custom_minimum_size = Vector2(420, 32) count_slider.value_changed.connect(func(_v): refresh()) sr.add_child(count_slider) Style.clabel(sr, str(Game.MAX_OPPONENTS), 15, Style.MUTED, "left", false, 20) info_label = Style.clabel(col, "", 15, Style.MUTED) Style.spacer(col, 30) var br := Style.row(col, 16) br.alignment = BoxContainer.ALIGNMENT_CENTER Style.cbutton(br, "Starten", Vector2(190, 46), start, Color("285a3c")) Style.cbutton(br, "Zurück", Vector2(150, 46), func(): app.show_screen(MenuScreen.new())) refresh() func set_difficulty(key: String) -> void: app.profile.settings.difficulty = key app.save() refresh() func opponents() -> int: return int(count_slider.value) func start() -> void: app.show_screen(BattleScreen.new(opponents())) func refresh() -> void: var p: Profile = app.profile for key in diff_buttons: var b: Button = diff_buttons[key] var active: bool = key == p.settings.difficulty b.add_theme_stylebox_override("normal", Style.box(Color("285a3c") if active else Style.PANEL_LIGHT, 8, Style.GOLD if active else Style.MUTED, 2)) b.add_theme_stylebox_override("hover", Style.box(Style.lighter(Color("285a3c") if active else Style.PANEL_LIGHT), 8, Style.GOLD if active else Style.MUTED, 2)) rating_label.text = tr("Deine Deckstärke %.1f · Gegnerdecks %.1f") % [p.deck_rating(), p.target_rating()] var n := opponents() count_label.text = tr("1 Gegner") if n == 1 else tr("%d Gegner") % n info_label.text = (tr("Duell") if n == 1 else tr("%d am Tisch") % (n + 1)) + " · " + tr("%d Münzen") % Profile.REWARD_WIN[n] func _input(event: InputEvent) -> void: if event.is_action_pressed("ui_cancel"): app.show_screen(MenuScreen.new())