class_name BattleMulligan extends Control ## Mulligan-Maske: Karten anklicken, behalten oder tauschen. signal decided(indexes: Array) var layer: Control var b_keep: Button var b_swap: Button var selected: Array = [] func _init() -> void: set_anchors_preset(Control.PRESET_FULL_RECT) visible = false var dark := ColorRect.new() dark.color = Color(0, 0, 0, 0.67) dark.set_anchors_preset(Control.PRESET_FULL_RECT) dark.mouse_filter = Control.MOUSE_FILTER_STOP add_child(dark) Style.panel(self, Rect2(140, 250, 1000, 320), Style.PANEL, 10, Style.GOLD, 2) Style.label(self, "Hand tauschen?", 26, Style.TEXT, Rect2(140, 262, 1000, 40), "center", true) Style.label(self, "Klicke Karten an die du zurücklegen willst. Einmal pro Partie.", 15, Style.MUTED, Rect2(140, 300, 1000, 24), "center") layer = Control.new() layer.mouse_filter = Control.MOUSE_FILTER_IGNORE add_child(layer) b_keep = Style.button(self, "Behalten", Rect2(430, 515, 200, 44), func(): finish(false), Color("285a3c")) b_swap = Style.button(self, "Tauschen", Rect2(650, 515, 200, 44), func(): finish(true)) func open(hand: Array) -> void: selected = [] visible = true Style.clear(layer) for i in hand.size(): var r := BattleLayout.hand_rect(hand.size(), i) var v := CardView.new(hand[i], r.size) v.position = Vector2(r.position.x, 322) var idx := i v.clicked.connect(func(_view): toggle(idx)) layer.add_child(v) _borders() func toggle(idx: int) -> void: if idx in selected: selected.erase(idx) else: selected.append(idx) _borders() func _borders() -> void: var views := layer.get_children() for i in views.size(): views[i].border = Style.YELLOW if i in selected else null views[i].queue_redraw() b_swap.text = ("Tauschen (%d)" % selected.size()) if not selected.is_empty() else "Tauschen" func finish(swap: bool) -> void: visible = false decided.emit(selected.duplicate() if swap else [])