Files
tgcc/core/steam_manager/stats_manager.gd
2026-06-29 08:35:14 +02:00

73 lines
2.4 KiB
GDScript

extends Node
### SISETMARE SU RAILS IL FATTORE DI CONVERSIONE DA UNITA' A KM!!!
### ORA HO LASCIATO 1:1 PER TEST
#Achievements and stats must be published on Steam even if game is not yet released
#if you have an error setting achievements or stats in debug mode remember to open your steam client
#with jmp games account or another account who bought this game. If error persist try to clos and reopen steam client.
const KNOWN := [
"stat_time_played",
"stat_distance_km",
"stat_stop_number",
"stat_photo_number",
"stat_toottoot_number",
]
#how it works:
#func _on_match_finished(score: int) -> void:
# StatsManager.add_int("stat_time_played", 1)
# StatsManager.set_int("stat_total_score", StatsManager.get_int("stat_total_score") + score)
# StatsManager.store() #only one push at the end of the game
# if StatsManager.get_int("stat_time_played") >= 10:
# AchievementManager.unlock("ACH_PLAY_10_HOURS") #it call storeStats()
func _ready() -> void:
if not SteamManager.is_on_steam:
return
Steam.user_stats_stored.connect(_on_stats_stored)
func get_int(stat: String) -> int:
return Steam.getStatInt(stat)
func get_float(stat: String) -> float:
return Steam.getStatFloat(stat)
func set_int(stat: String, value: int) -> void:
if not KNOWN.has(stat):
push_warning("Stat not found: %s" % stat)
return
if not Steam.setStatInt(stat, value):
push_error("setStatInt failed (incremental with value less than current value? is published on steam?): %s" % stat)
func set_float(stat: String, value: float) -> void:
if not KNOWN.has(stat):
push_warning("Stat not found: %s" % stat)
return
if not Steam.setStatFloat(stat, value):
push_error("setStatFloat failed: %s" % stat)
func add_int(stat: String, amount: int = 1) -> void:
set_int(stat, get_int(stat) + amount)
func update_avg_rate(stat: String, count_this_session: float, session_length: float) -> void:
Steam.updateAvgRateStat(stat, count_this_session, session_length)
#Send all data to server; call it at the end of the game of when exit
func store() -> void:
if not Steam.storeStats():
push_error("storeStats failed; data saved locally")
#Development only: reset stats
func reset_all(include_achievements: bool = false) -> void:
if !Steam.resetAllStats(include_achievements):
push_error("resetAllStats failed")
func _on_stats_stored(_game: int, result: int) -> void:
if !result:
print("stats not ready: (result %d)" % [result])