219 lines
11 KiB
GDScript
219 lines
11 KiB
GDScript
class_name Woerter
|
|
## Alltagswörter, mit denen jemand sich selbst beschreibt -- und was das Spiel
|
|
## daraus schließt. Vorne Wörter, die jeder an sich erkennt; hinten das Modell.
|
|
##
|
|
## Jedes Wort zieht an mehreren Stellen: Ursachen (was den Traum bremst),
|
|
## Blocker (was im Tag auftaucht), Klemmen (was in Momenten aufbricht) und
|
|
## Verhalten (wie der Mensch auf Techniken reagiert). Ein Wort kann an einer
|
|
## Stelle helfen und an einer anderen schaden -- so ist das bei Menschen.
|
|
|
|
## Die acht Verhaltenswerte, -2 bis +2:
|
|
## einrichten wie leicht ein System sich setzen lässt
|
|
## guete wie gut ein gesetztes System trägt
|
|
## abwehr wie stark die Abwehr nach einem Fehlschlag ist
|
|
## momente wie oft Momente aufbrechen
|
|
## dauer wie lange sie dauern
|
|
## tempo wie schnell der Traum von sich aus vorankommt
|
|
## sozial wie gut soziale Techniken greifen
|
|
## sichtbar wie schnell man ihm ansieht, was dahintersteckt
|
|
const VERHALTEN := ["einrichten", "guete", "abwehr", "momente", "dauer", "tempo", "sozial", "sichtbar"]
|
|
|
|
const GRUPPEN := {
|
|
"arbeit": "Arbeitsweise", "menschen": "Mit anderen", "gefuehl": "Gefühl",
|
|
"energie": "Energie", "selbst": "Selbstbild",
|
|
}
|
|
|
|
static var LISTE: Dictionary = {
|
|
# --- Arbeitsweise
|
|
"aufschiebend": {"name": "aufschiebend", "gruppe": "arbeit",
|
|
"ursachen": {"anfang": 2}, "blocker": ["putzflucht", "kaffee"], "verhalten": {"einrichten": -1}},
|
|
"perfektionistisch": {"name": "perfektionistisch", "gruppe": "arbeit",
|
|
"ursachen": {"halt": 1, "anfang": 1}, "blocker": ["perfekt"],
|
|
"probleme": {"perfektionismus": 2}, "verhalten": {"guete": 1, "abwehr": 1}},
|
|
"gruendlich": {"name": "gründlich", "gruppe": "arbeit",
|
|
"ursachen": {"anfang": 1}, "blocker": ["recherche"], "verhalten": {"guete": 1}},
|
|
"chaotisch": {"name": "chaotisch", "gruppe": "arbeit",
|
|
"ursachen": {"halt": 1}, "blocker": ["plan_neu"], "probleme": {"ueberforderung": 1},
|
|
"verhalten": {"guete": -1}},
|
|
"ordentlich": {"name": "ordentlich", "gruppe": "arbeit",
|
|
"ursachen": {"anfang": 1}, "blocker": ["liste", "mails"], "verhalten": {"guete": 1}},
|
|
"sprunghaft": {"name": "sprunghaft", "gruppe": "arbeit",
|
|
"ursachen": {"halt": 2}, "blocker": ["umschalten"], "verhalten": {"guete": -1, "momente": 1}},
|
|
"ablenkbar": {"name": "ablenkbar", "gruppe": "arbeit",
|
|
"ursachen": {"halt": 1, "zeit": 1}, "blocker": ["scrollen", "spielen"],
|
|
"probleme": {"unruhe": 1}},
|
|
"diszipliniert": {"name": "diszipliniert", "gruppe": "arbeit",
|
|
"verhalten": {"guete": 1, "einrichten": 1, "tempo": 1}},
|
|
"ehrgeizig": {"name": "ehrgeizig", "gruppe": "arbeit",
|
|
"probleme": {"stress": 1}, "verhalten": {"tempo": 1, "momente": 1}},
|
|
"bequem": {"name": "bequem", "gruppe": "arbeit",
|
|
"ursachen": {"kraft": 1, "anfang": 1}, "blocker": ["doesen", "bestellen"]},
|
|
"zielstrebig": {"name": "zielstrebig", "gruppe": "arbeit",
|
|
"verhalten": {"tempo": 1, "einrichten": 1}},
|
|
"unentschlossen": {"name": "unentschlossen", "gruppe": "arbeit",
|
|
"ursachen": {"anfang": 1}, "blocker": ["liste", "plan_neu"], "probleme": {"ueberforderung": 1}},
|
|
"ungeduldig": {"name": "ungeduldig", "gruppe": "arbeit",
|
|
"probleme": {"stress": 1}, "verhalten": {"abwehr": 1, "dauer": -1}},
|
|
"geduldig": {"name": "geduldig", "gruppe": "arbeit",
|
|
"verhalten": {"abwehr": -1, "dauer": 1}},
|
|
"neugierig": {"name": "neugierig", "gruppe": "arbeit",
|
|
"blocker": ["recherche", "umschalten"], "verhalten": {"einrichten": 1}},
|
|
"verbissen": {"name": "verbissen", "gruppe": "arbeit",
|
|
"probleme": {"stress": 1}, "verhalten": {"abwehr": 1, "tempo": 1}},
|
|
"spontan": {"name": "spontan", "gruppe": "arbeit",
|
|
"ursachen": {"halt": 1}, "verhalten": {"momente": 1}},
|
|
"pflichtbewusst": {"name": "pflichtbewusst", "gruppe": "arbeit",
|
|
"ursachen": {"zeit": 1}, "blocker": ["ueberstunden", "jasagen"], "verhalten": {"guete": 1}},
|
|
# --- Mit anderen
|
|
"gesellig": {"name": "gesellig", "gruppe": "menschen",
|
|
"ursachen": {"zeit": 1}, "verhalten": {"sozial": 1, "sichtbar": 1}},
|
|
"zurueckgezogen": {"name": "zurückgezogen", "gruppe": "menschen",
|
|
"blocker": ["absage"], "probleme": {"einsamkeit": 2}, "verhalten": {"sozial": -1, "sichtbar": -1}},
|
|
"hilfsbereit": {"name": "hilfsbereit", "gruppe": "menschen",
|
|
"ursachen": {"zeit": 2}, "blocker": ["jasagen"], "verhalten": {"sozial": 1}},
|
|
"konfliktscheu": {"name": "konfliktscheu", "gruppe": "menschen",
|
|
"ursachen": {"zeit": 1}, "blocker": ["jasagen"], "probleme": {"angst": 1},
|
|
"verhalten": {"abwehr": -1}},
|
|
"stur": {"name": "stur", "gruppe": "menschen",
|
|
"verhalten": {"abwehr": 2, "einrichten": -1}},
|
|
"nachgiebig": {"name": "nachgiebig", "gruppe": "menschen",
|
|
"ursachen": {"zeit": 1}, "verhalten": {"abwehr": -1, "einrichten": 1}},
|
|
"misstrauisch": {"name": "misstrauisch", "gruppe": "menschen",
|
|
"verhalten": {"einrichten": -1, "sozial": -1, "sichtbar": -1}},
|
|
"vertrauensvoll": {"name": "vertrauensvoll", "gruppe": "menschen",
|
|
"verhalten": {"einrichten": 1, "sozial": 1}},
|
|
"harmoniebeduerftig": {"name": "harmoniebedürftig", "gruppe": "menschen",
|
|
"ursachen": {"zeit": 1}, "blocker": ["jasagen"], "verhalten": {"abwehr": -1}},
|
|
"eigenbroetlerisch": {"name": "eigenbrötlerisch", "gruppe": "menschen",
|
|
"probleme": {"einsamkeit": 1}, "verhalten": {"sozial": -1}},
|
|
"redselig": {"name": "redselig", "gruppe": "menschen",
|
|
"blocker": ["klagen"], "verhalten": {"sichtbar": 1, "sozial": 1}},
|
|
"verschlossen": {"name": "verschlossen", "gruppe": "menschen",
|
|
"probleme": {"einsamkeit": 1}, "verhalten": {"sichtbar": -2}},
|
|
# --- Gefühl
|
|
"aengstlich": {"name": "ängstlich", "gruppe": "gefuehl",
|
|
"blocker": ["nachrichten"], "probleme": {"angst": 2}, "verhalten": {"momente": 1}},
|
|
"gelassen": {"name": "gelassen", "gruppe": "gefuehl",
|
|
"verhalten": {"momente": -1, "dauer": -1}},
|
|
"gruebelnd": {"name": "grüblerisch", "gruppe": "gefuehl",
|
|
"ursachen": {"grund": 1}, "blocker": ["waelzen"], "probleme": {"selbstzweifel": 1}},
|
|
"reizbar": {"name": "reizbar", "gruppe": "gefuehl",
|
|
"probleme": {"stress": 1}, "verhalten": {"momente": 1, "abwehr": 1}},
|
|
"optimistisch": {"name": "optimistisch", "gruppe": "gefuehl",
|
|
"verhalten": {"tempo": 1, "dauer": -1}},
|
|
"pessimistisch": {"name": "pessimistisch", "gruppe": "gefuehl",
|
|
"ursachen": {"grund": 2}, "blocker": ["klagen"], "verhalten": {"tempo": -1}},
|
|
"duennhaeutig": {"name": "dünnhäutig", "gruppe": "gefuehl",
|
|
"probleme": {"angst": 1, "selbstzweifel": 1}, "verhalten": {"dauer": 1}},
|
|
"nachtragend": {"name": "nachtragend", "gruppe": "gefuehl",
|
|
"verhalten": {"abwehr": 1}},
|
|
"heiter": {"name": "heiter", "gruppe": "gefuehl",
|
|
"verhalten": {"momente": -1}},
|
|
"schwermuetig": {"name": "schwermütig", "gruppe": "gefuehl",
|
|
"ursachen": {"grund": 1, "kraft": 1}, "probleme": {"erschoepfung": 1}, "verhalten": {"tempo": -1}},
|
|
# --- Energie
|
|
"nachtaktiv": {"name": "nachtaktiv", "gruppe": "energie",
|
|
"ursachen": {"kraft": 1}, "blocker": ["wach"], "probleme": {"erschoepfung": 1}},
|
|
"fruehaufsteher": {"name": "Frühaufsteher", "gruppe": "energie",
|
|
"verhalten": {"einrichten": 1}},
|
|
"erschoepft": {"name": "erschöpft", "gruppe": "energie",
|
|
"ursachen": {"kraft": 2}, "blocker": ["serie", "doesen"], "probleme": {"erschoepfung": 2}},
|
|
"rastlos": {"name": "rastlos", "gruppe": "energie",
|
|
"blocker": ["kuehlschrank"], "probleme": {"unruhe": 2}, "verhalten": {"momente": 1}},
|
|
"genuegsam": {"name": "genügsam", "gruppe": "energie",
|
|
"verhalten": {"dauer": -1}},
|
|
"bewegungsfaul": {"name": "bewegungsfaul", "gruppe": "energie",
|
|
"ursachen": {"kraft": 1}, "blocker": ["serie", "bestellen"]},
|
|
"sportlich": {"name": "sportlich", "gruppe": "energie",
|
|
"verhalten": {"tempo": 1, "momente": -1}},
|
|
"schlaflos": {"name": "schlaflos", "gruppe": "energie",
|
|
"ursachen": {"kraft": 1}, "blocker": ["wach", "snooze", "waelzen"], "probleme": {"erschoepfung": 1}},
|
|
# --- Selbstbild
|
|
"selbstkritisch": {"name": "selbstkritisch", "gruppe": "selbst",
|
|
"ursachen": {"grund": 1}, "probleme": {"selbstzweifel": 2}},
|
|
"selbstbewusst": {"name": "selbstbewusst", "gruppe": "selbst",
|
|
"verhalten": {"einrichten": 1, "sichtbar": 1}},
|
|
"unsicher": {"name": "unsicher", "gruppe": "selbst",
|
|
"blocker": ["recherche"], "probleme": {"selbstzweifel": 1, "angst": 1}, "verhalten": {"einrichten": -1}},
|
|
"bescheiden": {"name": "bescheiden", "gruppe": "selbst",
|
|
"verhalten": {"sozial": 1}},
|
|
"eitel": {"name": "eitel", "gruppe": "selbst",
|
|
"blocker": ["vergleichen"], "probleme": {"selbstzweifel": 1}},
|
|
"vergleichend": {"name": "vergleicht sich gern", "gruppe": "selbst",
|
|
"ursachen": {"grund": 1}, "blocker": ["vergleichen"], "probleme": {"selbstzweifel": 1}},
|
|
"hadernd": {"name": "hadert mit sich", "gruppe": "selbst",
|
|
"ursachen": {"grund": 2}, "blocker": ["waelzen"], "probleme": {"selbstzweifel": 1}},
|
|
}
|
|
|
|
const MINDESTENS := 6
|
|
const URSACHEN_MAX := 3
|
|
const PROBLEME_MAX := 2
|
|
|
|
|
|
static func name_von(key: String) -> String:
|
|
return str(LISTE[key]["name"]) if LISTE.has(key) else key
|
|
|
|
|
|
static func ids() -> Array:
|
|
return LISTE.keys()
|
|
|
|
|
|
static func in_gruppe(gruppe: String) -> Array:
|
|
var out: Array = []
|
|
for key in LISTE:
|
|
if LISTE[key]["gruppe"] == gruppe:
|
|
out.append(key)
|
|
return out
|
|
|
|
|
|
## Aus den angekreuzten Wörtern das Bild: Ursachen, Blocker, Klemmen, Verhalten.
|
|
static func profil(woerter: Array) -> Dictionary:
|
|
var ursachen: Dictionary = {}
|
|
var probleme: Dictionary = {}
|
|
var blocker: Array = []
|
|
var verhalten: Dictionary = {}
|
|
for v in VERHALTEN:
|
|
verhalten[v] = 0
|
|
for w in woerter:
|
|
if not LISTE.has(w):
|
|
continue
|
|
var e: Dictionary = LISTE[w]
|
|
for u in e.get("ursachen", {}):
|
|
ursachen[u] = int(ursachen.get(u, 0)) + int(e["ursachen"][u])
|
|
for p in e.get("probleme", {}):
|
|
probleme[p] = int(probleme.get(p, 0)) + int(e["probleme"][p])
|
|
for b in e.get("blocker", []):
|
|
if not blocker.has(b):
|
|
blocker.append(b)
|
|
for v in e.get("verhalten", {}):
|
|
verhalten[v] = int(verhalten[v]) + int(e["verhalten"][v])
|
|
for v in VERHALTEN:
|
|
verhalten[v] = clampi(int(verhalten[v]), -2, 2)
|
|
|
|
var urs := _oben(ursachen, URSACHEN_MAX, 2, Ursachen.LISTE.keys())
|
|
var prob := _oben(probleme, PROBLEME_MAX, 1, Probleme.LISTE.keys())
|
|
# Blocker müssen zu einer der Ursachen gehören, sonst passt keine Technik
|
|
var passend: Array = []
|
|
for b in blocker:
|
|
if urs.has(Ursachen.ursache_von(b)):
|
|
passend.append(b)
|
|
return {"ursachen": urs, "probleme": prob, "blocker": passend, "verhalten": verhalten}
|
|
|
|
|
|
## Die stärksten Einträge, mindestens `min`, höchstens `max`. Fehlt Gewicht,
|
|
## füllt die Reihenfolge des Katalogs auf -- niemand ist ohne Grund.
|
|
static func _oben(gewichte: Dictionary, max: int, min: int, katalog: Array) -> Array:
|
|
var keys: Array = gewichte.keys()
|
|
keys.sort_custom(func(a, b) -> bool: return int(gewichte[a]) > int(gewichte[b]))
|
|
var out: Array = []
|
|
for k in keys:
|
|
if int(gewichte[k]) <= 0 or out.size() >= max:
|
|
break
|
|
out.append(str(k))
|
|
for k in katalog:
|
|
if out.size() >= min:
|
|
break
|
|
if not out.has(str(k)):
|
|
out.append(str(k))
|
|
return out
|