Implement production vertical slice foundation
This commit is contained in:
1 parent
9d4a89f355
commit
a18e82eb44
104 files changed
+10595
-268
No files matched your search
@@ -0,0 +1,75 @@
|
||||
class_name DiveTickRunner
|
||||
extends RefCounted
|
||||
|
||||
const VehicleTelemetry = preload("res://game/application/dive/vehicle_telemetry.gd")
|
||||
const DiveSession = preload("res://game/domain/dive/dive_session.gd")
|
||||
const DiveTick = preload("res://game/domain/dive/dive_tick.gd")
|
||||
const DiveTelemetrySample = preload("res://game/domain/dive/dive_telemetry_sample.gd")
|
||||
const CollisionObservation = preload("res://game/domain/dive/collision_observation.gd")
|
||||
const ToolPowerDemand = preload("res://game/domain/dive/tool_power_demand.gd")
|
||||
const EjectionIntent = preload("res://game/domain/dive/ejection_intent.gd")
|
||||
const ReturnRouteSample = preload("res://game/domain/dive/return_route_sample.gd")
|
||||
const DiveStep = preload("res://game/domain/dive/dive_step.gd")
|
||||
const DiveUpdate = preload("res://game/domain/dive/dive_update.gd")
|
||||
|
||||
var _session: DiveSession
|
||||
var _next_sequence := 0
|
||||
|
||||
|
||||
func _init(session: DiveSession) -> void:
|
||||
_session = session
|
||||
|
||||
|
||||
func next_sequence() -> int:
|
||||
return _next_sequence
|
||||
|
||||
|
||||
func initial_update() -> DiveUpdate:
|
||||
return DiveUpdate.initial(_session.current_snapshot())
|
||||
|
||||
|
||||
func advance(
|
||||
telemetry: VehicleTelemetry,
|
||||
elapsed_seconds: float,
|
||||
collisions: Array[CollisionObservation] = [],
|
||||
tool_power_demands: Array[ToolPowerDemand] = [],
|
||||
ejection_intent: EjectionIntent = null,
|
||||
return_route: ReturnRouteSample = null
|
||||
) -> DiveUpdate:
|
||||
if telemetry == null:
|
||||
return DiveUpdate.rejected(
|
||||
_next_sequence,
|
||||
"vehicle telemetry is missing",
|
||||
_session.current_snapshot()
|
||||
)
|
||||
var telemetry_error: String = telemetry.validation_error(
|
||||
_session.session_id,
|
||||
_next_sequence
|
||||
)
|
||||
if not telemetry_error.is_empty():
|
||||
return DiveUpdate.rejected(
|
||||
_next_sequence,
|
||||
telemetry_error,
|
||||
_session.current_snapshot()
|
||||
)
|
||||
|
||||
var tick := DiveTick.new(_session.session_id, _next_sequence, elapsed_seconds)
|
||||
var sample := DiveTelemetrySample.new(
|
||||
telemetry.depth_m,
|
||||
telemetry.longitudinal_effort,
|
||||
telemetry.steering_effort,
|
||||
telemetry.vertical_effort,
|
||||
telemetry.high_thrust_active
|
||||
)
|
||||
var step := DiveStep.new(
|
||||
tick,
|
||||
sample,
|
||||
collisions,
|
||||
tool_power_demands,
|
||||
ejection_intent,
|
||||
return_route
|
||||
)
|
||||
var update: DiveUpdate = _session.advance(step)
|
||||
if update.accepted:
|
||||
_next_sequence += 1
|
||||
return update
|
||||
Reference in new issue
Block a user