class_name P91BattleClock extends RefCounted var elapsed := 0.0 var result_elapsed := 0.0 var second_elapsed := 0.0 var second_result_time := 0.0 var third_elapsed := 0.0 var third_result_time := 0.0 var fourth_elapsed := 0.0 var fourth_result_time := 0.0 var fifth_elapsed := 0.0 var fifth_result_time := 0.0 func reset() -> void: elapsed = 0.0 result_elapsed = 0.0 second_elapsed = 0.0 second_result_time = 0.0 third_elapsed = 0.0 third_result_time = 0.0 fourth_elapsed = 0.0 fourth_result_time = 0.0 fifth_elapsed = 0.0 fifth_result_time = 0.0 func advance(delta: float, encounter: Dictionary, impact_at: float, duration: float, paused: bool) -> Dictionary: if paused or not encounter.get("playing", false): return {"impact_requests": [], "phase_complete": false, "phase_progress": 0.0} var previous := elapsed elapsed += delta var requests: Array[Dictionary] = [] if impact_at >= 0.0 and previous < impact_at and elapsed >= impact_at: requests.append({ "encounter_id": encounter.get("id", &""), "phase": encounter.get("phase", 0), "impact_id": StringName("%s:phase_%d" % [encounter.get("id", &""), encounter.get("phase", 0)]), }) return { "impact_requests": requests, "phase_complete": duration > 0.0 and elapsed >= duration, "phase_progress": clampf(elapsed / duration, 0.0, 1.0) if duration > 0.0 else 0.0, }