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) object_sprite.generate_particles(item.get_particles()) @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) object_sprite.generate_particles(item.get_particles()) func pointer_text() -> String: var name_suffix = "" if item is Seed: name_suffix = tr("SEED") if item is Package: name_suffix = tr("PACKAGE") return item.name + (" " + name_suffix if name_suffix else "") func interact_text(): return tr("TAKE") func card_info() -> CardInfo: return item.card_info() func interact(player : Player) -> bool: if player.can_pick_item(item): await pickup_animation(player.global_position) queue_free() player.pick_item(item) return true return false func pickup_animation(target_position: Vector2): available = false var tween: Tween = get_tree().create_tween() if object_sprite: object_sprite.pickup_animation() await tween.tween_property(self , "global_position", target_position, 0.2).finished Pointer.stop_inspect(self ) func generate_sprite() -> ItemObjectSprite: var sprite_node = SPRITE_SCENE.instantiate() as ItemObjectSprite add_child(sprite_node) if item: sprite_node.apply_texture_to_sprite( item.icon, ITEM_SPRITE_SIZE ) return sprite_node func save() -> EntityData: return ItemObjectData.new(self )