This commit is contained in:
team3
2026-09-16 17:55:28 +02:00
parent 9800c614bb
commit a0597110bd
17 changed files with 652 additions and 278 deletions

View File

@@ -5,6 +5,7 @@ signal bid_pressed(count: int, face: int)
signal challenge_pressed
signal exact_pressed
signal rematch_pressed
signal karte_pressed
signal booster_chosen(id: String, target: int)
signal quit_pressed
signal pause_changed(paused: bool)
@@ -54,6 +55,7 @@ var pause_slot: Control
var over_slot: Control
var over_title: Label
var over_again: Button
var over_karte: Button
var pause_hint: Label
var boost_panel: PanelContainer
var boost_cards: HBoxContainer
@@ -178,9 +180,12 @@ func _build() -> void:
# --- Letzte Wette in der Tischmitte, als so viele Würfel wie angesagt
var bid_slot := _slot(0, 0, 1, 1, 0, 0, 0, 0)
var bid_panel := _panel(Color(0.05, 0.06, 0.09, 0.55))
bid_panel.mouse_filter = Control.MOUSE_FILTER_IGNORE
bid_slot.add_child(bid_panel)
bid_box = VBoxContainer.new()
bid_box.add_theme_constant_override("separation", 8)
bid_slot.add_child(bid_box)
bid_panel.add_child(bid_box)
bid_name = _label("", 21, ACCENT)
bid_name.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
# Auf die freie Mitte begrenzen, sonst läuft der Text über die Nachbarplätze.
@@ -205,11 +210,14 @@ func _build() -> void:
root.add_child(banner_label)
# --- Wer ist dran: direkt über der Ansageleiste, wo der Blick ohnehin liegt
# Im eigenen Feld: auf der hellen Platte wäre gelbe Schrift unlesbar.
var tp := _panel(Color(0.05, 0.06, 0.09, 0.85))
tp.mouse_filter = Control.MOUSE_FILTER_IGNORE
_slot(0, 1, 1, 1, 16, -152, -16, -114).add_child(tp)
turn_label = _label("", 19, ACCENT)
turn_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
turn_label.mouse_filter = Control.MOUSE_FILTER_IGNORE
_place(turn_label, 0, 1, 1, 1, 16, -146, -16, -114)
root.add_child(turn_label)
tp.add_child(turn_label)
# --- Ansage: kompakte Leiste unten in der Mitte
action_panel = _panel()
@@ -312,10 +320,12 @@ func _build() -> void:
# den Tisch; hier steht nur, wer was geworfen hat und wie es fiel.
wurf_slot = _slot(0, 0, 0, 0, 16, 100, 336, 200)
wurf_slot.visible = false
var wp := _panel()
wurf_slot.add_child(wp)
wurf_label = _label("", 16, ACCENT)
wurf_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
wurf_label.mouse_filter = Control.MOUSE_FILTER_IGNORE
wurf_slot.add_child(wurf_label)
wp.add_child(wurf_label)
# --- Protokoll unten rechts: was der Topf tut, wer geht, wer zurückkommt.
var lp := _panel()
@@ -427,6 +437,12 @@ func _build() -> void:
over_again.custom_minimum_size = Vector2(0, 42)
over_again.pressed.connect(func() -> void: rematch_pressed.emit())
ov.add_child(over_again)
over_karte = Button.new()
over_karte.text = "Zur Seekarte"
over_karte.custom_minimum_size = Vector2(0, 42)
over_karte.pressed.connect(func() -> void: karte_pressed.emit())
over_karte.visible = false
ov.add_child(over_karte)
var menue := Button.new()
menue.text = "Zum Menü"
menue.custom_minimum_size = Vector2(0, 42)
@@ -621,6 +637,10 @@ func update_state(st: Dictionary, my_seat: int) -> void:
banner_label.text = "" if st.phase == "over" else st.banner
if st.phase == "over" and not over_slot.visible:
over_title.text = String(st.banner)
# Kampagne: Wertung und Rang statt nur des Siegers.
if Kampagne.kampagnenpartie and Kampagne.letztes != "":
over_title.text = String(st.banner) + "\n" + Kampagne.letztes
over_karte.visible = Kampagne.kampagnenpartie
# Nochmal: solo immer, im Netz nur für den Raumbesitzer - der Server
# setzt den Raum dann für alle neu auf.
over_again.visible = Net.room_code == Net.SOLO or Net.is_owner