update
This commit is contained in:
@@ -61,8 +61,13 @@ var info_name: Label
|
||||
var info_desc: Label
|
||||
var info_stark: Label
|
||||
var wurf_slot: CenterContainer
|
||||
var wurf_icon: MuenzIcon
|
||||
var wurf_label: Label
|
||||
var log_box: VBoxContainer
|
||||
var _log_sig := ""
|
||||
## Auf dem Handy gibt es kein Überfahren: der erste Tipp zeigt die Erklärung,
|
||||
## der zweite wirft. Am Rechner bleibt alles beim Klick.
|
||||
var _touch := DisplayServer.is_touchscreen_available()
|
||||
var _tipp_id := "" ## Münze, deren Erklärung nach dem ersten Tipp offen ist
|
||||
var timer_bid: Label
|
||||
var timer_boost: Label
|
||||
var target_row: HBoxContainer
|
||||
@@ -456,21 +461,25 @@ func _build() -> void:
|
||||
hand_panel.visible = false
|
||||
|
||||
# --- Booster-Overlay
|
||||
# --- Geworfene Münze, links unter der Liste der gelegten Münzen. Die
|
||||
# Tischmitte ist besetzt: dort stehen die Becher und das Gebot.
|
||||
wurf_slot = _slot(0, 0, 0, 0, 16, 100, 336, 300)
|
||||
# --- Wurfansage, links unter dem Topf. Die Münze selbst fällt in 3D auf
|
||||
# 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 wv := VBoxContainer.new()
|
||||
wv.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
wv.add_theme_constant_override("separation", 6)
|
||||
wurf_slot.add_child(wv)
|
||||
wurf_icon = MuenzIcon.new("", ACCENT, 104.0)
|
||||
wurf_icon.size_flags_horizontal = Control.SIZE_SHRINK_CENTER
|
||||
wv.add_child(wurf_icon)
|
||||
wurf_label = _label("", 16, ACCENT)
|
||||
wurf_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||
wurf_label.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
wv.add_child(wurf_label)
|
||||
wurf_slot.add_child(wurf_label)
|
||||
|
||||
# --- Protokoll unten rechts: was der Topf tut, wer geht, wer zurückkommt.
|
||||
var lp := _panel()
|
||||
# Am unteren Rand verankert und nach oben wachsend - so gross wie der Text.
|
||||
_place(lp, 1, 1, 1, 1, -376, -124, -16, -124)
|
||||
lp.grow_horizontal = Control.GROW_DIRECTION_BEGIN
|
||||
lp.grow_vertical = Control.GROW_DIRECTION_BEGIN
|
||||
root.add_child(lp)
|
||||
log_box = VBoxContainer.new()
|
||||
log_box.add_theme_constant_override("separation", 2)
|
||||
lp.add_child(log_box)
|
||||
|
||||
# --- Erklärung beim Überfahren. Ein eigenes Feld statt Tooltip: das kommt
|
||||
# sofort und verschwindet nicht, wenn die Runde weiterläuft.
|
||||
@@ -733,6 +742,7 @@ func update_state(st: Dictionary, my_seat: int) -> void:
|
||||
_zeichne_hand(st)
|
||||
_zeichne_mitte(st, my_seat)
|
||||
_zeichne_verlauf(st, my_seat)
|
||||
_zeichne_log(st)
|
||||
|
||||
# Am Ende steht der Sieger im Endbildschirm; das Banner darüber wäre doppelt.
|
||||
banner_label.text = "" if st.phase == "over" else st.banner
|
||||
@@ -1045,54 +1055,48 @@ func _pruefe_wurf(neu: Dictionary, st: Dictionary) -> void:
|
||||
_short(String(st.seats[seat].name)))
|
||||
|
||||
|
||||
## Der Ausgang steht schon fest - der Host hat ihn ausgewürfelt. Die Drehung
|
||||
## ist nur die Ansicht dazu und endet auf der richtigen Seite.
|
||||
## Der Ausgang steht schon fest - der Host hat ihn ausgewürfelt. Die Münze
|
||||
## fällt in 3D auf den Tisch; hier steht der Text dazu, kurz und dann weg.
|
||||
func _zeig_wurf(id: String, stark: bool, wer: String) -> void:
|
||||
var b: Dictionary = BoosterDB.get_booster(id)
|
||||
if b.is_empty():
|
||||
return
|
||||
wurf_icon.id = id
|
||||
wurf_icon.kind_col = _kind_col(b)
|
||||
wurf_icon.seite = 0
|
||||
wurf_icon.scale = Vector2.ONE
|
||||
wurf_icon.queue_redraw()
|
||||
wurf_label.text = "%s wirft\n%s" % [wer, b.name]
|
||||
wurf_label.add_theme_color_override("font_color", DIM)
|
||||
wurf_label.text = "%s wirft %s\n%s" % [wer, b.name,
|
||||
"Wappen - " + String(b.get("stark", "")) if stark else "Zahl - Grundwirkung"]
|
||||
wurf_label.add_theme_color_override("font_color", ACCENT if stark else DIM)
|
||||
wurf_slot.visible = true
|
||||
Klang.muenze()
|
||||
if _wurf_tween != null and _wurf_tween.is_valid():
|
||||
_wurf_tween.kill()
|
||||
_wurf_tween = create_tween()
|
||||
_wurf_tween.tween_method(_dreh, 0.0, TAU * 2.5, 0.8)
|
||||
_wurf_tween.tween_callback(_wurf_ende.bind(stark, b))
|
||||
_wurf_tween.tween_interval(1.6)
|
||||
_wurf_tween.tween_interval(2.6)
|
||||
_wurf_tween.tween_callback(func() -> void: wurf_slot.visible = false)
|
||||
|
||||
|
||||
## Die Münze wird waagerecht gestaucht; bei negativer Breite sieht man die
|
||||
## Rückseite. Das ist eine Drehung, ohne dass etwas in 3D stehen muss.
|
||||
func _dreh(winkel: float) -> void:
|
||||
var c := cos(winkel)
|
||||
wurf_icon.scale.x = maxf(0.06, absf(c))
|
||||
var seite := 0 if c >= 0.0 else 1
|
||||
if wurf_icon.seite != seite:
|
||||
wurf_icon.seite = seite
|
||||
wurf_icon.queue_redraw()
|
||||
## Die letzten Zeilen des Spielprotokolls.
|
||||
func _zeichne_log(st: Dictionary) -> void:
|
||||
var zeilen: Array = st.get("log", [])
|
||||
var sig := str(zeilen)
|
||||
if sig == _log_sig:
|
||||
return
|
||||
_log_sig = sig
|
||||
_clear(log_box)
|
||||
var ab := maxi(0, zeilen.size() - 5)
|
||||
for i in range(ab, zeilen.size()):
|
||||
var l := _label(String(zeilen[i]), 13, ACCENT if i == zeilen.size() - 1 else DIM)
|
||||
l.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
|
||||
l.custom_minimum_size = Vector2(340, 0)
|
||||
log_box.add_child(l)
|
||||
|
||||
|
||||
func _wurf_ende(stark: bool, b: Dictionary) -> void:
|
||||
wurf_icon.scale.x = 1.0
|
||||
wurf_icon.seite = 0 if stark else 1
|
||||
wurf_icon.queue_redraw()
|
||||
if stark:
|
||||
wurf_label.text = "%s\nWappen - verstärkt" % b.name
|
||||
wurf_label.add_theme_color_override("font_color", ACCENT)
|
||||
else:
|
||||
wurf_label.text = "%s\nZahl - Grundwirkung" % b.name
|
||||
wurf_label.add_theme_color_override("font_color", DIM)
|
||||
|
||||
|
||||
func _pick(id: String) -> void:
|
||||
# Handy: erster Tipp öffnet nur die Erklärung (die kommt über den
|
||||
# nachgeahmten Mauszeiger von selbst), der zweite wirft wirklich.
|
||||
if _touch and _tipp_id != id:
|
||||
_tipp_id = id
|
||||
return
|
||||
_tipp_id = ""
|
||||
if not BoosterDB.needs_target(id) or _my_values.is_empty():
|
||||
booster_chosen.emit(id, 0)
|
||||
boost_slot.visible = false
|
||||
|
||||
Reference in New Issue
Block a user