class_name Board extends Node @export var ach : Achievement @export var crt : CRT @export var save : SaveFileManager @export var display_instances : Array[Label3D] @export var display_instances_alt : Array[Node3D] var display_instances_act = [] @export var display_overview : Node3D @export var text_globalpos : Label3D @export var nocon : Node3D @export var lock : Node3D var leaderboard_handle var details_max: int = Steam.setLeaderboardDetailsMax(2) var activeArray = [] var active_result_array var active_entry_count = 0 func _ready(): display_instances_act = display_instances ClearDisplay() if !GlobalVariables.using_steam: return Steam.leaderboard_find_result.connect(_on_leaderboard_find_result) Steam.leaderboard_score_uploaded.connect(_on_leaderboard_score_uploaded) Steam.leaderboard_scores_downloaded.connect(_on_leaderboard_scores_downloaded) GetLeaderboard() func _process(delta): CheckTimeout() func PassLeaderboard(range1 : int, range2 : int, alias : String): active_range1 = range1 active_range2 = range2 active_alias = alias SetupLeaderboard() var initialsetup = false var active_alias = "" var active_range1 = 0 var active_range2 = 0 func SetupLeaderboard(): if (!initialsetup): GetLeaderboard() Steam.setLeaderboardDetailsMax(2) initialsetup = true return DownloadEntries(active_range1, active_range2, active_alias) Timeout(true) func Timeout(s : bool): if s: t = 0 checking = true else: t = 0 checking = false func ClearDisplay(): display_overview.visible = false text_globalpos.text = "" for disp in display_instances_act: var score : Label3D = disp.get_child(0) disp.text = "" score.text = "" func TurnOffDisplay(): crt.speaker_bootuploop.stop() crt.speaker_shutdown.play() nocon.visible = false display_overview.visible = false text_globalpos.text = "" for disp in display_instances_act: var score : Label3D = disp.get_child(0) disp.text = "" score.text = "" for i in crt.array_bootup: i.visible = false for i in crt.array_bootuplogo: i.visible = false for i in crt.array_partbranch: i.ResetPartition() for i in crt.array_stats: i.visible = false crt.anim_iconfade.play("RESET") func UpdateDisplay(): if (crt.has_exited): return var fs = false Timeout(false) nocon.material_override.albedo_color = Color(1, 1, 1, 0) lock.material_override.albedo_color = Color(1, 1, 1, 0) display_instances_act = display_instances var temp_rank = 0 var array = active_result_array if (checking_friends): for result in active_result_array: temp_rank += 1 result.global_rank = temp_rank if (checking_overview): var id = Steam.getSteamID() var pos_current var pos_max pos_max = active_entry_count display_overview.visible = true for result in active_result_array: if (result.steam_id == id): pos_current = result.global_rank break if (pos_current == null): lock.material_override.albedo_color = Color(1, 1, 1, 1) display_overview.visible = false text_globalpos.text = "(" + str(pos_current) + "/" + str(pos_max) + ")" display_instances_act = display_instances_alt var incrementer = 0 for i in range(display_instances_act.size()): if i >= active_result_array.size() or active_result_array[i] == null: continue var details = active_result_array[i].details if (details.size() != 2): details = [0, 0] var active_score = active_result_array[i].score var init = details[0] var beaten = details[1] var sc = init for s in range(beaten - 1): sc *= 2 var check = 0 active_score = sc if (!fs): ach.UnlockAchievement("ach16") crt.speaker_navbeep.pitch_scale = .5 crt.speaker_navbeep.play() fs = true var scoretext : Label3D = display_instances_act[i].get_child(0) var active_id = active_result_array[i].steam_id var active_rank = active_result_array[i].global_rank var playername = Steam.getFriendPersonaName(active_id) var mainstring = "#" + str(active_rank) + " " + playername var char_limit = 18 if mainstring.length() > char_limit: mainstring = mainstring.left(char_limit - 1) + "-" display_instances_act[i].text = str(mainstring) scoretext.text = str(active_score) var temp_data @export var stat_shotsFired : Label3D @export var stat_shellsEjected : Label3D @export var stat_doorsKicked : Label3D @export var stat_cigSmoked : Label3D @export var stat_roundsBeat : Label3D @export var stat_mlDrank : Label3D @export var stat_totalCash : Label3D func UpdateStats(): if (FileAccess.file_exists(save.savePath_stats)): var file = FileAccess.open(save.savePath_stats, FileAccess.READ) temp_data = file.get_var() stat_shotsFired.text = str(temp_data.shots_fired) stat_shellsEjected.text = str(temp_data.shells_ejected) stat_doorsKicked.text = str(temp_data.doors_kicked) stat_cigSmoked.text = str(temp_data.cigs_smoked) stat_roundsBeat.text = str(temp_data.rounds_beat) stat_mlDrank.text = str(temp_data.ml_drank) stat_totalCash.text = str(temp_data.total_cash) func GetLeaderboard(): Steam.findLeaderboard("double_or_nothing") func UploadScore_Deprecated(rounds_beat, visible_score, initial_score): var ar = PackedInt32Array([initial_score, rounds_beat]) var upload = initial_score * rounds_beat Steam.uploadLeaderboardScore(upload, true, ar, leaderboard_handle) func UploadScore(rounds_beat, visible_score, initial_score): var ar = PackedInt32Array([initial_score, rounds_beat]) var upload = initial_score for s in range(rounds_beat - 1): upload *= 2 upload = val2compressed(upload) Steam.uploadLeaderboardScore(upload, true, ar, leaderboard_handle) func _on_leaderboard_score_uploaded(success: int, this_handle: int, this_score: Dictionary) -> void: if success == 1: print("successfully uploaded score: ", this_score) else: print("failed to upload score") func _on_leaderboard_find_result(handle: int, found: int) -> void: if found == 1: leaderboard_handle = handle print("Leaderboard handle found: %s" % leaderboard_handle) SetupLeaderboard() else: print("No handle was found") var checking_friends = false var checking_overview = false func DownloadEntries(range1 : int, range2 : int, alias : String): if !GlobalVariables.using_steam: return match alias: "top": checking_friends = false checking_overview = false Steam.downloadLeaderboardEntries(range1, range2, Steam.LEADERBOARD_DATA_REQUEST_GLOBAL) "overview": checking_friends = false checking_overview = true Steam.downloadLeaderboardEntries(-4, 4, Steam.LEADERBOARD_DATA_REQUEST_GLOBAL_AROUND_USER) "friends": checking_friends = true checking_overview = false Steam.downloadLeaderboardEntries(range1, range2, Steam.LEADERBOARD_DATA_REQUEST_FRIENDS) var t = 0 var max = 2 var checking = false func CheckTimeout(): if (checking): t += get_process_delta_time() if t > max: nocon.material_override.albedo_color = Color(1, 1, 1, 1) var print_cur = 0 var print_max = 48 func _on_leaderboard_scores_downloaded(message: String, this_leaderboard_handle: int, result: Array) -> void: print("scores downloaded message: %s" % message) var leaderboard_handle: int = this_leaderboard_handle active_result_array = result active_entry_count = Steam.getLeaderboardEntryCount(leaderboard_handle) for this_result in result: if (print_cur <= print_max): print("leaderboard result (", print_cur, "/", print_max, ")", this_result, Steam.getFriendPersonaName(this_result.steam_id)); print_cur += 1 UpdateDisplay() func val2compressed(val): var accuracy_bits = 17 var a = max(0, floor(log(val) / log(2)) + 1 - accuracy_bits) if 2**accuracy_bits * (2**a - 1) > val: a -= 1 var b = (val - 2**accuracy_bits * (2**a - 1)) / (2**a) return floor((a * 2**accuracy_bits) + b)