47 lines
1.0 KiB
GDScript
47 lines
1.0 KiB
GDScript
@tool
|
|
class_name ItemDropper extends Node2D
|
|
|
|
const PICKUP = preload("res://items/item_pickup/item_pickup.tscn")
|
|
|
|
@export var item: ItemData : set = set_item_data
|
|
|
|
@onready var sprite: Sprite2D = $Sprite2D
|
|
@onready var dropped_data: PersistentDataHandler = $PersistentDataHandler
|
|
@onready var audio: AudioStreamPlayer = $AudioStreamPlayer
|
|
|
|
var dropped := false
|
|
|
|
func _ready() -> void:
|
|
if Engine.is_editor_hint():
|
|
update_texture()
|
|
return
|
|
sprite.visible = false
|
|
dropped_data.data_loaded.connect(on_data_loaded)
|
|
on_data_loaded()
|
|
|
|
func set_item_data(new_item: ItemData) -> void:
|
|
item = new_item
|
|
update_texture()
|
|
|
|
func update_texture() -> void:
|
|
if !Engine.is_editor_hint():
|
|
return
|
|
if item and sprite:
|
|
sprite.texture = item.texture
|
|
|
|
func on_data_loaded() -> void:
|
|
dropped = dropped_data.value
|
|
|
|
func drop_item() -> void:
|
|
if dropped:
|
|
return
|
|
dropped = true
|
|
var drop = PICKUP.instantiate() as ItemPickup
|
|
drop.item_data = item
|
|
add_child(drop)
|
|
drop.picked_up.connect(on_item_picked_up)
|
|
audio.play()
|
|
|
|
func on_item_picked_up() -> void:
|
|
dropped_data.set_value()
|