Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QPgKvy5W9WRNFHjkm5QsHx
64 lines
2.0 KiB
GDScript
64 lines
2.0 KiB
GDScript
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 [])
|