Save time spent in minigames inside StudentProgression data

This commit is contained in:
Adrien Ufferte
2025-09-18 15:05:23 +02:00
parent ad795f0232
commit b4840ea289
4 changed files with 32 additions and 6 deletions
+23
View File
@@ -12,6 +12,8 @@ enum Status{
@export var version: String = ProjectSettings.get_setting("application/config/version")
@export var unlocks: Dictionary = {}
@export var last_modified: String
@export var level_times: Dictionary[int, PackedInt32Array] = {} # Level ID, Last number of seconds for minigames 0, 1 and 2
@export var level_total_times: Dictionary[int, PackedInt32Array] = {} # Level ID, Total number of seconds for minigames 0, 1 and 2
func _init() -> void:
@@ -93,3 +95,24 @@ func game_completed(lesson_number: int, game_number: int) -> bool:
last_modified = Time.get_datetime_string_from_system(true)
unlocks_changed.emit()
return true
func add_level_time(lesson_number: int, game_number: int, time_spent: int) -> void:
Logger.trace("StudentProgression: Add time to level %d, minigame %d. Time added: %s" % [lesson_number, game_number, time_spent])
if game_number > 2:
Logger.error("StudentProgression: Cannot log a level time for a minigame number superior to 2")
return
if level_times.has(lesson_number):
if level_times[lesson_number].size() != 3:
level_times[lesson_number] = [0, 0, 0]
else:
level_times.set(lesson_number, PackedInt32Array([0, 0, 0]))
level_times[lesson_number][game_number] = time_spent
if level_total_times.has(lesson_number):
if level_total_times[lesson_number].size() != 3:
level_total_times[lesson_number] = PackedInt32Array([0, 0, 0])
else:
level_total_times.set(lesson_number, PackedInt32Array([0, 0, 0]))
level_total_times[lesson_number][game_number] += time_spent
+2 -2
View File
@@ -23,7 +23,7 @@ static var transition_data: Dictionary = {}
@export var lesson_nb: int = 1
@export_range(0, 4) var difficulty: int = 0
@export_range(0, 1) var current_lesson_stimuli_ratio: float = 0.7
@export var minigame_number: int = 1
@export var minigame_number: int = 0
@export_category("Difficulty")
@export var max_number_of_lives: int = 0:
set(value):
@@ -265,7 +265,7 @@ func _lose() -> void:
func _submit_student_level_time() -> void:
var elapsed_time: int = int(Time.get_ticks_msec() / 1000.0 - _start_time - _elapsed_paused)
ServerManager.submit_student_level_time(lesson_nb, elapsed_time)
UserDataManager.add_level_time(lesson_nb, minigame_number, elapsed_time)
#endregion
@@ -35,10 +35,6 @@ func set_environment(env: int) -> void:
Log.info("Environment URL set to " + environment_url)
func submit_student_level_time(level: int, elapsed_time: int) -> void:
await _post_json_request("submit_student_metrics", {"student_id": UserDataManager.student, "level": level, "time_spent": elapsed_time})
func first_login_student() -> void:
await _post_json_request("submit_student_session", {"student_id": UserDataManager.student})
@@ -581,6 +581,13 @@ func set_student_progression_data(student_code: int, version: String, new_data:
if err != OK:
Log.error("UserDataManager: Error while saving student progression: %s" % error_string(err))
func add_level_time(lesson_number: int, game_number: int, time_spent: int) -> void:
if not student_progression:
Logger.warn("UserDataManager: Cannot save time spent in level because data of student progression cannot be found")
return
student_progression.add_level_time(lesson_number, game_number, time_spent)
#endregion
#region Student remediation