update
This commit is contained in:
146
scripts/ui.gd
146
scripts/ui.gd
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user