update
This commit is contained in:
@@ -10,6 +10,8 @@ var current := "main"
|
||||
|
||||
# Einzelspieler
|
||||
var solo_bots: NumberRow
|
||||
var solo_stufe: OptionButton
|
||||
var lobby_stufe: OptionButton
|
||||
|
||||
# Mehrspieler
|
||||
var name_edit: LineEdit
|
||||
@@ -37,6 +39,7 @@ func _ready() -> void:
|
||||
screens["multi"] = _screen(root, _build_multi())
|
||||
screens["join"] = _screen(root, _build_join())
|
||||
screens["lobby"] = _screen(root, _build_lobby())
|
||||
screens["regeln"] = _screen(root, _build_regeln())
|
||||
|
||||
Net.lobby_changed.connect(_refresh)
|
||||
Net.connection_failed.connect(_on_failed)
|
||||
@@ -85,6 +88,17 @@ func _text(t: String, size: int, col := Color.WHITE) -> Label:
|
||||
return l
|
||||
|
||||
|
||||
## Leicht, normal, schwer - stellt Bluff-Quote, Genau-Schwelle und Vorsicht
|
||||
## der Bots ein.
|
||||
func _stufen_wahl() -> OptionButton:
|
||||
var o := OptionButton.new()
|
||||
for name in ["leicht", "normal", "schwer"]:
|
||||
o.add_item(name)
|
||||
o.selected = 1
|
||||
o.add_theme_font_size_override("font_size", 16)
|
||||
return o
|
||||
|
||||
|
||||
func _row(caption: String, ctrl: Control) -> HBoxContainer:
|
||||
var h := HBoxContainer.new()
|
||||
var l := Label.new()
|
||||
@@ -158,10 +172,43 @@ func _build_main() -> Control:
|
||||
_title(box)
|
||||
_button("Einzelspieler", box, _show.bind("single"))
|
||||
_button("Mehrspieler", box, _show.bind("multi"))
|
||||
_button("Regeln", box, _show.bind("regeln"))
|
||||
_button("Beenden", box, func() -> void: get_tree().quit())
|
||||
return box
|
||||
|
||||
|
||||
## Die Regeln auf einer Seite. Wer die Münzen nicht kennt, wüsste sonst im
|
||||
## Spiel nur, was der Tooltip verrät.
|
||||
func _build_regeln() -> Control:
|
||||
var box := _box(680)
|
||||
box.add_child(_text("Regeln", 26, Color(1.0, 0.82, 0.32)))
|
||||
var absaetze := [
|
||||
["Würfeln", "Jeder hat fünf Würfel unter dem Becher. Nur die eigenen sieht man."],
|
||||
["Ansagen", "Reihum sagt man, wie viele Würfel einer Augenzahl auf dem ganzen Tisch liegen - zum Beispiel „vier Dreien\". Wer dran ist, muss höher gehen: mehr Würfel, oder gleich viele mit höherer Augenzahl. Oder er zweifelt."],
|
||||
["Anfechten", "Stimmt die Ansage nicht, verliert der Ansager einen Würfel. Stimmt sie, verliert der Zweifler einen. Mehr als angesagt zählt als richtig."],
|
||||
["Genau", "Wer glaubt, die Ansage trifft exakt, ruft „Genau\". Trifft es, verliert der Ansager einen Würfel und der Rufer bekommt einen dazu. Daneben verliert der Rufer einen."],
|
||||
["Münzen", "Jeder startet mit einer Münze; wer einen Würfel verliert, bekommt eine. Geworfen wird nur am eigenen Zug, vor der Ansage. Wappen verstärkt die Wirkung, Zahl lässt es bei der Grundwirkung - die kommt immer."],
|
||||
["Topf", "Geworfene Münzen liegen in der Mitte. Wer das Aufdecken gewinnt, nimmt sie. Mehr als vier passen nicht in den Vorrat; der Rest bleibt liegen. Im Topf liegen höchstens sechs - die älteste fällt vom Tisch."],
|
||||
["Ende", "Wer keine Würfel mehr hat, schaut zu. Der Letzte gewinnt."],
|
||||
]
|
||||
for a: Array in absaetze:
|
||||
var h := HBoxContainer.new()
|
||||
h.add_theme_constant_override("separation", 12)
|
||||
var k := _text(String(a[0]), 15, Color(1.0, 0.82, 0.32))
|
||||
k.custom_minimum_size = Vector2(110, 0)
|
||||
k.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT
|
||||
k.vertical_alignment = VERTICAL_ALIGNMENT_TOP
|
||||
h.add_child(k)
|
||||
var t := _text(String(a[1]), 15, Color(0.85, 0.87, 0.92))
|
||||
t.horizontal_alignment = HORIZONTAL_ALIGNMENT_LEFT
|
||||
t.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
|
||||
t.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||
h.add_child(t)
|
||||
box.add_child(h)
|
||||
_button("Zurück", box, _show.bind("main"))
|
||||
return box
|
||||
|
||||
|
||||
func _build_single() -> Control:
|
||||
var box := _box(400)
|
||||
_title(box)
|
||||
@@ -169,6 +216,8 @@ func _build_single() -> Control:
|
||||
box.add_child(_text("Bots", 15))
|
||||
solo_bots = NumberRow.new(1, BOT_NAMES_MAX, 3)
|
||||
box.add_child(solo_bots)
|
||||
solo_stufe = _stufen_wahl()
|
||||
box.add_child(_row("Bots spielen", solo_stufe))
|
||||
box.add_child(HSeparator.new())
|
||||
var row := HBoxContainer.new()
|
||||
row.add_theme_constant_override("separation", 8)
|
||||
@@ -244,6 +293,8 @@ func _build_lobby() -> Control:
|
||||
box.add_child(_text("Bots", 15))
|
||||
lobby_bots = NumberRow.new(0, BOT_NAMES_MAX, 1)
|
||||
box.add_child(lobby_bots)
|
||||
lobby_stufe = _stufen_wahl()
|
||||
box.add_child(_row("Bots spielen", lobby_stufe))
|
||||
|
||||
var row := HBoxContainer.new()
|
||||
row.add_theme_constant_override("separation", 8)
|
||||
@@ -257,7 +308,7 @@ func _build_lobby() -> Control:
|
||||
# ------------------------------------------------------------ Aktionen
|
||||
|
||||
func _on_solo_start() -> void:
|
||||
Net.start_singleplayer("Spieler", solo_bots.value)
|
||||
Net.start_singleplayer("Spieler", solo_bots.value, solo_stufe.selected)
|
||||
|
||||
|
||||
## Ein leeres Namensfeld ergäbe einen namenlosen Platz am Tisch.
|
||||
@@ -287,7 +338,7 @@ func _on_start() -> void:
|
||||
if humans + ai < 2:
|
||||
_sagen("Mindestens 2 Spieler nötig (Mitspieler oder Bots).")
|
||||
return
|
||||
Net.request_start(ai)
|
||||
Net.request_start(ai, lobby_stufe.selected)
|
||||
|
||||
|
||||
func _on_failed(msg: String) -> void:
|
||||
@@ -314,6 +365,7 @@ func _refresh() -> void:
|
||||
code_label.text = Net.room_code
|
||||
start_btn.disabled = not Net.is_owner
|
||||
lobby_bots.anpassen(Net.MAX_HUMANS - Net.lobby.size(), Net.is_owner)
|
||||
lobby_stufe.disabled = not Net.is_owner
|
||||
|
||||
var names: Array = []
|
||||
for id: int in Net.lobby:
|
||||
|
||||
Reference in New Issue
Block a user