Implement production vertical slice foundation

This commit is contained in:
chindit committed 2026-10-02 15:27:48 +02:00
1 parent 9d4a89f355
commit a18e82eb44
104 files changed
+10595 -268

No files matched your search

@@ -0,0 +1,141 @@
class_name DiagnosticDiveScreen
extends Control
signal menu_requested
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 ReturnEstimate = preload("res://game/domain/dive/return_estimate.gd")
@onready var _status_label: Label = %StatusLabel
@onready var _tick_label: Label = %TickLabel
@onready var _battery_label: Label = %BatteryLabel
@onready var _oxygen_label: Label = %OxygenLabel
@onready var _hull_label: Label = %HullLabel
@onready var _depth_label: Label = %DepthLabel
@onready var _return_label: Label = %ReturnLabel
@onready var _alert_label: Label = %AlertLabel
@onready var _event_label: Label = %EventLabel
@onready var _menu_button: Button = %MenuButton
func _ready() -> void:
_menu_button.pressed.connect(_on_menu_pressed)
func present(update: DiveUpdate) -> void:
if update == null or update.snapshot == null:
present_setup_error("Mise à jour de plongée absente")
return
if not update.accepted:
_status_label.text = "ÉTAT · PAS REFUSÉ · %s" % update.rejection_reason
else:
_status_label.text = "ÉTAT · SIMULATION DÉTERMINISTE · 60 HZ"
var snapshot = update.snapshot
_tick_label.text = "SESSION %s · TICK %d" % [snapshot.session_id, snapshot.tick_sequence]
_battery_label.text = (
"BATTERIE %.2f / %.2f kWh · %.0f %% · %.1f kW"
% [
snapshot.battery.remaining_kwh,
snapshot.battery.maximum_kwh,
snapshot.battery.ratio * 100.0,
snapshot.battery.current_power_kw,
]
)
_oxygen_label.text = (
"OXYGÈNE %.1f / %.1f L · %.0f %% · %.1f L/min · %.1f min"
% [
snapshot.oxygen.remaining_l,
snapshot.oxygen.maximum_l,
snapshot.oxygen.ratio * 100.0,
snapshot.oxygen.consumption_l_per_min,
snapshot.oxygen.endurance_minutes,
]
)
_hull_label.text = (
"COQUE %.1f / %.1f · %.0f %% · %.2f / %.2f bar recommandés"
% [
snapshot.hull.current_integrity,
snapshot.hull.maximum_integrity,
snapshot.hull.ratio * 100.0,
snapshot.hull.exterior_pressure_bar,
snapshot.hull.certified_pressure_bar,
]
)
_depth_label.text = (
"PROFONDEUR %.1f m · CERTIFIÉE %.1f m · CRITIQUE %.1f m"
% [
snapshot.depth.current_m,
snapshot.depth.certified_m,
snapshot.depth.critical_m,
]
)
_return_label.text = _format_return_estimate(snapshot.return_estimate)
_alert_label.text = "ALERTE MAXIMALE · %s" % _alert_level_text(snapshot.alerts.maximum)
_event_label.text = (
"TERMINAISON · %s · ÉVÉNEMENTS DU PAS · %d"
% [_terminal_reason_text(snapshot.terminal_reason), update.events.size()]
)
func present_setup_error(message: String) -> void:
_status_label.text = "ÉTAT · INITIALISATION IMPOSSIBLE"
_tick_label.text = message
func _on_menu_pressed() -> void:
menu_requested.emit()
func _format_return_estimate(estimate: ReturnEstimate) -> String:
match estimate.status:
ReturnEstimate.Status.UNKNOWN:
return "RETOUR · ESTIMATION INCONNUE"
ReturnEstimate.Status.SAFE:
return "RETOUR %.2f kWh requis · MARGE %.2f kWh · SÛR" % [
estimate.required_kwh,
estimate.margin_kwh,
]
ReturnEstimate.Status.TIGHT:
return "RETOUR %.2f kWh requis · MARGE %.2f kWh · SERRÉ" % [
estimate.required_kwh,
estimate.margin_kwh,
]
ReturnEstimate.Status.INSUFFICIENT:
return "RETOUR %.2f kWh requis · MANQUE %.2f kWh" % [
estimate.required_kwh,
absf(estimate.margin_kwh),
]
return "RETOUR · ÉTAT INCONNU"
func _alert_level_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_reason_text(reason: DiveTerminalReason.Value) -> String:
match reason:
DiveTerminalReason.Value.NONE:
return tr("EN COURS")
DiveTerminalReason.Value.RETURNED:
return tr("RETOUR")
DiveTerminalReason.Value.VOLUNTARY_EJECTION:
return tr("ÉJECTION VOLONTAIRE")
DiveTerminalReason.Value.OXYGEN_DEPLETED:
return tr("OXYGÈNE ÉPUISÉ")
DiveTerminalReason.Value.HULL_DESTROYED:
return tr("COQUE DÉTRUITE")
return tr("INCONNU")