48 lines
1.7 KiB
GDScript
48 lines
1.7 KiB
GDScript
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", Color("f1f4f8"))
|
|
_label.text = item.definition.display_name
|
|
add_child(_label)
|
|
queue_redraw()
|
|
|
|
func _draw() -> void:
|
|
if item == null:
|
|
return
|
|
var background := item.get_background_color()
|
|
var border := item.get_type_color()
|
|
draw_circle(Vector2.ZERO, 15.0, background)
|
|
draw_arc(Vector2.ZERO, 15.0, 0.0, TAU, 32, border, 2.0, true)
|
|
draw_polyline(PackedVector2Array([Vector2(0, -8), Vector2(7, 0), Vector2(0, 8), Vector2(-7, 0), Vector2(0, -8)]), Color("f1f4f8"), 1.0, true)
|
|
|
|
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)
|