Files
aarpg/items/item_pickup/item_pickup.gd
Andriy Yednarovych e877c5f058 init
2026-02-22 19:26:26 +01:00

47 lines
1.1 KiB
GDScript

@tool
class_name ItemPickup extends CharacterBody2D
signal picked_up
@export var item_data: ItemData :
set = set_item_data
@onready var area: Area2D = $Area2D
@onready var sprite: Sprite2D = $Sprite2D
@onready var audio_player: AudioStreamPlayer2D = $AudioStreamPlayer2D
func _ready() -> void:
update_texture()
if Engine.is_editor_hint():
return
area.body_entered.connect(on_body_enter)
func _physics_process(delta: float) -> void:
var collision_info := move_and_collide(velocity * delta)
if collision_info:
velocity = velocity.bounce(collision_info.get_normal())
velocity -= velocity * delta * 4
func on_body_enter(body: Node2D) -> void:
if !item_data or body is not Player:
return
if PlayerManager.INVENTORY_DATA.add_item(item_data):
item_picked_up()
func item_picked_up() -> void:
area.body_entered.disconnect(on_body_enter)
audio_player.play()
visible = false
picked_up.emit()
await audio_player.finished
queue_free()
func update_texture() -> void:
if !item_data or !sprite:
return
sprite.texture = item_data.texture
func set_item_data(new_item_data: ItemData) -> void:
item_data = new_item_data
update_texture()