Anleitung 2, Gamepad, große Schrift, Profil-Reset, Würfel-Limit, Tipp nach Spielverlauf, KI-Zeitbudget, Deck-Warnung, Gischtläufer, Kampfbildschirm aufgeteilt
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QPgKvy5W9WRNFHjkm5QsHx
This commit is contained in:
63
scripts/ui/battle_mulligan.gd
Normal file
63
scripts/ui/battle_mulligan.gd
Normal file
@@ -0,0 +1,63 @@
|
||||
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 [])
|
||||
Reference in New Issue
Block a user