extends Interactable class_name ItemObject const ITEM_AREA_WIDTH = 20 const ITEM_SPRITE_SIZE = 40. const SPRITE_SCENE : PackedScene = preload("res://entities/interactables/item_object/item_object_sprite.tscn") @export var item : Item : set(_item): item = _item if object_sprite: object_sprite.apply_texture_to_sprite(item.icon, ITEM_SPRITE_SIZE) @onready var object_sprite : ItemObjectSprite = generate_sprite() func _init(_item = null): if _item: item = _item func _ready(): generate_collision(ITEM_AREA_WIDTH) if item and object_sprite: object_sprite.apply_texture_to_sprite(item.icon, ITEM_SPRITE_SIZE) func pointer_text(): var name_suffix = "" if item is Seed: name_suffix = "Seed" if item is Package: name_suffix = "Package" return item.name + (" " + name_suffix if name_suffix else "") func interact_text(): return "Take" func inspector_info() -> Inspector.Info: return Inspector.Info.new( pointer_text(), item.description, item.icon ) func interact(player : Player) -> bool: var swapped_item = player.pick_item(item) if swapped_item: item = swapped_item else : pickup_animation(player) 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() ) object_sprite.pickup_animation() func generate_sprite() -> ItemObjectSprite: var spriteNode = SPRITE_SCENE.instantiate() as ItemObjectSprite add_child(spriteNode) if item: spriteNode.apply_texture_to_sprite( item.icon, ITEM_SPRITE_SIZE ) return spriteNode