Files
OlivierandClaude Opus 5.5 2c1ea50aba
Quality Gate / Quality Gate (pull_request) Successful in 7m6s
feat(cockpit): replace procedural cockpit with twelve scripted models
Instance twelve Blender-scripted glTF models in the cockpit scene and
rebuild the cabin around them: gauge panel, sonar, switch panel, alert
box, speaker, porthole, hull wall, caged lamps, gas bottle, handrails
and side consoles. Presentation only; no domain, application or world
rule changes beyond enabling glow in the test environment.

- Needles, alert lamps and sonar screen are driven by the existing
  snapshots; the alert box now carries SYS/ATTN/ALRM.
- Depth dial reads percent of certified depth.
- Sonar display restyled as a turquoise holographic relief with a
  shader grid and height scale; SubViewport matches the glass (960x604).
- Cabin lighting retuned: warm pooled lamp light, cool porthole rim,
  lamp shadows, dial backlight.
- Procedural stand-ins removed (bulkhead, tanks, consoles, levers,
  indicator columns, placeholder pipe run, dial face PNGs).
- Tests adapted where nodes disappeared; one assertion removed
  (pipe_segment_count) until the pipe kit is placed.
- Model .glb files are committed without LFS; textures Godot extracts
  next to them at import are ignored.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 21:46:46 +02:00

335 lines
12 KiB
Plaintext

[gd_scene load_steps=31 format=3]
[ext_resource type="Script" path="res://game/presentation/cockpit/cockpit_instrument_panel.gd" id="1_instruments"]
[ext_resource type="Script" path="res://game/presentation/cockpit/cockpit_detailing.gd" id="2_detailing"]
[ext_resource type="Script" path="res://game/presentation/cockpit/cockpit_pressure_bulkhead.gd" id="3_bulkhead"]
[ext_resource type="Script" path="res://game/presentation/cockpit/cockpit_analog_gauges.gd" id="4_gauges"]
[ext_resource type="Script" path="res://game/presentation/cockpit/cockpit_sonar_console.gd" id="5_sonar_console"]
[ext_resource type="Script" path="res://game/presentation/cockpit/cockpit_alert_box.gd" id="6_alert_box"]
[ext_resource type="Script" path="res://game/presentation/cockpit/cockpit_switch_panel.gd" id="7_switch_panel"]
[ext_resource type="PackedScene" path="res://game/presentation/cockpit/assets/models/gauge_panel.glb" id="8_gauge_panel_model"]
[ext_resource type="PackedScene" path="res://game/presentation/cockpit/assets/models/sonar.glb" id="9_sonar_model"]
[ext_resource type="PackedScene" path="res://game/presentation/cockpit/assets/models/switch_panel.glb" id="10_switch_panel_model"]
[ext_resource type="PackedScene" path="res://game/presentation/cockpit/assets/models/alert_box.glb" id="11_alert_box_model"]
[ext_resource type="PackedScene" path="res://game/presentation/cockpit/assets/models/speaker.glb" id="12_speaker_model"]
[ext_resource type="PackedScene" path="res://game/presentation/cockpit/assets/models/hull_wall.glb" id="13_hull_wall_model"]
[ext_resource type="PackedScene" path="res://game/presentation/cockpit/assets/models/porthole.glb" id="14_porthole_model"]
[ext_resource type="PackedScene" path="res://game/presentation/cockpit/assets/models/gas_bottle.glb" id="15_gas_bottle_model"]
[ext_resource type="PackedScene" path="res://game/presentation/cockpit/assets/models/handrail_l.glb" id="16_handrail_l_model"]
[ext_resource type="PackedScene" path="res://game/presentation/cockpit/assets/models/handrail_r.glb" id="17_handrail_r_model"]
[ext_resource type="PackedScene" path="res://game/presentation/cockpit/assets/models/side_console.glb" id="18_side_console_model"]
[sub_resource type="StandardMaterial3D" id="SteelMaterial"]
albedo_color = Color(0.055, 0.07, 0.07, 1)
metallic = 0.76
roughness = 0.46
[sub_resource type="StandardMaterial3D" id="PaintedMaterial"]
albedo_color = Color(0.045, 0.12, 0.125, 1)
metallic = 0.48
roughness = 0.61
[sub_resource type="StandardMaterial3D" id="BrassMaterial"]
albedo_color = Color(0.27, 0.17, 0.045, 1)
metallic = 0.74
roughness = 0.43
[sub_resource type="StandardMaterial3D" id="RubberMaterial"]
albedo_color = Color(0.018, 0.024, 0.025, 1)
roughness = 0.88
[sub_resource type="StandardMaterial3D" id="ScreenMaterial"]
albedo_color = Color(0.006, 0.025, 0.028, 1)
metallic = 0.15
roughness = 0.22
emission_enabled = true
emission = Color(0.008, 0.07, 0.075, 1)
emission_energy_multiplier = 1.7
[sub_resource type="StandardMaterial3D" id="CyanMaterial"]
shading_mode = 0
albedo_color = Color(0.2, 0.78, 0.82, 1)
emission_enabled = true
emission = Color(0.12, 0.72, 0.76, 1)
emission_energy_multiplier = 3.2
[sub_resource type="StandardMaterial3D" id="AmberMaterial"]
shading_mode = 0
albedo_color = Color(0.95, 0.52, 0.08, 1)
emission_enabled = true
emission = Color(0.95, 0.33, 0.02, 1)
emission_energy_multiplier = 2.6
[sub_resource type="StandardMaterial3D" id="RedMaterial"]
shading_mode = 0
albedo_color = Color(0.82, 0.08, 0.045, 1)
emission_enabled = true
emission = Color(0.92, 0.055, 0.025, 1)
emission_energy_multiplier = 2.8
[sub_resource type="BoxMesh" id="UnitBoxMesh"]
size = Vector3(1, 1, 1)
[sub_resource type="QuadMesh" id="ScreenQuadMesh"]
size = Vector2(1, 1)
[sub_resource type="SphereMesh" id="KnobMesh"]
radius = 0.046
height = 0.092
radial_segments = 16
rings = 8
[sub_resource type="CylinderMesh" id="DialMesh"]
top_radius = 0.105
bottom_radius = 0.105
height = 0.035
radial_segments = 32
[node name="CockpitInterior" type="Node3D"]
script = ExtResource("1_instruments")
[node name="CockpitDetailing" type="Node3D" parent="."]
unique_name_in_owner = true
script = ExtResource("2_detailing")
[node name="CabinShell" type="Node3D" parent="."]
[node name="LeftWall" type="MeshInstance3D" parent="CabinShell"]
position = Vector3(-1.25, 0.47, 0.53)
scale = Vector3(0.16, 2.62, 1.1)
mesh = SubResource("UnitBoxMesh")
material_override = SubResource("PaintedMaterial")
[node name="RightWall" type="MeshInstance3D" parent="CabinShell"]
position = Vector3(1.25, 0.47, 0.53)
scale = Vector3(0.16, 2.62, 1.1)
mesh = SubResource("UnitBoxMesh")
material_override = SubResource("PaintedMaterial")
[node name="Ceiling" type="MeshInstance3D" parent="CabinShell"]
position = Vector3(0, 1.72, 0.53)
scale = Vector3(2.66, 0.16, 1.1)
mesh = SubResource("UnitBoxMesh")
material_override = SubResource("SteelMaterial")
[node name="Floor" type="MeshInstance3D" parent="CabinShell"]
position = Vector3(0, -0.7, -0.1)
scale = Vector3(2.05, 0.18, 2.5)
mesh = SubResource("UnitBoxMesh")
material_override = SubResource("RubberMaterial")
[node name="RearBulkhead" type="MeshInstance3D" parent="CabinShell"]
position = Vector3(0, 0.47, 1.08)
scale = Vector3(2.66, 2.62, 0.16)
mesh = SubResource("UnitBoxMesh")
material_override = SubResource("SteelMaterial")
[node name="PortholeAssembly" type="Node3D" parent="."]
position = Vector3(0, 0.47, -1.32)
[node name="CurvedPressureBulkhead" type="Node3D" parent="PortholeAssembly"]
unique_name_in_owner = true
script = ExtResource("3_bulkhead")
[node name="HullWall" parent="PortholeAssembly/CurvedPressureBulkhead" instance=ExtResource("13_hull_wall_model")]
[node name="Porthole" parent="PortholeAssembly/CurvedPressureBulkhead" instance=ExtResource("14_porthole_model")]
[node name="Dashboard" type="Node3D" parent="."]
unique_name_in_owner = true
position = Vector3(0, 0.05, -1.22)
rotation_degrees = Vector3(-12, 0, 0)
[node name="ResourcesFrame" type="MeshInstance3D" parent="Dashboard"]
position = Vector3(-0.49, -0.115, 0.14)
scale = Vector3(0.34, 0.065, 0.025)
mesh = SubResource("UnitBoxMesh")
material_override = SubResource("BrassMaterial")
[node name="ResourcesScreen" type="MeshInstance3D" parent="Dashboard"]
position = Vector3(-0.49, -0.115, 0.155)
scale = Vector3(0.305, 0.044, 1)
mesh = SubResource("ScreenQuadMesh")
material_override = SubResource("ScreenMaterial")
[node name="ResourcesLabel" type="Label3D" parent="Dashboard"]
unique_name_in_owner = true
position = Vector3(-0.49, -0.115, 0.163)
pixel_size = 0.00055
font_size = 10
outline_size = 2
text = "BAT — kWh · O₂ — %\n— kW · — L/min"
modulate = Color(0.76, 0.74, 0.6, 1)
[node name="NavigationFrame" type="MeshInstance3D" parent="Dashboard"]
position = Vector3(0, -0.115, 0.14)
scale = Vector3(0.30, 0.065, 0.025)
mesh = SubResource("UnitBoxMesh")
material_override = SubResource("BrassMaterial")
[node name="NavigationScreen" type="MeshInstance3D" parent="Dashboard"]
position = Vector3(0, -0.115, 0.155)
scale = Vector3(0.265, 0.044, 1)
mesh = SubResource("ScreenQuadMesh")
material_override = SubResource("ScreenMaterial")
[node name="NavigationLabel" type="Label3D" parent="Dashboard"]
unique_name_in_owner = true
position = Vector3(0, -0.115, 0.163)
pixel_size = 0.00055
font_size = 10
outline_size = 2
text = "PROF. — / — m\nVIT. — m/s"
modulate = Color(0.76, 0.74, 0.6, 1)
[node name="IntegrityFrame" type="MeshInstance3D" parent="Dashboard"]
position = Vector3(0.49, -0.115, 0.14)
scale = Vector3(0.34, 0.065, 0.025)
mesh = SubResource("UnitBoxMesh")
material_override = SubResource("BrassMaterial")
[node name="IntegrityScreen" type="MeshInstance3D" parent="Dashboard"]
position = Vector3(0.49, -0.115, 0.155)
scale = Vector3(0.305, 0.044, 1)
mesh = SubResource("ScreenQuadMesh")
material_override = SubResource("ScreenMaterial")
[node name="IntegrityLabel" type="Label3D" parent="Dashboard"]
unique_name_in_owner = true
position = Vector3(0.49, -0.115, 0.163)
pixel_size = 0.00055
font_size = 10
outline_size = 2
text = "COQUE — % · — bar\nLIMITE — bar"
modulate = Color(0.76, 0.74, 0.6, 1)
[node name="ReturnLabel" type="Label3D" parent="Dashboard"]
unique_name_in_owner = true
position = Vector3(0.22, 0.266, 0.158)
pixel_size = 0.00062
font_size = 12
outline_size = 2
text = "RETOUR · INCONNU"
modulate = Color(1, 0.75, 0.2, 1)
[node name="StatusLabel" type="Label3D" parent="Dashboard"]
unique_name_in_owner = true
position = Vector3(-0.36, 0.266, 0.158)
pixel_size = 0.00062
font_size = 12
outline_size = 2
text = "SYSTÈMES · NORMAL"
modulate = Color(0.45, 0.89, 0.9, 1)
[node name="AnalogGauges" type="Node3D" parent="Dashboard"]
position = Vector3(0, -0.06, 0.15)
script = ExtResource("4_gauges")
[node name="GaugePanelModel" parent="Dashboard/AnalogGauges" instance=ExtResource("8_gauge_panel_model")]
[node name="SonarMonitor" type="Node3D" parent="."]
position = Vector3(0.54, 0.48, -1.04)
rotation_degrees = Vector3(-5, -42, -2)
script = ExtResource("5_sonar_console")
[node name="SonarModel" parent="SonarMonitor" instance=ExtResource("9_sonar_model")]
scale = Vector3(0.31, 0.31, 0.31)
[node name="SonarPlaceholder" type="Label3D" parent="SonarMonitor"]
unique_name_in_owner = true
position = Vector3(-0.0164, 0.002, 0.026)
pixel_size = 0.00054
font_size = 16
outline_size = 2
text = "SONAR
MODULE EN ATTENTE"
modulate = Color(0.34, 0.6, 0.6, 1)
[node name="AlertBox" type="Node3D" parent="."]
position = Vector3(-0.86, 0.555, -1.214)
rotation_degrees = Vector3(0, 15, 0)
script = ExtResource("6_alert_box")
[node name="AlertBoxModel" parent="AlertBox" instance=ExtResource("11_alert_box_model")]
scale = Vector3(0.5, 0.5, 0.5)
[node name="SwitchPanel" type="Node3D" parent="."]
position = Vector3(-0.74, -0.125, -0.97)
rotation_degrees = Vector3(0, 30, 0)
script = ExtResource("7_switch_panel")
[node name="SwitchPanelModel" parent="SwitchPanel" instance=ExtResource("10_switch_panel_model")]
scale = Vector3(0.37, 0.37, 0.37)
[node name="Speaker" parent="." instance=ExtResource("12_speaker_model")]
position = Vector3(0.83, 0.84, -1.22)
rotation_degrees = Vector3(0, -15, 0)
scale = Vector3(0.56, 0.56, 0.56)
[node name="GasBottle" parent="." instance=ExtResource("15_gas_bottle_model")]
position = Vector3(-1.02, 0.36, -1.225)
rotation_degrees = Vector3(0, 53.3, 0)
scale = Vector3(0.65, 0.65, 0.65)
[node name="HandrailLeft" parent="." instance=ExtResource("16_handrail_l_model")]
position = Vector3(-0.6, 0.24, -1.1)
[node name="HandrailRight" parent="." instance=ExtResource("17_handrail_r_model")]
position = Vector3(0.6, 0.24, -1.1)
[node name="SideConsoleLeft" parent="." instance=ExtResource("18_side_console_model")]
position = Vector3(-0.632, -0.61, -1.215)
[node name="SideConsoleRight" parent="." instance=ExtResource("18_side_console_model")]
position = Vector3(0.632, -0.61, -1.215)
scale = Vector3(-1, 1, 1)
[node name="EmergencyDial" type="MeshInstance3D" parent="."]
position = Vector3(-0.845, 0.47, -1.283)
scale = Vector3(0.3, 0.3, 0.3)
rotation_degrees = Vector3(90, 0, 0)
mesh = SubResource("DialMesh")
material_override = SubResource("RedMaterial")
[node name="EmergencyLabel" type="Label3D" parent="."]
position = Vector3(-0.845, 0.418, -1.28)
pixel_size = 0.0015
font_size = 12
outline_size = 2
text = "ÉJECTION · X"
modulate = Color(1, 0.48, 0.38, 1)
[node name="CyanIndicator" type="MeshInstance3D" parent="."]
position = Vector3(-0.15, 0.305, -1.11)
scale = Vector3(0.25, 0.25, 0.25)
mesh = SubResource("KnobMesh")
material_override = SubResource("CyanMaterial")
[node name="AmberIndicator" type="MeshInstance3D" parent="."]
position = Vector3(0, 0.305, -1.11)
scale = Vector3(0.25, 0.25, 0.25)
mesh = SubResource("KnobMesh")
material_override = SubResource("AmberMaterial")
[node name="RedIndicator" type="MeshInstance3D" parent="."]
position = Vector3(0.15, 0.305, -1.11)
scale = Vector3(0.25, 0.25, 0.25)
mesh = SubResource("KnobMesh")
material_override = SubResource("RedMaterial")
[node name="CabinLight" type="OmniLight3D" parent="."]
unique_name_in_owner = true
position = Vector3(0, 0.92, -0.28)
light_color = Color(1, 0.7, 0.46, 1)
light_energy = 0.04
shadow_enabled = true
omni_range = 3.3
[node name="PanelLight" type="OmniLight3D" parent="."]
unique_name_in_owner = true
position = Vector3(0, 0.18, -0.63)
light_color = Color(1, 0.72, 0.5, 1)
light_energy = 0.4
shadow_enabled = false
omni_range = 0.8