From 73c11b4659823022437772914b34fc0dab44ddfa Mon Sep 17 00:00:00 2001 From: Harmony Honey Date: Tue, 28 Nov 2023 03:02:37 -0500 Subject: [PATCH] death & speedrun counter working (= --- src/actor/Player.gd | 1 + src/autoload/Shared.gd | 93 ++++++++++++++++++++++++++------- src/menu/StartMenu.gd | 3 -- src/menu/credits.gd | 3 +- src/menu/options/OptionsMenu.gd | 3 -- src/menu/select.gd | 17 ++++-- src/stage/Stage.gd | 8 +-- 7 files changed, 92 insertions(+), 36 deletions(-) diff --git a/src/actor/Player.gd b/src/actor/Player.gd index 7b19ede..2b2c780 100644 --- a/src/actor/Player.gd +++ b/src/actor/Player.gd @@ -246,6 +246,7 @@ func remove_player(): func death(): print(name + " died") + Shared.die() # explosion var inst = scene_explosion.instance() diff --git a/src/autoload/Shared.gd b/src/autoload/Shared.gd index 43ca0ed..510a3b5 100644 --- a/src/autoload/Shared.gd +++ b/src/autoload/Shared.gd @@ -29,6 +29,10 @@ var bus_volume = [10, 10, 10] var current_map := 0 var maps := [] var map_save := 0 +var map_name := "" +var map_clock := 0.0 +var map_times := {} +var deaths := {} var actors := [] var player @@ -53,19 +57,7 @@ func _ready(): print("maps: ", maps) # load save data - var l = load_file(save_filename) - if l: - save_data = JSON.parse(l).result - print("save_data: " + JSON.print(save_data, "\t")) - if save_data.has("map"): - map_save = int(save_data["map"]) - if save_data.has("notes"): - notes = PoolIntArray(save_data["notes"]) - else: - create_save() - else: - print(save_filename + " not found") - create_save() + load_save() Wipe.connect("finish", self, "wipe_finish") @@ -75,7 +67,7 @@ func _ready(): "api_key": str(api_key), "game_id": "TinyCrate", "game_version": "1.0.0", - "log_level": 1}) + "log_level": 2}) SilentWolf.configure_scores({"open_scene_on_close": "res://scenes/MainPage.tscn"}) @@ -89,6 +81,10 @@ func _physics_process(delta): reset_clock -= delta if reset_clock < 0: do_reset() + + # map time + if !Pause.is_paused: + map_clock += delta ### Changing Maps @@ -127,12 +123,33 @@ func change_map(): get_tree().change_scene(scene_path) is_level_select = scene_path == level_select_path is_in_game = scene_path.begins_with(map_path) or scene_path.begins_with(win_screen_path) - #TouchScreen.pause.visible = is_in_game + map_name = "" if !is_in_game else scene_path.split("/")[-1].trim_suffix(".tscn") + map_clock = 0.0 + Pause.set_process_input(true) is_note = false UI.notes.visible = is_level_select UI.notes_label.text = str(notes.size()) UI.keys(false, false) + + if is_in_game: + TouchScreen.turn_arrows(false) + TouchScreen.show_keys(true, true, true, true, true) + elif is_level_select: + UI.keys() + TouchScreen.turn_arrows(false) + TouchScreen.show_keys() + elif scene_path == main_menu_path: + UI.keys(true, true, false) + TouchScreen.turn_arrows(true) + TouchScreen.show_keys(true, false, true) + elif scene_path == options_menu_path: + UI.keys() + TouchScreen.turn_arrows(true) + TouchScreen.show_keys() + elif scene_path == credits_path: + UI.keys(false, true) + TouchScreen.show_keys(false, true, false) ### Saving and Loading @@ -149,11 +166,34 @@ func load_file(fname = "box.save"): file.close() return content +func save(): + save_file(save_filename, JSON.print(save_data, "\t")) + func create_save(): save_data = {} save_data["map"] = 0 save_data["notes"] = [] - save_file(save_filename, JSON.print(save_data, "\t")) + save_data["times"] = {} + save() + +func load_save(): + var l = load_file(save_filename) + if l: + save_data = JSON.parse(l).result + print("save_data: " + JSON.print(save_data, "\t")) + if save_data.has("map"): + map_save = int(save_data["map"]) + if save_data.has("notes"): + notes = PoolIntArray(save_data["notes"]) + if save_data.has("times"): + map_times = Dictionary(save_data["times"]) + if save_data.has("deaths"): + deaths = Dictionary(save_data["deaths"]) + else: + create_save() + else: + print(save_filename + " not found") + create_save() func delete_save(): print("delete save") @@ -162,9 +202,10 @@ func delete_save(): func unlock(): map_save = 99 save_data["map"] = map_save - save_file(save_filename, JSON.print(save_data, "\t")) + save() func win(): + var ms = map_save if map_save < current_map + 1: map_save = current_map + 1 @@ -172,15 +213,29 @@ func win(): notes.append(current_map) notes.sort() + if !map_times.has(map_name) or (map_times.has(map_name) and (map_times[map_name] > map_clock)): + map_times[map_name] = map_clock + save_data["map"] = map_save save_data["notes"] = notes + save_data["times"] = map_times - save_file(save_filename, JSON.print(save_data, "\t")) + save() print("map complete, save_data: ", save_data) - set_map(current_map + 1) + if map_save > ms: + set_map(current_map + 1) + else: + scene_path = level_select_path start_reset() +func die(): + deaths[map_name] = 1 if !deaths.has(map_name) else (deaths[map_name] + 1) + save_data["deaths"] = deaths + save() + print("you died, save_data: ", save_data) + + # look into a folder and return a list of filenames without file extension func dir_list(path : String): var array = [] diff --git a/src/menu/StartMenu.gd b/src/menu/StartMenu.gd index 12084c8..6d4adf2 100644 --- a/src/menu/StartMenu.gd +++ b/src/menu/StartMenu.gd @@ -20,9 +20,6 @@ onready var node_audio_no : AudioStreamPlayer = $Audio/No func _ready(): switch_menu("main", true) - UI.keys(true, true, false) - TouchScreen.turn_arrows(true) - TouchScreen.show_keys(true, false, true) func _input(event): if !is_input: diff --git a/src/menu/credits.gd b/src/menu/credits.gd index 0b03696..dce069c 100644 --- a/src/menu/credits.gd +++ b/src/menu/credits.gd @@ -1,8 +1,7 @@ extends Node2D func _ready(): - UI.keys(false, true) - TouchScreen.show_keys(false, true, false) + pass func _input(event): if event.is_action_pressed("action"): diff --git a/src/menu/options/OptionsMenu.gd b/src/menu/options/OptionsMenu.gd index ceb9f2c..da93198 100644 --- a/src/menu/options/OptionsMenu.gd +++ b/src/menu/options/OptionsMenu.gd @@ -8,9 +8,6 @@ onready var node_audio_scroll : AudioStreamPlayer = $AudioScroll func _ready(): select_item(0) - UI.keys() - TouchScreen.turn_arrows(true) - TouchScreen.show_keys() func _input(event): var up = event.is_action_pressed("up") diff --git a/src/menu/select.gd b/src/menu/select.gd index 69e6bfb..7c52bf3 100644 --- a/src/menu/select.gd +++ b/src/menu/select.gd @@ -18,11 +18,6 @@ onready var node_audio_back : AudioStreamPlayer = $AudioBack # Called when the node enters the scene tree for the first time. func _ready(): - Shared.is_level_select = true - UI.keys() - TouchScreen.turn_arrows(false) - TouchScreen.show_keys() - # make screens screen = $Control/Screen.duplicate() $Control/Screen.queue_free() @@ -35,6 +30,18 @@ func _ready(): new.rect_position += Vector2(sx + (sy % 2) * 0.5, sy) * screen_dist new.get_node("Overlay/Label").text = Shared.maps[i] new.get_node("Overlay/Note").visible = Shared.notes.has(i) + + var map_name = Shared.maps[i].trim_suffix(".tscn") + var is_time := Shared.map_times.has(map_name) + new.get_node("Overlay/Time").visible = is_time + if is_time: + new.get_node("Overlay/Time/Label").text = str(Shared.map_times[map_name]).pad_decimals(2) + + var is_death : bool = Shared.deaths.has(map_name) and Shared.deaths[map_name] > 0 + new.get_node("Overlay/Death").visible = is_death + if is_death: + new.get_node("Overlay/Death/Label").text = str(Shared.deaths[map_name]) + screens.add_child(new) view_scene(new.get_node("Vis/ViewportContainer/Viewport"), Shared.map_path + Shared.maps[i]) diff --git a/src/stage/Stage.gd b/src/stage/Stage.gd index 463b60a..17b8db7 100644 --- a/src/stage/Stage.gd +++ b/src/stage/Stage.gd @@ -1,9 +1,9 @@ extends Node2D -func _ready(): - if !Shared.is_level_select: - TouchScreen.turn_arrows(false) - TouchScreen.show_keys(true, true, true, true, true) +#func _ready(): +# if !Shared.is_level_select: +# TouchScreen.turn_arrows(false) +# TouchScreen.show_keys(true, true, true, true, true) #class_name Stage #