update
This commit is contained in:
@@ -24,7 +24,8 @@ var progress: Dictionary = {} # human_id -> 0..100
|
||||
var cooldown: Dictionary = {} # tech_id -> Restsekunden
|
||||
var systeme: Dictionary = {} # human_id -> {slot -> {tech, guete}}
|
||||
var erkannt_slots: Dictionary = {} # human_id -> {slot -> true}
|
||||
var beobachtung: Dictionary = {} # "human:slot" -> Sekunden
|
||||
var gesehen: Dictionary = {} # human_id -> {slot -> true}, wo man dabei war
|
||||
var notiz_sperre: float = 0.0 # nach einem Fehlgriff kurz gesperrt
|
||||
var completed: Array = []
|
||||
var time_h: float = 7.0
|
||||
var day: int = 1
|
||||
@@ -55,6 +56,8 @@ func _setup_input() -> void:
|
||||
"steigen": [KEY_SPACE],
|
||||
"sinken": [KEY_SHIFT],
|
||||
"interagieren": [KEY_E],
|
||||
"folgen": [KEY_F],
|
||||
"notieren": [KEY_R],
|
||||
"journal": [KEY_J, KEY_TAB],
|
||||
"tempo_1": [KEY_1, KEY_KP_1],
|
||||
"tempo_2": [KEY_2, KEY_KP_2],
|
||||
@@ -305,7 +308,7 @@ func _insel_waechst() -> void:
|
||||
const BASIS_TEMPO := 45.0 # Prozent je Tag, wenn nichts mehr bremst
|
||||
const GUETE_ERSATZ := 1.35 # Blocker mit gleicher Belohnung ersetzt
|
||||
const GUETE_NEU := 1.0 # System in einen freien Slot gesetzt
|
||||
const ERKENNEN_SEK := 3.0 # so lange muss man dabeistehen
|
||||
const NOTIZ_SPERRE := 6.0 # nach einem Fehlgriff schaut man erst wieder hin
|
||||
|
||||
|
||||
func slots(human_id: String) -> Array:
|
||||
@@ -313,6 +316,34 @@ func slots(human_id: String) -> Array:
|
||||
return h["routine"] if h.has("routine") else []
|
||||
|
||||
|
||||
## Welcher Slot deckt diese Stunde ab? Jeder Tag ist gleich, es gibt keine
|
||||
## Wochentage -- der Ablauf 0-23 Uhr wiederholt sich.
|
||||
func slot_bei_stunde(human_id: String, stunde: int) -> int:
|
||||
var r := slots(human_id)
|
||||
if r.is_empty():
|
||||
return -1
|
||||
var nr := r.size() - 1
|
||||
for i in range(r.size()):
|
||||
if float(stunde) >= float(r[i][0]):
|
||||
nr = i
|
||||
return nr
|
||||
|
||||
|
||||
## Dabeigewesen: die Stunde ist im Ablauf nicht mehr leer. Was dort schiefläuft,
|
||||
## steht damit noch nicht fest -- das muss der Spieler benennen.
|
||||
func gesehen_slot(human_id: String, nr: int) -> bool:
|
||||
return gesehen.get(human_id, {}).has(nr)
|
||||
|
||||
|
||||
func sehen(human_id: String, nr: int) -> void:
|
||||
if gesehen_slot(human_id, nr):
|
||||
return
|
||||
if not gesehen.has(human_id):
|
||||
gesehen[human_id] = {}
|
||||
gesehen[human_id][nr] = true
|
||||
state_changed.emit()
|
||||
|
||||
|
||||
func slot_grund(human_id: String, nr: int) -> String:
|
||||
var r := slots(human_id)
|
||||
return str(r[nr][2]) if nr >= 0 and nr < r.size() else ""
|
||||
@@ -339,23 +370,30 @@ func erkannt(human_id: String, nr: int) -> bool:
|
||||
return erkannt_slots.get(human_id, {}).has(nr)
|
||||
|
||||
|
||||
## Dabeistehen deckt auf, was dort wirklich läuft -- und damit die Ursache.
|
||||
func beobachten(human_id: String, nr: int, delta: float) -> bool:
|
||||
## Zusehen allein deckt nichts auf. Der Spieler muss den Moment benennen:
|
||||
## "hier läuft etwas schief". Trifft er, steht die Ursache im Journal.
|
||||
## Greift er daneben, schaut er eine Weile umsonst hin.
|
||||
## Grundlage bleibt awareness training -- nur ist das Bemerken jetzt ein Akt.
|
||||
func notieren(human_id: String, nr: int) -> String:
|
||||
if notiz_sperre > 0.0:
|
||||
return "gesperrt"
|
||||
var grund := slot_grund(human_id, nr)
|
||||
if not Ursachen.ist_blocker(grund):
|
||||
notiz_sperre = NOTIZ_SPERRE
|
||||
notified.emit("Hier läuft nichts schief — %s ist einfach ihr Tag." %
|
||||
Orte.text(grund), Color(1, 0.75, 0.55))
|
||||
return "daneben"
|
||||
if erkannt(human_id, nr):
|
||||
return false
|
||||
var schluessel := "%s:%d" % [human_id, nr]
|
||||
var stand: float = float(beobachtung.get(schluessel, 0.0)) + delta
|
||||
beobachtung[schluessel] = stand
|
||||
if stand < ERKENNEN_SEK:
|
||||
return false
|
||||
notified.emit("Das hast du schon notiert: %s." % Orte.text(grund),
|
||||
Color(0.8, 0.85, 1))
|
||||
return "bekannt"
|
||||
if not erkannt_slots.has(human_id):
|
||||
erkannt_slots[human_id] = {}
|
||||
erkannt_slots[human_id][nr] = true
|
||||
var b := slot_grund(human_id, nr)
|
||||
notified.emit("Erkannt: %s — %s" % [Ursachen.BLOCKER[b]["name"],
|
||||
Ursachen.LISTE[Ursachen.ursache_von(b)]["name"]], Color(0.8, 0.95, 1))
|
||||
notified.emit("Erkannt: %s — %s" % [Ursachen.BLOCKER[grund]["name"],
|
||||
Ursachen.LISTE[Ursachen.ursache_von(grund)]["name"]], Color(0.8, 0.95, 1))
|
||||
state_changed.emit()
|
||||
return true
|
||||
return "treffer"
|
||||
|
||||
|
||||
## Eine Ursache gilt als erkannt, sobald eine ihrer Tätigkeiten aufgedeckt ist.
|
||||
|
||||
Reference in New Issue
Block a user