62 lines
2.2 KiB
GDScript
62 lines
2.2 KiB
GDScript
class_name CockpitHud
|
|
extends Control
|
|
|
|
const DiveUpdate = preload("res://game/domain/dive/dive_update.gd")
|
|
const DiveAlertLevel = preload("res://game/domain/dive/dive_alert_level.gd")
|
|
const DiveTerminalReason = preload("res://game/domain/dive/dive_terminal_reason.gd")
|
|
const VehicleTelemetry = preload("res://game/application/dive/vehicle_telemetry.gd")
|
|
|
|
@onready var _alert_panel: PanelContainer = %AlertPanel
|
|
@onready var _alert_label: Label = %AlertLabel
|
|
@onready var _ejection_panel: PanelContainer = %EjectionPanel
|
|
@onready var _ejection_label: Label = %EjectionLabel
|
|
@onready var _terminal_panel: PanelContainer = %TerminalPanel
|
|
@onready var _terminal_label: Label = %TerminalLabel
|
|
|
|
|
|
func present(update: DiveUpdate, telemetry: VehicleTelemetry) -> void:
|
|
if update == null or update.snapshot == null or telemetry == null:
|
|
return
|
|
var snapshot = update.snapshot
|
|
_alert_panel.visible = snapshot.alerts.maximum != DiveAlertLevel.Value.NORMAL
|
|
_alert_label.text = "ALERTE · %s" % _alert_text(snapshot.alerts.maximum)
|
|
_ejection_panel.visible = snapshot.ejection.held_seconds > 0.0
|
|
_ejection_label.text = "ÉJECTION %.0f %%" % (snapshot.ejection.ratio * 100.0)
|
|
_terminal_panel.visible = snapshot.is_terminal()
|
|
if snapshot.is_terminal():
|
|
_terminal_label.text = "%s\nÉchap pour ouvrir le menu de pause." % [
|
|
_terminal_text(snapshot.terminal_reason)
|
|
]
|
|
|
|
|
|
func alert_overlay_visible() -> bool:
|
|
return _alert_panel.visible
|
|
|
|
|
|
func _alert_text(level: DiveAlertLevel.Value) -> String:
|
|
match level:
|
|
DiveAlertLevel.Value.NORMAL:
|
|
return tr("NORMAL")
|
|
DiveAlertLevel.Value.ATTENTION:
|
|
return tr("ATTENTION")
|
|
DiveAlertLevel.Value.RETURN:
|
|
return tr("RETOUR")
|
|
DiveAlertLevel.Value.CRITICAL:
|
|
return tr("CRITIQUE")
|
|
DiveAlertLevel.Value.FAILURE:
|
|
return tr("DÉFAILLANCE")
|
|
return tr("INCONNU")
|
|
|
|
|
|
func _terminal_text(reason: DiveTerminalReason.Value) -> String:
|
|
match reason:
|
|
DiveTerminalReason.Value.VOLUNTARY_EJECTION:
|
|
return tr("ÉJECTION DÉCLENCHÉE")
|
|
DiveTerminalReason.Value.OXYGEN_DEPLETED:
|
|
return tr("OXYGÈNE ÉPUISÉ")
|
|
DiveTerminalReason.Value.HULL_DESTROYED:
|
|
return tr("COQUE DÉTRUITE")
|
|
DiveTerminalReason.Value.RETURNED:
|
|
return tr("RETOUR TERMINÉ")
|
|
return tr("PLONGÉE TERMINÉE")
|