Files
dreamer-game/scripts/ursachen.gd
2026-09-15 23:17:07 +02:00

176 lines
5.8 KiB
GDScript

class_name Ursachen
## Woran ein Traum scheitert, und was im Tag davon zu sehen ist.
##
## Ein Traum hat eine Grundrate. Jede ungelöste Ursache bremst sie. Zwei
## ungelöste Ursachen bremsen doppelt -- deshalb lohnt es, alle zu finden.
## Sichtbar wird eine Ursache nur an den Tätigkeiten, die sie hervorbringt:
## wer nie in Gang kommt, räumt auf, recherchiert und schreibt Listen.
##
## Grundlage: Habit Reversal Training beginnt mit awareness training -- erst
## bemerken, dann ersetzen. Und Duhiggs goldene Regel: Auslöser und Belohnung
## bleiben, nur die Handlung dazwischen wird getauscht.
static var LISTE: Dictionary = {
"anfang": {
"name": "Kein Anfang", "kurz": "kommt nie in Gang",
"faktor": 0.30,
},
"zeit": {
"name": "Keine Zeit", "kurz": "der Tag ist voll",
"faktor": 0.30,
},
"kraft": {
"name": "Keine Kraft", "kurz": "abends ist nichts mehr übrig",
"faktor": 0.40,
},
"halt": {
"name": "Kein Halt", "kurz": "fängt an und hört wieder auf",
"faktor": 0.50,
},
"grund": {
"name": "Kein Grund", "kurz": "glaubt nicht mehr daran",
"faktor": 0.40,
},
}
## Tätigkeiten, die einen Traum aufhalten. Jede hat einen Auslöser und eine
## Belohnung -- genau die muss eine Ersatzhandlung wieder liefern.
## zeit: wann im Tag die Tätigkeit auftaucht.
static var BLOCKER: Dictionary = {
"putzflucht": {
"name": "räumt auf statt anzufangen", "ausloeser": "eine große Aufgabe",
"belohnung": "erfolg", "ursache": "anfang", "zeit": "tag",
},
"recherche": {
"name": "recherchiert statt anzufangen", "ausloeser": "Unsicherheit",
"belohnung": "erfolg", "ursache": "anfang", "zeit": "tag",
},
"liste": {
"name": "schreibt eine Später-Liste", "ausloeser": "Überforderung",
"belohnung": "ordnung", "ursache": "anfang", "zeit": "morgen",
},
"jasagen": {
"name": "sagt zu allem ja", "ausloeser": "eine fremde Bitte",
"belohnung": "anerkennung", "ursache": "zeit", "zeit": "tag",
},
"scrollen": {
"name": "scrollt endlos", "ausloeser": "Leerlauf",
"belohnung": "ablenkung", "ursache": "zeit", "zeit": "tag",
},
"serie": {
"name": "schaut eine Serie", "ausloeser": "Erschöpfung",
"belohnung": "abschalten", "ursache": "kraft", "zeit": "abend",
},
"wach": {
"name": "bleibt wach", "ausloeser": "ein fremdbestimmter Tag",
"belohnung": "zeit_fuer_sich", "ursache": "kraft", "zeit": "nacht",
},
"kuehlschrank": {
"name": "steht am Kühlschrank", "ausloeser": "Langeweile",
"belohnung": "unterbrechung", "ursache": "kraft", "zeit": "abend",
},
"spielen": {
"name": "spielt noch eine Runde", "ausloeser": "Anspannung",
"belohnung": "erfolg", "ursache": "halt", "zeit": "abend",
},
"umschalten": {
"name": "schaltet auf etwas anderes um", "ausloeser": "Widerstand",
"belohnung": "neuheit", "ursache": "halt", "zeit": "tag",
},
"klagen": {
"name": "klagt am Telefon", "ausloeser": "Frust",
"belohnung": "verbundenheit", "ursache": "grund", "zeit": "abend",
},
"vergleichen": {
"name": "vergleicht sich mit anderen", "ausloeser": "ein fremder Erfolg",
"belohnung": "einordnung", "ursache": "grund", "zeit": "morgen",
},
"mails": {
"name": "räumt das Postfach auf", "ausloeser": "Leerlauf",
"belohnung": "ordnung", "ursache": "anfang", "zeit": "morgen",
},
"kaffee": {
"name": "holt noch einen Kaffee", "ausloeser": "Unlust",
"belohnung": "unterbrechung", "ursache": "anfang", "zeit": "tag",
},
"perfekt": {
"name": "feilt am Detail statt abzugeben", "ausloeser": "Angst vor dem Urteil",
"belohnung": "ordnung", "ursache": "halt", "zeit": "tag",
},
"plan_neu": {
"name": "schreibt den Plan noch einmal neu", "ausloeser": "Unsicherheit",
"belohnung": "ordnung", "ursache": "halt", "zeit": "tag",
},
"snooze": {
"name": "drückt auf Schlummern", "ausloeser": "Müdigkeit",
"belohnung": "abschalten", "ursache": "kraft", "zeit": "morgen",
},
"doesen": {
"name": "döst auf dem Sofa weg", "ausloeser": "Erschöpfung",
"belohnung": "abschalten", "ursache": "kraft", "zeit": "tag",
},
"bestellen": {
"name": "bestellt statt zu kochen", "ausloeser": "ein leerer Akku",
"belohnung": "unterbrechung", "ursache": "kraft", "zeit": "abend",
},
"nachrichten": {
"name": "liest Nachrichten", "ausloeser": "Unruhe",
"belohnung": "einordnung", "ursache": "zeit", "zeit": "morgen",
},
"ueberstunden": {
"name": "bleibt länger im Büro", "ausloeser": "fremde Erwartung",
"belohnung": "anerkennung", "ursache": "zeit", "zeit": "abend",
},
"absage": {
"name": "sagt die Verabredung ab", "ausloeser": "ein voller Kopf",
"belohnung": "zeit_fuer_sich", "ursache": "grund", "zeit": "abend",
},
"waelzen": {
"name": "wälzt die Sache im Bett", "ausloeser": "Stille",
"belohnung": "einordnung", "ursache": "grund", "zeit": "nacht",
},
}
static var BELOHNUNG_TEXT: Dictionary = {
"erfolg": "ein Erfolgserlebnis",
"ordnung": "Ordnung",
"anerkennung": "Anerkennung",
"anschluss": "Anschluss",
"abschalten": "Abschalten",
"zeit_fuer_sich": "Zeit für sich",
"unterbrechung": "eine Unterbrechung",
"neuheit": "etwas Neues",
"verbundenheit": "Verbundenheit",
"einordnung": "Einordnung",
"ablenkung": "Ablenkung",
}
static func ist_blocker(activity: String) -> bool:
return BLOCKER.has(activity)
static func ursache_von(activity: String) -> String:
return str(BLOCKER[activity]["ursache"]) if BLOCKER.has(activity) else ""
static func belohnung_text(schluessel: String) -> String:
return str(BELOHNUNG_TEXT.get(schluessel, schluessel))
## Blocker einer Ursache, die in dieses Zeitfenster passen.
static func blocker_fuer(ursache: String, zeit: String) -> Array:
var out: Array = []
for id in BLOCKER:
if BLOCKER[id]["ursache"] == ursache and BLOCKER[id]["zeit"] == zeit:
out.append(id)
return out
static func alle_blocker(ursache: String) -> Array:
var out: Array = []
for id in BLOCKER:
if BLOCKER[id]["ursache"] == ursache:
out.append(id)
return out