49 lines
1.0 KiB
GDScript
49 lines
1.0 KiB
GDScript
extends Interactable
|
|
class_name ItemObject
|
|
|
|
const ITEM_AREA_WIDTH = 10
|
|
const SPRITE_SCENE : PackedScene = preload("res://entities/interactables/item_object/item_object_sprite.tscn")
|
|
|
|
@export var item : Item :
|
|
set(_item):
|
|
item = _item
|
|
if sprite:
|
|
sprite.texture = item.icon
|
|
|
|
@onready var sprite : Sprite2D = generate_sprite()
|
|
|
|
func _init(_item = null):
|
|
if _item:
|
|
item = _item
|
|
|
|
func _ready():
|
|
generate_collision(10)
|
|
|
|
func interact(player : Player) -> bool:
|
|
if player.inventory.lenght() < player.inventory.max_items:
|
|
player.inventory.add_item(item)
|
|
pickup_animation(player)
|
|
else :
|
|
var swaped_item = player.inventory.swap_items(item)
|
|
item = swaped_item
|
|
|
|
return true
|
|
|
|
func pickup_animation(player : Player):
|
|
available = false
|
|
var tween : Tween = get_tree().create_tween()
|
|
|
|
tween.tween_property(self, "position", player.position, 0.2)
|
|
tween.tween_callback(
|
|
func():
|
|
queue_free()
|
|
)
|
|
|
|
func generate_sprite() -> Sprite2D:
|
|
var s = SPRITE_SCENE.instantiate() as Sprite2D
|
|
add_child(s)
|
|
|
|
s.texture = item.icon
|
|
|
|
return s
|