extends Node2D @onready var player = get_node("/root/Game/Player") @onready var bar = get_node("/root/Game/CanvasLayer/ProgressBar") signal leveled_up @export var fruit_drop_threshold: int = 7 @export var fruit_drop_ceiling: int = 15 # Called when the node enters the scene tree for the first time. func _ready() -> void: bar.max_value = player.max_xp pass # Replace with function body. # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: pass func on_enemy_died(enemy): call_deferred("drop_item", enemy) var enemy_xp = enemy.xp player.current_xp += enemy.xp bar.value = player.current_xp if player.current_xp >= player.max_xp: leveled_up.emit() player.max_xp = player.max_xp * 1.3 bar.max_value = player.max_xp player.current_xp = 0 bar.value = 0 player.level += 1 func drop_item(enemy): if not is_instance_valid(enemy): return var fruit_count = get_children().filter(func(c): return c is DropsBase).size() for entry in enemy.drop_table: var effective_chance = entry.chance if fruit_count >= fruit_drop_ceiling: continue elif fruit_count > fruit_drop_threshold: var scale = 1.0 - float(fruit_count - fruit_drop_threshold) / float(fruit_drop_ceiling - fruit_drop_threshold) effective_chance *= scale if randf() < effective_chance: var drop = entry.drop.instantiate() drop.global_position = enemy.global_position add_child(drop)