class_name HumanDB ## Orte der Kleinstadt und die Menschen mit ihren Tagesabläufen. ## Gebäude liegen im Ring um den Park. Alle Türen zeigen zur Mitte. ## pos = Standplatz drinnen, size = Grundfläche, dir = Richtung der Türlücke. static var PLACES: Dictionary = { "uni": { "name": "Hochschule", "pos": [-28.0, -27.0], "size": [14.0, 10.0], "dir": "back", "color": Color(0.72, 0.70, 0.66), }, "cafe": { "name": "Café Nadel", "pos": [0.0, -27.0], "size": [12.0, 10.0], "dir": "back", "color": Color(0.82, 0.62, 0.45), }, "buero": { "name": "Büro Ostwind", "pos": [28.0, -27.0], "size": [14.0, 10.0], "dir": "back", "color": Color(0.62, 0.66, 0.72), }, "baeckerei": { "name": "Bäckerei Keller", "pos": [-31.0, 0.0], "size": [10.0, 12.0], "dir": "right", "color": Color(0.85, 0.72, 0.50), }, "haus_tobias": { "name": "Wohnung Frank", "pos": [31.0, 0.0], "size": [10.0, 12.0], "dir": "left", "color": Color(0.70, 0.58, 0.55), }, "haus_lena": { "name": "Atelier Vogt", "pos": [-28.0, 27.0], "size": [12.0, 10.0], "dir": "forward", "color": Color(0.66, 0.58, 0.72), }, "haus_mira": { "name": "Wohnheim", "pos": [0.0, 27.0], "size": [12.0, 10.0], "dir": "forward", "color": Color(0.60, 0.68, 0.62), }, "haus_bruno": { "name": "Haus Keller", "pos": [28.0, 27.0], "size": [12.0, 10.0], "dir": "forward", "color": Color(0.78, 0.66, 0.58), }, "park": { "name": "Stadtpark", "pos": [0.0, 4.0], "size": [0.0, 0.0], "dir": "none", "color": Color(0.45, 0.65, 0.38), }, } 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 = { "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", } static var LIST: Array = [ { "id": "lena", "name": "Lena Vogt", "alter": 29, "beruf": "Illustratorin", "traum": "Ihr Bilderbuch endlich zu Ende zeichnen.", "problem": "Sie schiebt die letzten zwölf Seiten seit acht Monaten vor sich her. Jeder Entwurf kommt ihr zu schlecht vor, also fängt sie lieber gar nicht erst an.", "tags": ["prokrastination", "selbstzweifel", "ablenkung"], "farbe": Color(0.85, 0.45, 0.55), "routine": [ [0, "haus_lena", "schlaeft"], [7, "haus_lena", "morgenroutine"], [8, "cafe", "essen"], [10, "haus_lena", "zoegert"], [12, "haus_lena", "arbeitet"], [13, "park", "pause"], [15, "haus_lena", "arbeitet"], [18, "park", "unterwegs"], [20, "haus_lena", "aufraeumen"], [21, "haus_lena", "gruebelt"], [22, "haus_lena", "abendroutine"], [23, "haus_lena", "schlaeft"], ], }, { "id": "bruno", "name": "Bruno Keller", "alter": 54, "beruf": "Bäcker", "traum": "Wieder Klavier spielen wie mit zwanzig.", "problem": "Das Klavier steht zugestellt im Flur. Nach der Frühschicht ist er zu müde, um auch nur den Deckel zu öffnen.", "tags": ["gewohnheit", "erschoepfung", "ablenkung"], "farbe": Color(0.55, 0.45, 0.30), "routine": [ [0, "haus_bruno", "schlaeft"], [3, "baeckerei", "arbeitet"], [10, "cafe", "pause"], [12, "haus_bruno", "essen"], [13, "haus_bruno", "ruht"], [15, "haus_bruno", "zoegert"], [16, "park", "unterwegs"], [18, "haus_bruno", "muede"], [20, "haus_bruno", "abendroutine"], [21, "haus_bruno", "schlaeft"], ], }, { "id": "mira", "name": "Mira Sahin", "alter": 22, "beruf": "Studentin", "traum": "Ihre Abschlussarbeit vortragen, ohne zu erstarren.", "problem": "Die Arbeit ist längst fertig. Aber vor jedem Vortrag wird ihr schwarz vor Augen, und sie meldet sich wieder ab.", "tags": ["angst", "ueberforderung", "selbstzweifel"], "farbe": Color(0.35, 0.60, 0.85), "routine": [ [0, "haus_mira", "schlaeft"], [8, "haus_mira", "morgenroutine"], [9, "uni", "arbeitet"], [13, "cafe", "angespannt"], [15, "uni", "arbeitet"], [17, "uni", "wartet"], [18, "haus_mira", "gruebelt"], [20, "park", "unterwegs"], [21, "haus_mira", "ruht"], [22, "haus_mira", "abendroutine"], [23, "haus_mira", "schlaeft"], ], }, { "id": "tobias", "name": "Tobias Frank", "alter": 41, "beruf": "Sachbearbeiter", "traum": "Abends wieder Zeit für seine Tochter haben.", "problem": "Er sagt zu jeder Bitte ja und sitzt dafür jeden Abend bis acht im Büro. Zu Hause ist er nur noch müde.", "tags": ["stress", "grenzen", "erschoepfung"], "farbe": Color(0.40, 0.55, 0.45), "routine": [ [0, "haus_tobias", "schlaeft"], [6, "haus_tobias", "morgenroutine"], [7, "buero", "arbeitet"], [12, "cafe", "essen"], [14, "buero", "arbeitet"], [19, "buero", "angespannt"], [20, "haus_tobias", "essen"], [21, "haus_tobias", "muede"], [23, "haus_tobias", "abendroutine"], ], }, ] static func by_id(id: String) -> Dictionary: for h in LIST: if h["id"] == id: return h return {} static func place_center(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 place_door(key: String) -> Vector3: var pl: Dictionary = PLACES[key] var c := place_center(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) ## Route von Ort a nach Ort b: aus der Tür, über den Platz, zur neuen Tür, hinein. static func route(a: String, b: String, offset: Vector3) -> Array: var pts: Array = [] if a == b: return pts var da := place_door(a) var db := place_door(b) pts.append(da) if da.length() > 17.0: pts.append(da.normalized() * 15.0) if db.length() > 17.0: pts.append(db.normalized() * 15.0) pts.append(db) pts.append(place_center(b) + offset) return pts static func activity_text(a: String) -> String: return ACTIVITY_TEXT.get(a, a)