Files
dreamer-game/scripts/orte.gd
2026-09-16 16:15:32 +02:00

66 lines
1.8 KiB
GDScript

class_name Orte
## Gemeinsame Geometrie für beide Welten: Orte, Türen, Wege, Tätigkeiten.
static var DIR_VEC: Dictionary = {
"back": Vector3(0, 0, 1),
"forward": Vector3(0, 0, -1),
"left": Vector3(-1, 0, 0),
"right": Vector3(1, 0, 0),
"none": Vector3(0, 0, 0),
}
static var ACTIVITY_TEXT: Dictionary = {
# Erde
"schlaeft": "schläft",
"morgenroutine": "Morgenroutine",
"arbeitet": "arbeitet",
"pause": "macht Pause",
"essen": "isst",
"gruebelt": "grübelt",
"ruht": "ruht sich aus",
"angespannt": "ist angespannt",
"abendroutine": "Abendroutine",
"aufraeumen": "räumt auf",
"wartet": "wartet",
"muede": "ist müde",
"unterwegs": "geht spazieren",
"zoegert": "zögert",
# Traumwelt
"webt": "webt Traumfäden",
"sammelt": "sammelt Erinnerungen",
"sortiert": "sortiert, was verloren ging",
"beobachtet": "schaut zur Erde hinunter",
"wacht": "hält Wache am Tor",
"singt": "singt",
"wandert": "wandert über die Insel",
"traeumt": "träumt",
}
## Blocker tragen ihren Namen im Ursachen-Katalog, alles andere hier.
static func text(a: String) -> String:
if Ursachen.ist_blocker(a):
return str(Ursachen.BLOCKER[a]["name"])
return str(ACTIVITY_TEXT.get(a, a))
static func kennt(a: String) -> bool:
return ACTIVITY_TEXT.has(a) or Ursachen.ist_blocker(a)
static func center(places: Dictionary, key: String) -> Vector3:
var p: Array = places[key]["pos"]
return Vector3(p[0], 0.0, p[1])
## Punkt direkt vor der Türlücke, außerhalb des Gebäudes.
static func door(places: Dictionary, key: String) -> Vector3:
var pl: Dictionary = places[key]
var c := center(places, key)
var d: Vector3 = DIR_VEC[pl["dir"]]
if d == Vector3.ZERO:
return c
var size: Array = pl["size"]
var half: float = size[1] * 0.5 if absf(d.z) > 0.0 else size[0] * 0.5
return c + d * (half + 2.5)