extends Node2D const PICKUP_RADIUS := 48.0 const ATTRACTION_RADIUS := 150.0 var item: ItemInstance var _player: CharacterBody2D var _label: Label func _ready() -> void: add_to_group("loot") _player = get_parent().get_node_or_null("PlayerShip") as CharacterBody2D _label = Label.new() _label.position = Vector2(-110, 18) _label.size = Vector2(220, 44) _label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER _label.add_theme_font_size_override("font_size", 11) _label.add_theme_color_override("font_color", item.get_rarity_color()) _label.text = item.definition.display_name add_child(_label) queue_redraw() func _draw() -> void: if item == null: return var color := item.get_rarity_color() draw_circle(Vector2.ZERO, 15.0, Color(color, 0.16)) draw_arc(Vector2.ZERO, 15.0, 0.0, TAU, 32, color, 2.0, true) draw_colored_polygon(PackedVector2Array([Vector2(0, -9), Vector2(8, 0), Vector2(0, 9), Vector2(-8, 0)]), color) func _physics_process(delta: float) -> void: if not is_instance_valid(_player) or bool(_player.get("_is_destroyed")): return var distance := global_position.distance_to(_player.global_position) if distance > ATTRACTION_RADIUS: return var inventory := _player.get_node("ShipInventory") as ShipInventory if inventory.get_cargo_used() >= ShipInventory.CARGO_SIZE: _label.text = "%s\nMagazyn pełny" % item.definition.display_name return _label.text = item.definition.display_name if distance <= PICKUP_RADIUS: if inventory.add_item(item): set_physics_process(false) queue_free() else: global_position = global_position.move_toward(_player.global_position, 180.0 * delta)