diff --git a/main.tscn b/main.tscn index 92c8131..7c738fb 100755 --- a/main.tscn +++ b/main.tscn @@ -232,7 +232,7 @@ poi_name = "Ort 5" marker_color = Color(0.2, 0.5, 1, 1) [node name="Ort6" parent="." instance=ExtResource("5_lquwl") groups=["region1_pois"]] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 38.1, -4.471, 22.0) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 28.37, -3.1, 22.17) poi_name = "Ort 6" marker_color = Color(0.7, 0.3, 0.9, 1) diff --git a/terrain.gd b/terrain.gd index 4ede1e6..728950c 100644 --- a/terrain.gd +++ b/terrain.gd @@ -47,6 +47,7 @@ func _ready() -> void: _build_crown() _build_pavilion() _build_region_borders() + _build_edge_barrier() func _hex_angle(k: int) -> float: return deg_to_rad(angle_offset_deg) + float(k) / 6.0 * TAU @@ -220,3 +221,35 @@ func _spawn_border_prop(parent: Node3D, kind: Dictionary, pos: Vector3) -> void: inst.add_child(cs) parent.add_child(inst) + +# ═══════════════════════════════════════════════ +# RAND-BARRIERE — unsichtbare Wand entlang der Rundiste, damit man +# an der Außenkante der Insel nicht in den Pavillon (rein optisch, +# ohne Kollision) hinunterfällt. +# ═══════════════════════════════════════════════ +func _build_edge_barrier() -> void: + var barrier := StaticBody3D.new() + barrier.name = "EdgeBarrier" + add_child(barrier) + + var girdle_pts: Array[Vector3] = [] + for k in range(6): + var a := _hex_angle(k) + girdle_pts.append(Vector3(cos(a) * girdle_radius, -crown_drop, sin(a) * girdle_radius)) + + for k in range(6): + var k1 := (k + 1) % 6 + var p0 := girdle_pts[k] + var p1 := girdle_pts[k1] + var length := p0.distance_to(p1) + var dir := (p1 - p0) / length + var mid := (p0 + p1) * 0.5 + + var box := BoxShape3D.new() + box.size = Vector3(1.0, 6.0, length) + + var cs := CollisionShape3D.new() + cs.shape = box + cs.position = mid + Vector3(0.0, 1.0, 0.0) + cs.rotation.y = atan2(dir.x, dir.z) + barrier.add_child(cs)