This commit is contained in:
team3
2026-09-16 18:35:59 +02:00
parent a0597110bd
commit 8173fb7658
8 changed files with 162 additions and 20 deletions

View File

@@ -16,6 +16,9 @@ var lobby_stufe: OptionButton
# Kampagne
var kamp_kopf: Label
var kamp_meldung: Label
var kamp_name: LineEdit
var beute_row: HBoxContainer
var karte: Control
# Mehrspieler
@@ -136,8 +139,28 @@ class Seekarte extends Control:
func _build_kampagne() -> Control:
var box := _box(940)
box.add_child(_text("Seekarte", 26, Color(1.0, 0.82, 0.32)))
var kopf := HBoxContainer.new()
kopf.add_theme_constant_override("separation", 12)
box.add_child(kopf)
kamp_name = LineEdit.new()
kamp_name.placeholder_text = "Dein Name"
kamp_name.max_length = 16
kamp_name.custom_minimum_size = Vector2(180, 0)
kamp_name.text_changed.connect(func(t: String) -> void:
Kampagne.spielername = t.strip_edges() if t.strip_edges() != "" else "Spieler"
Kampagne.speichern())
kopf.add_child(kamp_name)
kamp_kopf = _text("", 15, Color(0.85, 0.87, 0.92))
box.add_child(kamp_kopf)
kamp_kopf.size_flags_horizontal = Control.SIZE_EXPAND_FILL
kopf.add_child(kamp_kopf)
kamp_meldung = _text("", 13, Color(0.62, 0.64, 0.70))
kamp_meldung.horizontal_alignment = HORIZONTAL_ALIGNMENT_LEFT
box.add_child(kamp_meldung)
# Beute nach einem Sieg: eine Münze für die nächste Partie.
beute_row = HBoxContainer.new()
beute_row.add_theme_constant_override("separation", 6)
beute_row.alignment = BoxContainer.ALIGNMENT_CENTER
box.add_child(beute_row)
karte = Seekarte.new()
karte.custom_minimum_size = Vector2(920, 440)
box.add_child(karte)
@@ -153,8 +176,32 @@ func _build_kampagne() -> Control:
func _karte_fuellen() -> void:
kamp_kopf.text = "Du: %s, Wertung %d · %d Partien, %d Siege" % [
Kampagne.mein_rang(), int(round(Kampagne.elo)), Kampagne.partien, Kampagne.siege]
if kamp_name.text != Kampagne.spielername:
kamp_name.text = Kampagne.spielername
kamp_kopf.text = "%s, Wertung %d · %d Partien, %d Siege%s" % [
Kampagne.mein_rang(), int(round(Kampagne.elo)), Kampagne.partien, Kampagne.siege,
" · KAMPAGNE GEWONNEN" if Kampagne.gewonnen else ""]
kamp_meldung.text = "\n".join(Kampagne.meldungen) if not Kampagne.meldungen.is_empty() \
else "Wähle einen Hafen. Geschlagene Kapitäne kommen stärker zurück."
for c in beute_row.get_children():
beute_row.remove_child(c)
c.queue_free()
if Kampagne.beute_offen:
beute_row.add_child(_text("Beute für die nächste Partie:", 14, Color(1.0, 0.82, 0.32)))
for b in BoosterDB.ALL:
var btn := Button.new()
btn.text = String(b.name)
btn.tooltip_text = String(b.desc)
btn.toggle_mode = true
btn.button_pressed = Kampagne.beute == String(b.id)
btn.pressed.connect(func() -> void:
Kampagne.beute = String(b.id)
Kampagne.speichern()
_karte_fuellen())
beute_row.add_child(btn)
elif Kampagne.beute != "":
beute_row.add_child(_text("Beute an Bord: %s" % BoosterDB.get_booster(Kampagne.beute).name, 14,
Color(1.0, 0.82, 0.32)))
for c in karte.get_children():
if c is Button:
karte.remove_child(c)
@@ -168,11 +215,13 @@ func _karte_fuellen() -> void:
b.text = "%s\nauf See · zurück in %d" % [k.name, weg]
b.disabled = true
else:
b.text = "%s\n%s · %d" % [k.name, ["leicht", "normal", "schwer"][int(k.stufe)], int(round(k.elo))]
b.text = "%s · %s\n%s · %d · Chance %d %%" % [k.name, k.wesen,
["leicht", "normal", "schwer"][int(k.stufe)], int(round(k.elo)),
int(round(Kampagne.siegchance(k) * 100.0))]
b.pressed.connect(_on_kapitaen.bind(String(k.name)))
b.custom_minimum_size = Vector2(170, 52)
b.custom_minimum_size = Vector2(190, 52)
var p: Vector2 = k.pos
b.position = Vector2(p.x * groesse.x - 85, p.y * groesse.y + 4)
b.position = Vector2(p.x * groesse.x - 95, p.y * groesse.y + 4)
karte.add_child(b)