Add production bathymetric sonar slice
This commit is contained in:
1 parent
a18e82eb44
commit
7613daee84
28 files changed
+1825
-87
No files matched your search
@@ -18,6 +18,7 @@ const VehicleCollisionSample = preload(
|
||||
"res://game/application/vehicle/vehicle_collision_sample.gd"
|
||||
)
|
||||
const PilotUseCase = preload("res://game/application/vehicle/pilot_use_case.gd")
|
||||
const SonarService = preload("res://game/application/sonar/sonar_service.gd")
|
||||
const SubmarineActor = preload("res://game/world/submarine/submarine_actor.gd")
|
||||
const SubmarineMotionAdapter = preload(
|
||||
"res://game/world/submarine/submarine_motion_adapter.gd"
|
||||
@@ -25,6 +26,9 @@ const SubmarineMotionAdapter = preload(
|
||||
const SubmarineTelemetryAdapter = preload(
|
||||
"res://game/world/submarine/submarine_telemetry_adapter.gd"
|
||||
)
|
||||
const ReferenceBathymetryAcquisition = preload(
|
||||
"res://game/world/sonar/reference_bathymetry_acquisition.gd"
|
||||
)
|
||||
const ProductionInputAdapter = preload(
|
||||
"res://game/infrastructure/input/production_input_adapter.gd"
|
||||
)
|
||||
@@ -35,6 +39,7 @@ const CockpitInstrumentPanel = preload(
|
||||
"res://game/presentation/cockpit/cockpit_instrument_panel.gd"
|
||||
)
|
||||
const CockpitHud = preload("res://game/presentation/cockpit/cockpit_hud.gd")
|
||||
const SonarDisplay = preload("res://game/presentation/sonar/sonar_display.gd")
|
||||
const MainMenuScreen = preload("res://game/presentation/main_menu/main_menu_screen.gd")
|
||||
const PauseMenu = preload("res://game/presentation/pause/pause_menu.gd")
|
||||
const ControlsSettingsScreen = preload(
|
||||
@@ -50,6 +55,9 @@ const VEHICLE_TEST_WORLD_SCENE_PATH := (
|
||||
"res://game/composition/vertical_slice/vehicle_test_world.tscn"
|
||||
)
|
||||
const COCKPIT_HUD_SCENE = preload("res://game/presentation/cockpit/cockpit_hud.tscn")
|
||||
const SONAR_DISPLAY_SCENE = preload(
|
||||
"res://game/presentation/sonar/sonar_display.tscn"
|
||||
)
|
||||
const PAUSE_MENU_SCENE = preload("res://game/presentation/pause/pause_menu.tscn")
|
||||
const CONTROLS_SETTINGS_SCENE = preload(
|
||||
"res://game/presentation/settings/controls_settings_screen.tscn"
|
||||
@@ -75,6 +83,8 @@ var _actor: SubmarineActor
|
||||
var _camera_controller: CockpitCameraController
|
||||
var _instrument_panel: CockpitInstrumentPanel
|
||||
var _hud: CockpitHud
|
||||
var _sonar_service: SonarService
|
||||
var _sonar_display: SonarDisplay
|
||||
var _latest_update: DiveUpdate
|
||||
var _active_world: Node3D
|
||||
var _active_screen: Control
|
||||
@@ -90,6 +100,8 @@ var _dive_terminal := false
|
||||
func _ready() -> void:
|
||||
_input_adapter.pause_requested.connect(_on_pause_requested)
|
||||
_input_adapter.rebind_result_available.connect(_on_rebind_result_available)
|
||||
_input_adapter.sonar_scan_requested.connect(_on_sonar_scan_requested)
|
||||
_input_adapter.sonar_view_toggle_requested.connect(_on_sonar_view_toggle_requested)
|
||||
_show_main_menu()
|
||||
|
||||
|
||||
@@ -115,10 +127,18 @@ func _start_vehicle_test() -> void:
|
||||
_instrument_panel = world.get_node("%CockpitInterior") as CockpitInstrumentPanel
|
||||
_hud = COCKPIT_HUD_SCENE.instantiate() as CockpitHud
|
||||
_replace_active_screen(_hud)
|
||||
_sonar_display = SONAR_DISPLAY_SCENE.instantiate() as SonarDisplay
|
||||
_hud.add_child(_sonar_display)
|
||||
_instrument_panel.attach_sonar_texture(_sonar_display.sonar_texture())
|
||||
|
||||
var motion_adapter := SubmarineMotionAdapter.new(_actor)
|
||||
_pilot_use_case = PilotUseCase.new(motion_adapter)
|
||||
_telemetry_adapter = SubmarineTelemetryAdapter.new(_actor)
|
||||
var sonar_acquisition := ReferenceBathymetryAcquisition.new(
|
||||
_actor.get_world_3d(),
|
||||
_actor
|
||||
)
|
||||
_sonar_service = SonarService.new(sonar_acquisition, DIVE_SESSION_ID)
|
||||
_runner = DiveTickRunner.new(session)
|
||||
_latest_update = _runner.initial_update()
|
||||
_vehicle_command_sequence = 0
|
||||
@@ -177,6 +197,8 @@ func _physics_process(delta: float) -> void:
|
||||
)
|
||||
_hud.present(_latest_update, telemetry)
|
||||
_instrument_panel.present(_latest_update, telemetry)
|
||||
_sonar_service.advance(delta)
|
||||
_present_sonar()
|
||||
if _latest_update.snapshot.is_terminal():
|
||||
_finish_dive_motion()
|
||||
|
||||
@@ -213,6 +235,14 @@ func active_overlay() -> Control:
|
||||
return _active_overlay
|
||||
|
||||
|
||||
func sonar_service() -> SonarService:
|
||||
return _sonar_service
|
||||
|
||||
|
||||
func sonar_display() -> SonarDisplay:
|
||||
return _sonar_display
|
||||
|
||||
|
||||
func _finish_dive_motion() -> void:
|
||||
_dive_terminal = true
|
||||
_input_adapter.set_gameplay_enabled(false)
|
||||
@@ -242,6 +272,41 @@ func _on_collision_sampled(sample: VehicleCollisionSample) -> void:
|
||||
_pending_collision_samples.append(sample)
|
||||
|
||||
|
||||
func _on_sonar_scan_requested() -> void:
|
||||
if _sonar_service == null or _actor == null or _dive_terminal:
|
||||
return
|
||||
var result = _sonar_service.request_scan(_sonar_sensor_transform())
|
||||
if result.accepted:
|
||||
_present_sonar()
|
||||
|
||||
|
||||
func _on_sonar_view_toggle_requested() -> void:
|
||||
if _sonar_display != null and not _dive_terminal:
|
||||
_sonar_display.toggle_expanded()
|
||||
|
||||
|
||||
func _present_sonar() -> void:
|
||||
if _sonar_service == null or _sonar_display == null:
|
||||
return
|
||||
_sonar_display.present(
|
||||
_sonar_service.current_scan(),
|
||||
_sonar_service.previous_scan(),
|
||||
_sonar_service.visible_row_count(),
|
||||
_sonar_service.previous_scan_opacity()
|
||||
)
|
||||
|
||||
|
||||
func _sonar_sensor_transform() -> Transform3D:
|
||||
var world_basis := _actor.global_basis
|
||||
var contract_basis := Basis(
|
||||
world_basis.x,
|
||||
world_basis.y,
|
||||
-world_basis.z
|
||||
)
|
||||
var sensor_origin := _actor.global_transform * Vector3(0.0, -0.75, -2.2)
|
||||
return Transform3D(contract_basis, sensor_origin)
|
||||
|
||||
|
||||
func _on_pause_requested() -> void:
|
||||
if _runner == null:
|
||||
return
|
||||
@@ -382,6 +447,8 @@ func _show_main_menu() -> void:
|
||||
_camera_controller = null
|
||||
_instrument_panel = null
|
||||
_hud = null
|
||||
_sonar_service = null
|
||||
_sonar_display = null
|
||||
_latest_update = null
|
||||
_pending_collision_samples.clear()
|
||||
_dive_terminal = false
|
||||
|
||||
Reference in new issue
Block a user