Count up question bank answer timer
This commit is contained in:
@@ -20,6 +20,10 @@ var core_current_target_seconds := 90.0
|
||||
var core_current_had_wrong_attempt := false
|
||||
var current_question_started_at := 0.0
|
||||
var current_question_pause_started_at := 0.0
|
||||
var core_question_total_elapsed_seconds := 0.0
|
||||
var core_question_total_active_since := 0.0
|
||||
var core_question_display_target_seconds := 90.0
|
||||
var core_question_total_frozen := false
|
||||
var core_status_message := ""
|
||||
var simulation_block_index := 0
|
||||
var simulation_total_blocks := 12
|
||||
@@ -62,6 +66,10 @@ func start_core_run() -> bool:
|
||||
core_target_seconds = 90.0
|
||||
core_current_target_seconds = core_target_seconds
|
||||
core_current_had_wrong_attempt = false
|
||||
core_question_total_elapsed_seconds = 0.0
|
||||
core_question_total_active_since = 0.0
|
||||
core_question_display_target_seconds = core_target_seconds
|
||||
core_question_total_frozen = false
|
||||
core_status_message = ""
|
||||
if not advance_core_question():
|
||||
block_started = false
|
||||
@@ -161,6 +169,7 @@ func submit_core_attempt(choice_id: String, eliminated: Array, flagged: bool) ->
|
||||
if bool(answer.get("is_correct", false)):
|
||||
var mastered := not core_current_had_wrong_attempt
|
||||
answers[current_index] = answer
|
||||
_freeze_core_question_total_timer()
|
||||
_apply_core_answer_rewards(answer, mastered)
|
||||
session_changed.emit()
|
||||
return {
|
||||
@@ -311,6 +320,10 @@ func append_core_question(question: Dictionary) -> bool:
|
||||
current_question_started_at = Time.get_ticks_msec() / 1000.0
|
||||
current_question_pause_started_at = 0.0
|
||||
core_current_target_seconds = core_target_seconds
|
||||
core_question_display_target_seconds = core_current_target_seconds
|
||||
core_question_total_elapsed_seconds = 0.0
|
||||
core_question_total_active_since = current_question_started_at
|
||||
core_question_total_frozen = false
|
||||
core_current_had_wrong_attempt = false
|
||||
session_changed.emit()
|
||||
return true
|
||||
@@ -339,6 +352,21 @@ func get_core_timer_ratio() -> float:
|
||||
return clamp(ratio, 0.0, 1.0)
|
||||
|
||||
|
||||
func get_core_question_total_elapsed_seconds() -> float:
|
||||
if session_kind != "core":
|
||||
return 0.0
|
||||
var elapsed := core_question_total_elapsed_seconds
|
||||
if core_question_total_active_since > 0.0:
|
||||
elapsed += Time.get_ticks_msec() / 1000.0 - core_question_total_active_since
|
||||
return maxf(0.0, elapsed)
|
||||
|
||||
|
||||
func get_core_question_elapsed_ratio() -> float:
|
||||
if session_kind != "core" or core_question_display_target_seconds <= 0.0:
|
||||
return 0.0
|
||||
return clampf(get_core_question_total_elapsed_seconds() / core_question_display_target_seconds, 0.0, 1.0)
|
||||
|
||||
|
||||
func get_session_timer_ratio() -> float:
|
||||
if session_kind == "core":
|
||||
return get_core_timer_ratio()
|
||||
@@ -349,14 +377,31 @@ func get_session_timer_ratio() -> float:
|
||||
|
||||
func pause_current_question_timer() -> void:
|
||||
if session_kind == "core" and current_question_pause_started_at <= 0.0:
|
||||
current_question_pause_started_at = Time.get_ticks_msec() / 1000.0
|
||||
var now := Time.get_ticks_msec() / 1000.0
|
||||
current_question_pause_started_at = now
|
||||
_pause_core_question_total_timer(now)
|
||||
|
||||
|
||||
func resume_current_question_timer() -> void:
|
||||
if session_kind == "core" and current_question_pause_started_at > 0.0:
|
||||
var paused_duration := Time.get_ticks_msec() / 1000.0 - current_question_pause_started_at
|
||||
var now := Time.get_ticks_msec() / 1000.0
|
||||
var paused_duration := now - current_question_pause_started_at
|
||||
current_question_started_at += paused_duration
|
||||
current_question_pause_started_at = 0.0
|
||||
if not core_question_total_frozen:
|
||||
core_question_total_active_since = now
|
||||
|
||||
|
||||
func _pause_core_question_total_timer(now: float) -> void:
|
||||
if core_question_total_active_since <= 0.0:
|
||||
return
|
||||
core_question_total_elapsed_seconds += maxf(0.0, now - core_question_total_active_since)
|
||||
core_question_total_active_since = 0.0
|
||||
|
||||
|
||||
func _freeze_core_question_total_timer() -> void:
|
||||
_pause_core_question_total_timer(Time.get_ticks_msec() / 1000.0)
|
||||
core_question_total_frozen = true
|
||||
|
||||
|
||||
func _draw_core_question() -> Dictionary:
|
||||
|
||||
Reference in New Issue
Block a user