This commit is contained in:
Team3
2026-09-15 23:17:07 +02:00
parent c62c6e551f
commit f1b0f15e30
16 changed files with 1116 additions and 44 deletions

View File

@@ -685,6 +685,8 @@ func _naechster_weg() -> void:
func brett_panel() -> void:
var scroll_alt := _scroll.scroll_vertical if offen and _kind == "brett" else 0
_leeren("Schwarzes Brett")
_knopf("Aushang schreiben", func() -> void: schreiben_panel())
_trenner()
var offen_ids := Game.offene_missionen()
var gezeigt := 0
var verdeckt := 0
@@ -730,10 +732,154 @@ func aushang_panel(human_id: String) -> void:
_knopf("Mission annehmen", func() -> void:
Game.accept_mission(human_id)
brett_panel())
if bool(h.get("eigen", false)):
_knopf("Aushang abnehmen", func() -> void:
Aushaenge.loeschen(human_id)
Game.welt_erzeugen()
brett_panel())
_knopf("Zurück", func() -> void: brett_panel())
_zeigen("aushang")
# -------------------------------------------------------- Aushang schreiben
## Ein eigener Mensch: Name, Alter, Beruf, Traum, Wörter, Geschichte.
## Die Wörter sind das Einzige, was die Mechanik liest.
var _entwurf: Dictionary = {}
func schreiben_panel(entwurf: Dictionary = {}) -> void:
if not entwurf.is_empty():
_entwurf = entwurf
elif _entwurf.is_empty():
_entwurf = {"name": "", "alter": 30, "beruf": str(HumanDB.BERUFE[0]),
"traum": "", "geschichte": "", "woerter": []}
var scroll_alt := _scroll.scroll_vertical if offen and _kind == "schreiben" else 0
_leeren("Aushang schreiben")
_zeile("Name", _eingabe("name"))
_zeile("Alter", _zahl("alter", 14, 99))
_zeile("Beruf", _auswahl("beruf", HumanDB.BERUFE))
_zeile("Traum", _eingabe("traum"))
_trenner()
var w: Array = _entwurf["woerter"]
_text("[b]Wörter[/b] [color=#8e93a8]mindestens %d · %d gewählt[/color]" %
[Woerter.MINDESTENS, w.size()], 15)
for gruppe in Woerter.GRUPPEN:
_text("[color=#9fb6ff]%s[/color]" % Woerter.GRUPPEN[gruppe], 13)
_haken_raster(Woerter.in_gruppe(gruppe))
_trenner()
_text("[b]Geschichte[/b] [color=#8e93a8]was im Weg steht[/color]", 15)
_textfeld("geschichte")
_trenner()
var reihe := HBoxContainer.new()
reihe.add_theme_constant_override("separation", 8)
_content.add_child(reihe)
_reihenknopf(reihe, "Zufall", func() -> void:
schreiben_panel(HumanDB.zufallsprofil()))
_reihenknopf(reihe, "Speichern", func() -> void: _aushang_speichern())
_reihenknopf(reihe, "Zurück", func() -> void:
_entwurf = {}
brett_panel())
_zeigen("schreiben")
_scroll_wunsch = scroll_alt
_scroll_frames = 4
func _aushang_speichern() -> void:
var fehler := Aushaenge.pruefen(_entwurf)
if not fehler.is_empty():
Game.notified.emit("Aushang unvollständig: %s" % ", ".join(fehler), Color(1, 0.7, 0.5))
return
var id := Aushaenge.speichern(_entwurf)
Game.welt_erzeugen()
Game.notified.emit("Aushang hängt: %s" % _entwurf["name"], Color(0.6, 1, 0.7))
_entwurf = {}
aushang_panel(id)
# ---- Eingabehelfer
func _zeile(titel: String, widget: Control) -> void:
var hb := HBoxContainer.new()
hb.add_theme_constant_override("separation", 10)
var l := Label.new()
l.text = titel
l.custom_minimum_size.x = 90
l.add_theme_font_size_override("font_size", 15)
hb.add_child(l)
widget.size_flags_horizontal = Control.SIZE_EXPAND_FILL
hb.add_child(widget)
_content.add_child(hb)
func _eingabe(feld: String) -> LineEdit:
var e := LineEdit.new()
e.text = str(_entwurf.get(feld, ""))
e.add_theme_font_size_override("font_size", 15)
e.text_changed.connect(func(t: String) -> void: _entwurf[feld] = t)
return e
func _zahl(feld: String, von: int, bis: int) -> SpinBox:
var s := SpinBox.new()
s.min_value = von
s.max_value = bis
s.value = int(_entwurf.get(feld, von))
s.value_changed.connect(func(v: float) -> void: _entwurf[feld] = int(v))
return s
func _auswahl(feld: String, optionen: Array) -> OptionButton:
var o := OptionButton.new()
for i in range(optionen.size()):
o.add_item(str(optionen[i]), i)
if str(optionen[i]) == str(_entwurf.get(feld, "")):
o.select(i)
o.item_selected.connect(func(i: int) -> void: _entwurf[feld] = str(optionen[i]))
return o
func _textfeld(feld: String) -> TextEdit:
var t := TextEdit.new()
t.text = str(_entwurf.get(feld, ""))
t.custom_minimum_size = Vector2(0, 80)
t.wrap_mode = TextEdit.LINE_WRAPPING_BOUNDARY
t.add_theme_font_size_override("font_size", 15)
t.text_changed.connect(func() -> void: _entwurf[feld] = t.text)
_content.add_child(t)
return t
func _haken_raster(keys: Array) -> void:
var g := GridContainer.new()
g.columns = 4
g.add_theme_constant_override("h_separation", 6)
_content.add_child(g)
var gewaehlt: Array = _entwurf["woerter"]
for key in keys:
var c := CheckBox.new()
c.text = Woerter.name_von(str(key))
c.button_pressed = gewaehlt.has(key)
c.add_theme_font_size_override("font_size", 14)
c.toggled.connect(func(an: bool) -> void:
var liste: Array = _entwurf["woerter"]
if an and not liste.has(key):
liste.append(key)
elif not an:
liste.erase(key))
g.add_child(c)
func _reihenknopf(reihe: HBoxContainer, text: String, cb: Callable) -> void:
var b := Button.new()
b.text = text
b.custom_minimum_size = Vector2(0, 32)
b.size_flags_horizontal = Control.SIZE_EXPAND_FILL
b.add_theme_font_size_override("font_size", 16)
b.pressed.connect(cb)
reihe.add_child(b)
# -------------------------------------------------------- Vor Ort
## Draußen am Menschen: hier greift man in den Slot ein, der gerade läuft.