update
This commit is contained in:
@@ -140,7 +140,8 @@ static func treppen_decke(places: Dictionary, key: String) -> Array:
|
||||
var halb_a := float(r["halb_a"])
|
||||
var out: Array = []
|
||||
# Hauptplatte: alles außer dem Streifen an der Treppenwand
|
||||
out.append([c - n * (TREPPE_TIEFE * 0.5), _xz(a, halb_a * 2.0, halb_n * 2.0 - TREPPE_TIEFE)])
|
||||
if halb_n * 2.0 - TREPPE_TIEFE > 0.2:
|
||||
out.append([c - n * (TREPPE_TIEFE * 0.5), _xz(a, halb_a * 2.0, halb_n * 2.0 - TREPPE_TIEFE)])
|
||||
# Rest des Streifens jenseits des Lochs
|
||||
var ende: float = _podest_a(r, 1) - PODEST
|
||||
var rest := ende + halb_a
|
||||
@@ -176,6 +177,53 @@ static func innen_tuer(places: Dictionary, key: String) -> Vector3:
|
||||
return c + d * (halb - 1.2)
|
||||
|
||||
|
||||
## Ort, in dessen Grundriss der Punkt liegt -- oder "".
|
||||
static func ort_bei(places: Dictionary, p: Vector3) -> String:
|
||||
for key in places:
|
||||
var s: Array = places[key]["size"]
|
||||
if float(s[0]) <= 0.0:
|
||||
continue
|
||||
var c := center(places, key)
|
||||
if absf(p.x - c.x) <= float(s[0]) * 0.5 and absf(p.z - c.z) <= float(s[1]) * 0.5:
|
||||
return key
|
||||
return ""
|
||||
|
||||
|
||||
## Weg für einen Körper von einem freien Punkt zu einem Menschen: aus dem
|
||||
## eigenen Haus heraus, über das Netz, durch seine Tür und in seine Etage.
|
||||
static func route_zu(places: Dictionary, netz: Netz, von: Vector3, nach: Vector3,
|
||||
nach_ort: String, nach_etage: int) -> Array:
|
||||
var pts: Array = []
|
||||
var start := von
|
||||
var von_ort := ort_bei(places, von)
|
||||
if von_ort != "" and gebaeude(places, von_ort):
|
||||
var e := int(round(von.y / ETAGE))
|
||||
if e > 0:
|
||||
pts.append(treppe(places, von_ort, e))
|
||||
pts.append_array(treppen_weg(places, von_ort, e, 0))
|
||||
pts.append(innen_tuer(places, von_ort))
|
||||
start = door(places, von_ort)
|
||||
pts.append(start)
|
||||
var drin := nach_ort != "" and gebaeude(places, nach_ort)
|
||||
var ende := door(places, nach_ort) if drin else nach
|
||||
if netz != null:
|
||||
var a: int = int(netz.andocken(start)["knoten"])
|
||||
var b: int = int(netz.andocken(ende)["knoten"])
|
||||
for idx in netz.pfad(a, b):
|
||||
pts.append(netz.knoten[idx])
|
||||
if drin:
|
||||
pts.append(door(places, nach_ort))
|
||||
pts.append(innen_tuer(places, nach_ort))
|
||||
if nach_etage > 0:
|
||||
pts.append(treppe(places, nach_ort, 0))
|
||||
pts.append_array(treppen_weg(places, nach_ort, 0, nach_etage))
|
||||
var ziel := nach
|
||||
if drin:
|
||||
ziel.y = hoehe(nach_etage)
|
||||
pts.append(ziel)
|
||||
return pts
|
||||
|
||||
|
||||
## Ein Ort ist ein Gebäude, wenn er Grundriss und Tür hat.
|
||||
static func gebaeude(places: Dictionary, key: String) -> bool:
|
||||
return places.has(key) and float(places[key]["size"][0]) > 0.0 \
|
||||
|
||||
Reference in New Issue
Block a user