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)