update
This commit is contained in:
@@ -7,10 +7,18 @@ class_name DreamWorld
|
||||
var spawn := Vector3(0, 2.0, 20.0)
|
||||
var bewohner: Array = []
|
||||
var spieler: Node3D = null # setzt main, für den Etagenschnitt
|
||||
var nav_map: RID # Navigationsnetz über Insel, Wege und Häuser
|
||||
var _bauten: Array = []
|
||||
|
||||
var _lichter: Array = []
|
||||
var _freihalten: Array[Vector3] = []
|
||||
var _we: WorldEnvironment
|
||||
var _env: Environment
|
||||
|
||||
|
||||
## Nur die aktive Welt stellt den Himmel; zwei WorldEnvironments vertragen sich nicht.
|
||||
func aktiv_setzen(an: bool) -> void:
|
||||
_we.environment = _env if an else null
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
@@ -23,13 +31,39 @@ func _ready() -> void:
|
||||
_lichtung()
|
||||
_tor_zur_erde()
|
||||
_gruen()
|
||||
_navigation()
|
||||
_wesen()
|
||||
|
||||
|
||||
## Navigationsnetz aus den Kollisionsformen: Insel, Häuser, Bäume, Laternen.
|
||||
func _navigation() -> void:
|
||||
var region := NavigationRegion3D.new()
|
||||
add_child(region)
|
||||
var nm := NavigationMesh.new()
|
||||
nm.geometry_parsed_geometry_type = NavigationMesh.PARSED_GEOMETRY_STATIC_COLLIDERS
|
||||
nm.agent_radius = 0.4
|
||||
nm.agent_height = 1.6
|
||||
nm.agent_max_climb = 0.35
|
||||
nm.agent_max_slope = 40.0
|
||||
nm.cell_height = 0.1
|
||||
var quelle := NavigationMeshSourceGeometryData3D.new()
|
||||
NavigationServer3D.parse_source_geometry_data(nm, quelle, self)
|
||||
NavigationServer3D.bake_from_source_geometry_data(nm, quelle)
|
||||
nav_map = NavigationServer3D.map_create()
|
||||
NavigationServer3D.map_set_active(nav_map, true)
|
||||
NavigationServer3D.map_set_cell_height(nav_map, 0.1)
|
||||
region.set_navigation_map(nav_map)
|
||||
region.navigation_mesh = nm
|
||||
NavigationServer3D.map_set_use_async_iterations(nav_map, false)
|
||||
NavigationServer3D.map_force_update(nav_map)
|
||||
|
||||
|
||||
## Dämmerung: tiefes Blau oben, warmes Lavendel am Horizont, Nebel im Tal.
|
||||
func _environment() -> void:
|
||||
var we := WorldEnvironment.new()
|
||||
var env := Environment.new()
|
||||
_we = WorldEnvironment.new()
|
||||
var we := _we
|
||||
_env = Environment.new()
|
||||
var env := _env
|
||||
env.background_mode = Environment.BG_SKY
|
||||
var sky := Sky.new()
|
||||
var mat := ProceduralSkyMaterial.new()
|
||||
@@ -182,7 +216,7 @@ func _wege() -> void:
|
||||
for k in DreamDB.NETZ.knoten:
|
||||
var p: Vector3 = k
|
||||
p.y = DreamDB.hoehe_bei(p.x, p.z)
|
||||
Prims.cyl(self, p + Vector3(0, 0.04, 0), 1.3, 0.06, farbe, false)
|
||||
Prims.cyl(self, p + Vector3(0, 0.05, 0), 1.3, 0.06, farbe, false) # knapp über den Bändern
|
||||
if nr % 2 == 0 and Vector2(p.x, p.z).length() > 12.0:
|
||||
_laterne(p + Vector3(1.6, 0, 0))
|
||||
nr += 1
|
||||
@@ -212,7 +246,7 @@ func _haeuser() -> void:
|
||||
Orte.DIR_VEC[pl["dir"]], 3.4, true)
|
||||
var dach := Prims.dach(self, c, groesse, farbe)
|
||||
_bauten.append({"c": c, "size": Vector2(groesse.x, groesse.z), "hoch": groesse.y + 3.0,
|
||||
"etagen": [], "dach": [dach], "waende": [waende]})
|
||||
"teile": [dach], "waende": waende})
|
||||
Prims.label(self, c + Vector3(0, groesse.y + 4.2, 0), pl["name"], 0.6, Color(1, 0.95, 0.85))
|
||||
_einrichtung(c, groesse, farbe, key)
|
||||
|
||||
@@ -463,8 +497,17 @@ func _wesen() -> void:
|
||||
var w := Bewohner.new()
|
||||
add_child(w)
|
||||
w.boden = Callable(DreamDB, "hoehe_bei")
|
||||
w.setup(DreamDB.LIST[i], i, DreamDB.PLACES, DreamDB.NETZ, DreamDB.ANKER)
|
||||
w.nav_map = nav_map
|
||||
w.setup(DreamDB.LIST[i], i, DreamDB.PLACES)
|
||||
bewohner.append(w)
|
||||
# ansprechbar: ein Wesen flüstert, was in der Wohnung des nächsten Menschen liegt
|
||||
var n := Node3D.new()
|
||||
n.position.y = 1.0
|
||||
w.add_child(n)
|
||||
n.add_to_group("interactable")
|
||||
n.set_meta("kind", "wesen")
|
||||
n.set_meta("arg", str(i))
|
||||
n.set_meta("titel", str(DreamDB.LIST[i]["name"]))
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
|
||||
Reference in New Issue
Block a user