diff --git a/items/active_items/active_item.gd b/items/active_items/active_item.gd index 4840798..95ecd2b 100644 --- a/items/active_items/active_item.gd +++ b/items/active_items/active_item.gd @@ -15,7 +15,7 @@ class_name ActiveItem extends Item active_item_uses.add_child(uses_left_icon.instantiate()) func collect() -> bool: - if (player.active_item == null): + if (player.active_item == null or (player.active_item.item_name == item_name and player.active_item.uses < uses)): player.active_item = self uses = uses actually_collect() @@ -36,7 +36,8 @@ func trigger_activation(): func activate(): assert(false) -func remove(): +func remove(reset_player_active = true): uses = 0 - player.active_item = null + if reset_player_active: + player.active_item = null self.queue_free() diff --git a/items/active_items/horizontal_dash/horizontal_dash.gd b/items/active_items/horizontal_dash/horizontal_dash.gd index 599d6eb..134f3c4 100644 --- a/items/active_items/horizontal_dash/horizontal_dash.gd +++ b/items/active_items/horizontal_dash/horizontal_dash.gd @@ -21,10 +21,11 @@ func activate(): dash_dir = player.earth_aligner.global_from_local(Vector2.RIGHT * player.facing * 1600) player.inv_time = max(player.inv_time, dash_time) -func remove(): +func remove(reset_player_active = true): if(dash_timer != null): - player.active_item = null + if reset_player_active: + player.active_item = null await dash_timer.timeout - super() + super(false) else: super() diff --git a/items/active_items/updash/updash.gd b/items/active_items/updash/updash.gd index b979af5..d250d3c 100644 --- a/items/active_items/updash/updash.gd +++ b/items/active_items/updash/updash.gd @@ -1,5 +1,6 @@ extends ActiveItem var cooldown = 10 +var timer : SceneTreeTimer func actually_collect(): player.set_cooldown(cooldown) @@ -8,5 +9,13 @@ func activate(): $UpdashSound.play() player.activate_cooldown() player.reset_to_velocity = Vector2(0,1) - await get_tree().create_timer(0.1).timeout + timer = get_tree().create_timer(0.1) + await timer.timeout player.reset_to_velocity = Vector2(0, -2400) + +func remove(reset_player_active = true): + if reset_player_active: + player.active_item = null + if timer != null and timer.time_left > 0: + await timer.timeout + super(false)