update
This commit is contained in:
189
scripts/ui.gd
189
scripts/ui.gd
@@ -12,6 +12,12 @@ var _kind := ""
|
||||
var _hud: RichTextLabel
|
||||
var _hinweis: Label
|
||||
var _log: VBoxContainer
|
||||
var _ablauf: HBoxContainer
|
||||
var _ablauf_titel: Label
|
||||
var _ablauf_jetzt: Label
|
||||
var _ablauf_grund: ColorRect
|
||||
var _zellen: Array = []
|
||||
var _ticks: Array = []
|
||||
var _dim: ColorRect
|
||||
var _panel: PanelContainer
|
||||
var _titel: Label
|
||||
@@ -47,11 +53,14 @@ func _baue_hud() -> void:
|
||||
_hud.add_theme_font_size_override("bold_font_size", 17)
|
||||
add_child(_hud)
|
||||
|
||||
_baue_ablauf()
|
||||
|
||||
var steuerung := Label.new()
|
||||
steuerung.text = "WASD Bewegen · Maus Umsehen · E Interagieren · J Journal · 1/2/3 Tempo · Esc Maus frei"
|
||||
steuerung.text = "WASD Bewegen · Maus Umsehen · E Interagieren · F Folgen · " + \
|
||||
"R Notieren · J Journal · 1/2/3 Tempo · Esc Maus frei"
|
||||
steuerung.set_anchors_preset(Control.PRESET_TOP_RIGHT)
|
||||
steuerung.position = Vector2(-640, 16)
|
||||
steuerung.size = Vector2(620, 24)
|
||||
steuerung.position = Vector2(-720, 16)
|
||||
steuerung.size = Vector2(700, 24)
|
||||
steuerung.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT
|
||||
steuerung.add_theme_font_size_override("font_size", 14)
|
||||
steuerung.add_theme_color_override("font_color", Color(1, 1, 1, 0.65))
|
||||
@@ -79,6 +88,111 @@ func _baue_hud() -> void:
|
||||
add_child(_log)
|
||||
|
||||
|
||||
## Der Tagesablauf im HUD: 24 Felder, eines je Stunde, immer sichtbar.
|
||||
const ABLAUF_X := 18.0
|
||||
const ABLAUF_Y := 126.0
|
||||
const ZELLE_BREIT := 14.0
|
||||
const ZELLE_LUECKE := 2.0
|
||||
|
||||
func _baue_ablauf() -> void:
|
||||
var breite := 24.0 * (ZELLE_BREIT + ZELLE_LUECKE) - ZELLE_LUECKE
|
||||
|
||||
_ablauf_grund = ColorRect.new()
|
||||
_ablauf_grund.color = Color(0, 0, 0, 0.42)
|
||||
_ablauf_grund.set_anchors_preset(Control.PRESET_TOP_LEFT)
|
||||
_ablauf_grund.position = Vector2(ABLAUF_X - 8.0, ABLAUF_Y - 6.0)
|
||||
_ablauf_grund.custom_minimum_size = Vector2(breite + 16.0, 88.0)
|
||||
_ablauf_grund.size = _ablauf_grund.custom_minimum_size
|
||||
_ablauf_grund.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
add_child(_ablauf_grund)
|
||||
|
||||
_ablauf_titel = Label.new()
|
||||
_ablauf_titel.set_anchors_preset(Control.PRESET_TOP_LEFT)
|
||||
_ablauf_titel.position = Vector2(ABLAUF_X, ABLAUF_Y)
|
||||
_ablauf_titel.add_theme_font_size_override("font_size", 14)
|
||||
_ablauf_titel.add_theme_color_override("font_color", Color(1, 1, 1, 0.7))
|
||||
_ablauf_titel.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
add_child(_ablauf_titel)
|
||||
|
||||
_ablauf = HBoxContainer.new()
|
||||
_ablauf.set_anchors_preset(Control.PRESET_TOP_LEFT)
|
||||
_ablauf.position = Vector2(ABLAUF_X, ABLAUF_Y + 22.0)
|
||||
_ablauf.add_theme_constant_override("separation", int(ZELLE_LUECKE))
|
||||
_ablauf.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
add_child(_ablauf)
|
||||
for stunde in range(24):
|
||||
var zelle := ColorRect.new()
|
||||
zelle.custom_minimum_size = Vector2(ZELLE_BREIT, 16)
|
||||
zelle.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
_ablauf.add_child(zelle)
|
||||
_zellen.append(zelle)
|
||||
|
||||
# Stundenmarken unter dem Streifen
|
||||
for stunde in [0, 6, 12, 18]:
|
||||
var tick := Label.new()
|
||||
tick.text = "%d" % stunde
|
||||
tick.set_anchors_preset(Control.PRESET_TOP_LEFT)
|
||||
tick.position = Vector2(ABLAUF_X + float(stunde) * (ZELLE_BREIT + ZELLE_LUECKE),
|
||||
ABLAUF_Y + 42.0)
|
||||
tick.add_theme_font_size_override("font_size", 11)
|
||||
tick.add_theme_color_override("font_color", Color(1, 1, 1, 0.45))
|
||||
tick.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
add_child(tick)
|
||||
_ticks.append(tick)
|
||||
|
||||
_ablauf_jetzt = Label.new()
|
||||
_ablauf_jetzt.set_anchors_preset(Control.PRESET_TOP_LEFT)
|
||||
_ablauf_jetzt.position = Vector2(ABLAUF_X, ABLAUF_Y + 60.0)
|
||||
_ablauf_jetzt.add_theme_font_size_override("font_size", 15)
|
||||
_ablauf_jetzt.add_theme_color_override("font_color", Color(1, 0.95, 0.8))
|
||||
_ablauf_jetzt.mouse_filter = Control.MOUSE_FILTER_IGNORE
|
||||
add_child(_ablauf_jetzt)
|
||||
|
||||
|
||||
## Farbe je Stunde: unbekannt, gesehen, ungeklärt, benannt, gebaut.
|
||||
func _ablauf_farbe(human_id: String, nr: int) -> Color:
|
||||
if not Game.gesehen_slot(human_id, nr):
|
||||
return Color(0.22, 0.23, 0.30)
|
||||
if not Game.system_in(human_id, nr).is_empty():
|
||||
return Color(0.44, 0.78, 0.50)
|
||||
var grund := Game.slot_grund(human_id, nr)
|
||||
if Ursachen.ist_blocker(grund):
|
||||
return Color(0.85, 0.66, 0.32) if not Game.erkannt(human_id, nr) \
|
||||
else Color(0.84, 0.42, 0.35)
|
||||
if grund == "schlaeft":
|
||||
return Color(0.30, 0.33, 0.44)
|
||||
return Color(0.46, 0.50, 0.62)
|
||||
|
||||
|
||||
func _ablauf_aktualisieren() -> void:
|
||||
var id := Game.active_mission
|
||||
var an := id != ""
|
||||
_ablauf.visible = an
|
||||
_ablauf_titel.visible = an
|
||||
_ablauf_jetzt.visible = an
|
||||
_ablauf_grund.visible = an
|
||||
for t in _ticks:
|
||||
(t as Label).visible = an
|
||||
if not an:
|
||||
return
|
||||
var jetzt := int(Game.time_h)
|
||||
var offen := 0
|
||||
for stunde in range(24):
|
||||
var nr := Game.slot_bei_stunde(id, stunde)
|
||||
var f := _ablauf_farbe(id, nr)
|
||||
if not Game.gesehen_slot(id, nr):
|
||||
offen += 1
|
||||
if stunde == jetzt:
|
||||
f = f.lightened(0.55)
|
||||
var zelle: ColorRect = _zellen[stunde]
|
||||
zelle.color = f
|
||||
zelle.custom_minimum_size.y = 20 if stunde == jetzt else 16
|
||||
_ablauf_titel.text = "Ihr Tag 0 – 23 Uhr%s" % \
|
||||
("" if offen == 0 else " · %d Stunden unbekannt" % offen)
|
||||
var nr_jetzt := Game.slot_bei_stunde(id, jetzt)
|
||||
_ablauf_jetzt.text = "%02d Uhr %s" % [jetzt, _stunden_text(id, nr_jetzt)]
|
||||
|
||||
|
||||
func _baue_panel() -> void:
|
||||
_dim = ColorRect.new()
|
||||
_dim.color = Color(0, 0, 0, 0.62)
|
||||
@@ -163,6 +277,7 @@ func _hud_aktualisieren() -> void:
|
||||
else:
|
||||
zeilen.append("[color=#aaaaaa]Keine Mission. Schwarzes Brett am Dorfplatz.[/color]")
|
||||
_hud.text = "\n".join(zeilen)
|
||||
_ablauf_aktualisieren()
|
||||
|
||||
|
||||
func setze_hinweis(text: String) -> void:
|
||||
@@ -381,13 +496,11 @@ func systeme_panel(human_id: String) -> void:
|
||||
_text("[b]%s[/b] — %s %s" % [Ursachen.LISTE[name]["name"],
|
||||
Ursachen.LISTE[name]["kurz"], stand], 15)
|
||||
if offene > 0:
|
||||
_text("[color=#aaaaaa]Steh dabei, wenn sie etwas tut, das du noch nicht " +
|
||||
"kennst. Dann zeigt sich, warum.[/color]", 14)
|
||||
_text("[color=#aaaaaa]Steh dabei, dann füllt sich ihr Tag. Und drücke [b]R[/b], " +
|
||||
"wenn du meinst, dass eine Stunde den Traum aufhält.[/color]", 14)
|
||||
_trenner()
|
||||
|
||||
_text("[b]Ihr Tag[/b]", 17)
|
||||
for nr in range(Game.slots(human_id).size()):
|
||||
_slot_zeile(human_id, nr)
|
||||
_tagesablauf(human_id)
|
||||
_trenner()
|
||||
_knopf("Zurück zum Journal", func() -> void: journal_panel("missionen"))
|
||||
_zeigen("systeme")
|
||||
@@ -395,27 +508,50 @@ func systeme_panel(human_id: String) -> void:
|
||||
_scroll_frames = 4
|
||||
|
||||
|
||||
func _slot_zeile(human_id: String, nr: int) -> void:
|
||||
var slot: Array = Game.slots(human_id)[nr]
|
||||
var stunde := "%02d:00" % int(slot[0])
|
||||
var grund := Game.slot_grund(human_id, nr)
|
||||
if grund == "schlaeft":
|
||||
_knopf("%s schläft" % stunde, func() -> void: pass, false)
|
||||
return
|
||||
## Der Ablauf von 0 bis 23 Uhr. Jeder Tag ist gleich -- es gibt keine
|
||||
## Wochentage. Zu Beginn ist jede Stunde leer; wer dabeisteht, füllt sie.
|
||||
func _tagesablauf(human_id: String) -> void:
|
||||
var offen := 0
|
||||
for stunde in range(24):
|
||||
if not Game.gesehen_slot(human_id, Game.slot_bei_stunde(human_id, stunde)):
|
||||
offen += 1
|
||||
_text("[b]Ihr Tag[/b] [color=#8e93a8]0 – 23 Uhr, jeden Tag derselbe%s[/color]" %
|
||||
("" if offen == 0 else " · %d Stunden noch leer" % offen), 17)
|
||||
|
||||
# eine Zeile je Abschnitt des Tages -- auch wenn noch keiner bekannt ist,
|
||||
# steht der Tag vollständig da
|
||||
var von := 0
|
||||
while von < 24:
|
||||
var nr := Game.slot_bei_stunde(human_id, von)
|
||||
var bis := von
|
||||
while bis + 1 < 24 and Game.slot_bei_stunde(human_id, bis + 1) == nr:
|
||||
bis += 1
|
||||
_stunden_zeile(human_id, nr, von, bis, _stunden_text(human_id, nr))
|
||||
von = bis + 1
|
||||
|
||||
|
||||
func _stunden_text(human_id: String, nr: int) -> String:
|
||||
if not Game.gesehen_slot(human_id, nr):
|
||||
return "—"
|
||||
var sys := Game.system_in(human_id, nr)
|
||||
if not sys.is_empty():
|
||||
_knopf("%s %s ← %s" % [stunde, Game.slot_aktivitaet(human_id, nr),
|
||||
TechDB.by_id(str(sys["tech"]))["name"]],
|
||||
func() -> void: slot_panel(human_id, nr))
|
||||
return
|
||||
return "%s ← %s" % [Game.slot_aktivitaet(human_id, nr),
|
||||
TechDB.by_id(str(sys["tech"]))["name"]]
|
||||
var grund := Game.slot_grund(human_id, nr)
|
||||
if not Game.erkannt(human_id, nr):
|
||||
_knopf("%s ?" % stunde, func() -> void: pass, false)
|
||||
return
|
||||
var text := Orte.text(grund)
|
||||
return "?"
|
||||
if Ursachen.ist_blocker(grund):
|
||||
text = "%s (%s)" % [Ursachen.BLOCKER[grund]["name"],
|
||||
return "%s (%s)" % [Ursachen.BLOCKER[grund]["name"],
|
||||
Ursachen.LISTE[Ursachen.BLOCKER[grund]["ursache"]]["name"]]
|
||||
_knopf("%s %s" % [stunde, text], func() -> void: slot_panel(human_id, nr))
|
||||
return Orte.text(grund)
|
||||
|
||||
|
||||
func _stunden_zeile(human_id: String, nr: int, von: int, bis: int, text: String) -> void:
|
||||
var spanne := "%02d – %02d" % [von, bis + 1 if bis < 23 else 24]
|
||||
var offen: bool = Game.gesehen_slot(human_id, nr) and Game.erkannt(human_id, nr) \
|
||||
and Game.slot_grund(human_id, nr) != "schlaeft"
|
||||
_knopf("%s %s" % [spanne, text],
|
||||
func() -> void: slot_panel(human_id, nr), offen)
|
||||
|
||||
|
||||
## Was soll in diesem Slot stehen?
|
||||
@@ -580,8 +716,9 @@ func anwenden_panel(mensch: Node3D) -> void:
|
||||
return
|
||||
var grund := Game.slot_grund(id, nr)
|
||||
if not Game.erkannt(id, nr):
|
||||
_text("[color=#ffcc66]Was hier läuft, hast du noch nicht gesehen. " +
|
||||
"Bleib stehen und schau zu.[/color]", 16)
|
||||
_text("[color=#ffcc66]Was hier läuft, hast du noch nicht notiert. " +
|
||||
"Sieh ihr zu und drücke [b]R[/b], wenn du meinst, hier läuft etwas " +
|
||||
"schief.[/color]", 16)
|
||||
_zeigen("anwenden")
|
||||
return
|
||||
if Ursachen.ist_blocker(grund):
|
||||
|
||||
Reference in New Issue
Block a user