40 lines
1008 B
GDScript
40 lines
1008 B
GDScript
extends Node2D
|
|
|
|
@onready var player = get_node("/root/Game/Player")
|
|
@onready var bar = get_node("/root/Game/CanvasLayer/ProgressBar")
|
|
signal leveled_up
|
|
|
|
# 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
|
|
for entry in enemy.drop_table:
|
|
if randf() < entry.chance:
|
|
var drop = entry.drop.instantiate()
|
|
drop.global_position = enemy.global_position
|
|
add_child(drop)
|