NEON-29: Add approach treads for green, gold step, violet terrace.
TerracePlatformC_Approach (PCS_*): four cardinals, 7.2 m arms, ~0.104 m rise. TerraceStepB_Approach (TSB_*): S/E/W, 6.2×1.0 m NS treads. TerracePlatformB_Approach (TPB_*): N/E/W with six risers for 0.6 m to floor; south uses existing gold step. New ramp-tint materials. README + plan.pull/41/head
parent
bc7d318f4f
commit
103f8bbe19
|
|
@ -34,14 +34,15 @@ Elevated walkables use **distinct albedo tints** in `scenes/main.tscn` so screen
|
|||
| `ObstacleC` | `occluder` | Default gray | 2 × 4 | (5, −12) | Tall occluder, south quadrant |
|
||||
| `ObstacleD` | `occluder` | Default gray | 3 × 2 | (−8, −16) | Far-south occluder |
|
||||
| `TerracePlatformA` | `walkable` | **Teal** | 10 × 10, h=0.3 m | (13, −14) | Large SE pad; **three darker-teal approach treads per cardinal** (`TerracePlatformA_Approach` / `PAS_*`) — **1.0 m run** along the climb axis (~0.104 m rise each), wider than the **0.8 m** capsule diameter so the body is not wider than each tread |
|
||||
| `TerraceStepB` | `walkable` | **Gold** | 6 × 3, h=0.3 m | (−15, 8.5) | NW approach step; bridges floor → TerracePlatformB |
|
||||
| `TerracePlatformB` | `walkable` | **Violet** | 6 × 6, h=0.6 m | (−15, 13) | Upper NW terrace; reached via TerraceStepB |
|
||||
| `TerracePlatformC` | `walkable` | **Green** | 8 × 8, h=0.3 m | (14, 14) | NE pad; single-step ascent from floor |
|
||||
| `TerraceStepB` | `walkable` | **Gold** | 6 × 3, h=0.3 m | (−15, 8.5) | NW approach step; **`TerraceStepB_Approach`** / `TSB_*` — three treads per **S/E/W** (darker gold), **1.0 m** run on NS arms |
|
||||
| `TerracePlatformB` | `walkable` | **Violet** | 6 × 6, h=0.6 m | (−15, 13) | Upper NW terrace; **`TerracePlatformB_Approach`** / `TPB_*` — **six** treads per **N/E/W** (~0.104 m rise) for **0.6 m** to floor (**south** uses gold step, not violet treads) |
|
||||
| `TerracePlatformC` | `walkable` | **Green** | 8 × 8, h=0.3 m | (14, 14) | NE pad; **`TerracePlatformC_Approach`** / `PCS_*` — same tread pattern as teal (`PAS_*`), darker green albedo |
|
||||
|
||||
### Height variation notes
|
||||
|
||||
- **Single-step terraces (A, C):** 0.3 m rise — within `agent_max_climb = 0.35`, so the nav mesh routes directly from floor onto the pad; one click suffices. **`TerracePlatformA`** (teal) sits **12 mm** above the main floor slab and has **cardinal walkable treads** (`TerracePlatformA_Approach`) so movement does not rely on a bare vertical box lip; nav rebakes at startup.
|
||||
- **Two-level terrace B:** floor → `TerraceStepB` (**gold**, 0.3 m) → `TerracePlatformB` (**violet**, +0.3 m). **`agent_max_climb = 0.35`** applies to the nav mesh **and** to **walk step assist**: you cannot cheese the violet deck from the floor in one move — click the **gold step** (or the platform after you are already on the step), not the violet top from below.
|
||||
- **Two-level terrace B:** floor → `TerraceStepB` (**gold**, 0.3 m) → `TerracePlatformB` (**violet**, +0.3 m). **`agent_max_climb = 0.35`** applies to the nav mesh **and** to **walk step assist**: you cannot cheese the violet deck from the floor in one move — click the **gold step** (or the platform after you are already on the step), not the violet top from below. **Approach treads** on gold (**`TSB_*`**) and on violet’s **north / east / west** (**`TPB_*`**, six risers for 0.6 m) match the teal convention.
|
||||
- **QA / thin props:** **`PrototypeTerminal`**, **`MoveRejectPedestal`**, **`MoveRejectFarPad`** are unchanged (terminal kiosk, vertical reject demo, near-floor pad). Add ramps or treads later if they need full walk-up treatment.
|
||||
- **Occluders** are plain `StaticBody3D` with no `walkable` tag; the nav bake excludes their top surfaces, so they remain true obstacles for routing.
|
||||
|
||||
### Designer / QA limits
|
||||
|
|
|
|||
|
|
@ -150,6 +150,51 @@ size = Vector3(1.0, 0.104, 9.2)
|
|||
[sub_resource type="BoxShape3D" id="BoxShape3D_pa_stair_we"]
|
||||
size = Vector3(1.0, 0.104, 9.2)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="Mat_terrace_platform_c_ramp"]
|
||||
albedo_color = Color(0.12, 0.48, 0.22, 1)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_pc_stair_ns"]
|
||||
size = Vector3(7.2, 0.104, 1.0)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_pc_stair_ns"]
|
||||
size = Vector3(7.2, 0.104, 1.0)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_pc_stair_we"]
|
||||
size = Vector3(1.0, 0.104, 7.2)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_pc_stair_we"]
|
||||
size = Vector3(1.0, 0.104, 7.2)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="Mat_terrace_b_step_ramp"]
|
||||
albedo_color = Color(0.62, 0.45, 0.06, 1)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_tsb_stair_ns"]
|
||||
size = Vector3(6.2, 0.104, 1.0)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_tsb_stair_ns"]
|
||||
size = Vector3(6.2, 0.104, 1.0)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_tsb_stair_we"]
|
||||
size = Vector3(1.0, 0.104, 3.2)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_tsb_stair_we"]
|
||||
size = Vector3(1.0, 0.104, 3.2)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="Mat_terrace_platform_b_ramp"]
|
||||
albedo_color = Color(0.35, 0.18, 0.42, 1)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_tpb_stair_ns"]
|
||||
size = Vector3(6.2, 0.104, 1.0)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_tpb_stair_ns"]
|
||||
size = Vector3(6.2, 0.104, 1.0)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_tpb_stair_we"]
|
||||
size = Vector3(1.0, 0.104, 6.2)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_tpb_stair_we"]
|
||||
size = Vector3(1.0, 0.104, 6.2)
|
||||
|
||||
[node name="Main" type="Node3D" unique_id=1358372723]
|
||||
script = ExtResource("1_main")
|
||||
|
||||
|
|
@ -454,6 +499,441 @@ surface_material_override/0 = SubResource("Mat_terrace_platform_c")
|
|||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.15, 0)
|
||||
shape = SubResource("BoxShape3D_terrace_c")
|
||||
|
||||
[node name="TerracePlatformC_Approach" type="Node3D" parent="World/NavigationRegion3D" unique_id=3150000]
|
||||
|
||||
[node name="PCS_S1" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach" unique_id=3150001 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14, 0.052, 8.6)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_S1" unique_id=3150011]
|
||||
mesh = SubResource("BoxMesh_pc_stair_ns")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_c_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_S1" unique_id=3150012]
|
||||
shape = SubResource("BoxShape3D_pc_stair_ns")
|
||||
|
||||
[node name="PCS_S2" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach" unique_id=3150002 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14, 0.156, 9.05)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_S2" unique_id=3150021]
|
||||
mesh = SubResource("BoxMesh_pc_stair_ns")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_c_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_S2" unique_id=3150022]
|
||||
shape = SubResource("BoxShape3D_pc_stair_ns")
|
||||
|
||||
[node name="PCS_S3" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach" unique_id=3150003 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14, 0.26, 9.5)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_S3" unique_id=3150031]
|
||||
mesh = SubResource("BoxMesh_pc_stair_ns")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_c_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_S3" unique_id=3150032]
|
||||
shape = SubResource("BoxShape3D_pc_stair_ns")
|
||||
|
||||
[node name="PCS_N1" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach" unique_id=3150004 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14, 0.052, 19.4)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_N1" unique_id=3150041]
|
||||
mesh = SubResource("BoxMesh_pc_stair_ns")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_c_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_N1" unique_id=3150042]
|
||||
shape = SubResource("BoxShape3D_pc_stair_ns")
|
||||
|
||||
[node name="PCS_N2" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach" unique_id=3150005 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14, 0.156, 18.95)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_N2" unique_id=3150051]
|
||||
mesh = SubResource("BoxMesh_pc_stair_ns")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_c_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_N2" unique_id=3150052]
|
||||
shape = SubResource("BoxShape3D_pc_stair_ns")
|
||||
|
||||
[node name="PCS_N3" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach" unique_id=3150006 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14, 0.26, 18.5)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_N3" unique_id=3150061]
|
||||
mesh = SubResource("BoxMesh_pc_stair_ns")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_c_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_N3" unique_id=3150062]
|
||||
shape = SubResource("BoxShape3D_pc_stair_ns")
|
||||
|
||||
[node name="PCS_W1" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach" unique_id=3150007 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.5, 0.052, 14)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_W1" unique_id=3150071]
|
||||
mesh = SubResource("BoxMesh_pc_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_c_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_W1" unique_id=3150072]
|
||||
shape = SubResource("BoxShape3D_pc_stair_we")
|
||||
|
||||
[node name="PCS_W2" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach" unique_id=3150008 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.95, 0.156, 14)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_W2" unique_id=3150081]
|
||||
mesh = SubResource("BoxMesh_pc_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_c_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_W2" unique_id=3150082]
|
||||
shape = SubResource("BoxShape3D_pc_stair_we")
|
||||
|
||||
[node name="PCS_W3" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach" unique_id=3150009 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.5, 0.26, 14)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_W3" unique_id=3150091]
|
||||
mesh = SubResource("BoxMesh_pc_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_c_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_W3" unique_id=3150092]
|
||||
shape = SubResource("BoxShape3D_pc_stair_we")
|
||||
|
||||
[node name="PCS_E1" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach" unique_id=3150010 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 19.4, 0.052, 14)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_E1" unique_id=3150101]
|
||||
mesh = SubResource("BoxMesh_pc_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_c_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_E1" unique_id=3150102]
|
||||
shape = SubResource("BoxShape3D_pc_stair_we")
|
||||
|
||||
[node name="PCS_E2" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach" unique_id=3150013 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18.95, 0.156, 14)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_E2" unique_id=3150111]
|
||||
mesh = SubResource("BoxMesh_pc_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_c_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_E2" unique_id=3150112]
|
||||
shape = SubResource("BoxShape3D_pc_stair_we")
|
||||
|
||||
[node name="PCS_E3" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach" unique_id=3150014 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18.5, 0.26, 14)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_E3" unique_id=3150121]
|
||||
mesh = SubResource("BoxMesh_pc_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_c_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformC_Approach/PCS_E3" unique_id=3150122]
|
||||
shape = SubResource("BoxShape3D_pc_stair_we")
|
||||
|
||||
[node name="TerraceStepB_Approach" type="Node3D" parent="World/NavigationRegion3D" unique_id=3160000]
|
||||
|
||||
[node name="TSB_S1" type="StaticBody3D" parent="World/NavigationRegion3D/TerraceStepB_Approach" unique_id=3160001 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15, 0.052, 5.6)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerraceStepB_Approach/TSB_S1" unique_id=3160011]
|
||||
mesh = SubResource("BoxMesh_tsb_stair_ns")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_b_step_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerraceStepB_Approach/TSB_S1" unique_id=3160012]
|
||||
shape = SubResource("BoxShape3D_tsb_stair_ns")
|
||||
|
||||
[node name="TSB_S2" type="StaticBody3D" parent="World/NavigationRegion3D/TerraceStepB_Approach" unique_id=3160002 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15, 0.156, 6.05)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerraceStepB_Approach/TSB_S2" unique_id=3160021]
|
||||
mesh = SubResource("BoxMesh_tsb_stair_ns")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_b_step_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerraceStepB_Approach/TSB_S2" unique_id=3160022]
|
||||
shape = SubResource("BoxShape3D_tsb_stair_ns")
|
||||
|
||||
[node name="TSB_S3" type="StaticBody3D" parent="World/NavigationRegion3D/TerraceStepB_Approach" unique_id=3160003 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15, 0.26, 6.5)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerraceStepB_Approach/TSB_S3" unique_id=3160031]
|
||||
mesh = SubResource("BoxMesh_tsb_stair_ns")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_b_step_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerraceStepB_Approach/TSB_S3" unique_id=3160032]
|
||||
shape = SubResource("BoxShape3D_tsb_stair_ns")
|
||||
|
||||
[node name="TSB_W1" type="StaticBody3D" parent="World/NavigationRegion3D/TerraceStepB_Approach" unique_id=3160004 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -19.5, 0.052, 8.5)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerraceStepB_Approach/TSB_W1" unique_id=3160041]
|
||||
mesh = SubResource("BoxMesh_tsb_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_b_step_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerraceStepB_Approach/TSB_W1" unique_id=3160042]
|
||||
shape = SubResource("BoxShape3D_tsb_stair_we")
|
||||
|
||||
[node name="TSB_W2" type="StaticBody3D" parent="World/NavigationRegion3D/TerraceStepB_Approach" unique_id=3160005 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -19.05, 0.156, 8.5)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerraceStepB_Approach/TSB_W2" unique_id=3160051]
|
||||
mesh = SubResource("BoxMesh_tsb_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_b_step_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerraceStepB_Approach/TSB_W2" unique_id=3160052]
|
||||
shape = SubResource("BoxShape3D_tsb_stair_we")
|
||||
|
||||
[node name="TSB_W3" type="StaticBody3D" parent="World/NavigationRegion3D/TerraceStepB_Approach" unique_id=3160006 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -18.5, 0.26, 8.5)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerraceStepB_Approach/TSB_W3" unique_id=3160061]
|
||||
mesh = SubResource("BoxMesh_tsb_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_b_step_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerraceStepB_Approach/TSB_W3" unique_id=3160062]
|
||||
shape = SubResource("BoxShape3D_tsb_stair_we")
|
||||
|
||||
[node name="TSB_E1" type="StaticBody3D" parent="World/NavigationRegion3D/TerraceStepB_Approach" unique_id=3160007 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10.5, 0.052, 8.5)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerraceStepB_Approach/TSB_E1" unique_id=3160071]
|
||||
mesh = SubResource("BoxMesh_tsb_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_b_step_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerraceStepB_Approach/TSB_E1" unique_id=3160072]
|
||||
shape = SubResource("BoxShape3D_tsb_stair_we")
|
||||
|
||||
[node name="TSB_E2" type="StaticBody3D" parent="World/NavigationRegion3D/TerraceStepB_Approach" unique_id=3160008 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -11, 0.156, 8.5)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerraceStepB_Approach/TSB_E2" unique_id=3160081]
|
||||
mesh = SubResource("BoxMesh_tsb_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_b_step_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerraceStepB_Approach/TSB_E2" unique_id=3160082]
|
||||
shape = SubResource("BoxShape3D_tsb_stair_we")
|
||||
|
||||
[node name="TSB_E3" type="StaticBody3D" parent="World/NavigationRegion3D/TerraceStepB_Approach" unique_id=3160009 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -11.5, 0.26, 8.5)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerraceStepB_Approach/TSB_E3" unique_id=3160091]
|
||||
mesh = SubResource("BoxMesh_tsb_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_b_step_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerraceStepB_Approach/TSB_E3" unique_id=3160092]
|
||||
shape = SubResource("BoxShape3D_tsb_stair_we")
|
||||
|
||||
[node name="TerracePlatformB_Approach" type="Node3D" parent="World/NavigationRegion3D" unique_id=3170000]
|
||||
|
||||
[node name="TPB_N1" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach" unique_id=3170001 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15, 0.052, 18.75)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_N1" unique_id=3170011]
|
||||
mesh = SubResource("BoxMesh_tpb_stair_ns")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_b_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_N1" unique_id=3170012]
|
||||
shape = SubResource("BoxShape3D_tpb_stair_ns")
|
||||
|
||||
[node name="TPB_N2" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach" unique_id=3170002 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15, 0.156, 18.3)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_N2" unique_id=3170021]
|
||||
mesh = SubResource("BoxMesh_tpb_stair_ns")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_b_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_N2" unique_id=3170022]
|
||||
shape = SubResource("BoxShape3D_tpb_stair_ns")
|
||||
|
||||
[node name="TPB_N3" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach" unique_id=3170003 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15, 0.26, 17.85)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_N3" unique_id=3170031]
|
||||
mesh = SubResource("BoxMesh_tpb_stair_ns")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_b_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_N3" unique_id=3170032]
|
||||
shape = SubResource("BoxShape3D_tpb_stair_ns")
|
||||
|
||||
[node name="TPB_N4" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach" unique_id=3170004 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15, 0.364, 17.4)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_N4" unique_id=3170041]
|
||||
mesh = SubResource("BoxMesh_tpb_stair_ns")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_b_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_N4" unique_id=3170042]
|
||||
shape = SubResource("BoxShape3D_tpb_stair_ns")
|
||||
|
||||
[node name="TPB_N5" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach" unique_id=3170005 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15, 0.468, 16.95)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_N5" unique_id=3170051]
|
||||
mesh = SubResource("BoxMesh_tpb_stair_ns")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_b_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_N5" unique_id=3170052]
|
||||
shape = SubResource("BoxShape3D_tpb_stair_ns")
|
||||
|
||||
[node name="TPB_N6" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach" unique_id=3170006 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15, 0.572, 16.5)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_N6" unique_id=3170061]
|
||||
mesh = SubResource("BoxMesh_tpb_stair_ns")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_b_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_N6" unique_id=3170062]
|
||||
shape = SubResource("BoxShape3D_tpb_stair_ns")
|
||||
|
||||
[node name="TPB_W1" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach" unique_id=3170007 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20.75, 0.052, 13)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_W1" unique_id=3170071]
|
||||
mesh = SubResource("BoxMesh_tpb_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_b_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_W1" unique_id=3170072]
|
||||
shape = SubResource("BoxShape3D_tpb_stair_we")
|
||||
|
||||
[node name="TPB_W2" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach" unique_id=3170008 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20.3, 0.156, 13)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_W2" unique_id=3170081]
|
||||
mesh = SubResource("BoxMesh_tpb_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_b_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_W2" unique_id=3170082]
|
||||
shape = SubResource("BoxShape3D_tpb_stair_we")
|
||||
|
||||
[node name="TPB_W3" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach" unique_id=3170009 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -19.85, 0.26, 13)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_W3" unique_id=3170091]
|
||||
mesh = SubResource("BoxMesh_tpb_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_b_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_W3" unique_id=3170092]
|
||||
shape = SubResource("BoxShape3D_tpb_stair_we")
|
||||
|
||||
[node name="TPB_W4" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach" unique_id=3170010 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -19.4, 0.364, 13)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_W4" unique_id=3170101]
|
||||
mesh = SubResource("BoxMesh_tpb_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_b_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_W4" unique_id=3170102]
|
||||
shape = SubResource("BoxShape3D_tpb_stair_we")
|
||||
|
||||
[node name="TPB_W5" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach" unique_id=3170013 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -18.95, 0.468, 13)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_W5" unique_id=3170111]
|
||||
mesh = SubResource("BoxMesh_tpb_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_b_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_W5" unique_id=3170112]
|
||||
shape = SubResource("BoxShape3D_tpb_stair_we")
|
||||
|
||||
[node name="TPB_W6" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach" unique_id=3170014 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -18.5, 0.572, 13)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_W6" unique_id=3170121]
|
||||
mesh = SubResource("BoxMesh_tpb_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_b_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_W6" unique_id=3170122]
|
||||
shape = SubResource("BoxShape3D_tpb_stair_we")
|
||||
|
||||
[node name="TPB_E1" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach" unique_id=3170015 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -9.25, 0.052, 13)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_E1" unique_id=3170131]
|
||||
mesh = SubResource("BoxMesh_tpb_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_b_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_E1" unique_id=3170132]
|
||||
shape = SubResource("BoxShape3D_tpb_stair_we")
|
||||
|
||||
[node name="TPB_E2" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach" unique_id=3170016 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -9.7, 0.156, 13)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_E2" unique_id=3170141]
|
||||
mesh = SubResource("BoxMesh_tpb_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_b_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_E2" unique_id=3170142]
|
||||
shape = SubResource("BoxShape3D_tpb_stair_we")
|
||||
|
||||
[node name="TPB_E3" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach" unique_id=3170017 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10.15, 0.26, 13)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_E3" unique_id=3170151]
|
||||
mesh = SubResource("BoxMesh_tpb_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_b_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_E3" unique_id=3170152]
|
||||
shape = SubResource("BoxShape3D_tpb_stair_we")
|
||||
|
||||
[node name="TPB_E4" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach" unique_id=3170018 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10.6, 0.364, 13)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_E4" unique_id=3170161]
|
||||
mesh = SubResource("BoxMesh_tpb_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_b_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_E4" unique_id=3170162]
|
||||
shape = SubResource("BoxShape3D_tpb_stair_we")
|
||||
|
||||
[node name="TPB_E5" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach" unique_id=3170019 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -11.05, 0.468, 13)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_E5" unique_id=3170171]
|
||||
mesh = SubResource("BoxMesh_tpb_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_b_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_E5" unique_id=3170172]
|
||||
shape = SubResource("BoxShape3D_tpb_stair_we")
|
||||
|
||||
[node name="TPB_E6" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach" unique_id=3170020 groups=["walkable"]]
|
||||
collision_mask = 3
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -11.5, 0.572, 13)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_E6" unique_id=3170181]
|
||||
mesh = SubResource("BoxMesh_tpb_stair_we")
|
||||
surface_material_override/0 = SubResource("Mat_terrace_platform_b_ramp")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="World/NavigationRegion3D/TerracePlatformB_Approach/TPB_E6" unique_id=3170182]
|
||||
shape = SubResource("BoxShape3D_tpb_stair_we")
|
||||
|
||||
[node name="InteractionMarkers" type="Node3D" parent="World" unique_id=1700003]
|
||||
script = ExtResource("6_rad")
|
||||
|
||||
|
|
|
|||
|
|
@ -117,9 +117,10 @@ No new automated GDScript tests are added for this story — there is no new GDS
|
|||
- **Teal cardinal / tread shake (rollback):** Aggressive tweaks (**0.16** lift, **1**-tick cooldown, **`descending_stall`** toggling **`floor_block_on_wall`**, **seam-based** step-assist clear, **walk-stall nav replan**) caused **oscillation** on the small approach treads. **Reverted** to **`WALK_STEP_ASSIST_DELTA = 0.11`**, **`WALK_STEP_ASSIST_COOLDOWN_TICKS = 8`**, **no** stall replan, **no** `descending_stall` branch, **no** seam-based assist clear — only the original clear (clean floor without wall, or airborne with no slides). **Climb** wallish snap cap applies only when **`goal.y > feet_y + 0.12`** so shallow tread-to-tread motion is not capped to assist snap every frame.
|
||||
- **Teal pad — geometry wins:** Script-only mitigations still failed in practice; **`TerracePlatformA_Approach`** adds **twelve** `walkable` **`StaticBody3D`** treads (three per cardinal) with **~0.104 m** rise each, **darker teal** albedo, flush to the platform lip — nav + `CharacterBody3D` use **sloped contact** instead of fighting a **single vertical face**. **Follow-up:** tread **run** was **0.45 m** along the climb axis while the capsule **diameter is 0.8 m** — the body was wider than each tread, causing straddle / stuck motion when **entering** and blocking horizontal progress toward the lip when **exiting**. Treads widened to **1.0 m** run with positions re-centered. **`NavigationAgent3D`** `path_desired_distance` / `target_desired_distance` were briefly lowered to **0.22** but that caused **floor** movement to **stall**; **reverted to 0.35**.
|
||||
|
||||
## Next session (handoff)
|
||||
## Approach treads (district convention)
|
||||
|
||||
- **World convention:** Use **approach treads** (same idea as **`TerracePlatformA_Approach`** / `PAS_*`) for **all** stair-like raised platforms in the district — not one-off script tweaks per prop. **Smooth ramps** elsewhere are also planned; expected to play nicely with existing bee-line + nav + step assist without special cases.
|
||||
- **Shipped in scene:** **`TerracePlatformC_Approach`** (`PCS_*`, teal-style **3×4** cardinals, **7.2 m** NS / **WE** span), **`TerraceStepB_Approach`** (`TSB_*`, **S/E/W** only — north meets violet), **`TerracePlatformB_Approach`** (`TPB_*`, **N/E/W**, **six** ~**0.104 m** risers for **0.6 m** deck height; south remains **gold step**). **Smooth ramps** for other props can follow the same rise/run idea without new `player.gd` logic.
|
||||
- **Not in this pass:** **`PrototypeTerminal`**, **MoveReject** props, **runtime random bumps** — add geometry when those need climbable access.
|
||||
|
||||
## Open questions / risks
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue