diff --git a/resources/user/student_progression.gd b/resources/user/student_progression.gd index 5b0c9b78..fbf397e1 100644 --- a/resources/user/student_progression.gd +++ b/resources/user/student_progression.gd @@ -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 diff --git a/sources/minigames/base/base_minigame.gd b/sources/minigames/base/base_minigame.gd index 3c6f9e91..19e866f5 100644 --- a/sources/minigames/base/base_minigame.gd +++ b/sources/minigames/base/base_minigame.gd @@ -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 diff --git a/sources/utils/autoloads/server_manager.gd b/sources/utils/autoloads/server_manager.gd index 0bdad8d4..9942b6dc 100644 --- a/sources/utils/autoloads/server_manager.gd +++ b/sources/utils/autoloads/server_manager.gd @@ -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}) diff --git a/sources/utils/autoloads/user_data_manager.gd b/sources/utils/autoloads/user_data_manager.gd index 5dbc8c51..8a9ed6f1 100644 --- a/sources/utils/autoloads/user_data_manager.gd +++ b/sources/utils/autoloads/user_data_manager.gd @@ -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