51 lines
2.6 KiB
GDScript
51 lines
2.6 KiB
GDScript
extends Node2D
|
|
var payload: Dictionary = {}
|
|
var _player: Node2D
|
|
var _label: Label
|
|
var _icon: Texture2D
|
|
var _time := 0.0
|
|
func _ready() -> void:
|
|
add_to_group("loot")
|
|
z_index = 18
|
|
_player = get_parent().get_node_or_null("PlayerShip")
|
|
_icon = preload("res://scripts/items/special_orbs.gd").icon(str(payload.orb)) if payload.has("orb") else load("res://assets/planets/expedition_navigation.png")
|
|
_label = Label.new()
|
|
_label.position = Vector2(-120,24)
|
|
_label.size.x = 240
|
|
_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
|
_label.add_theme_font_size_override("font_size",12)
|
|
_label.text = preload("res://scripts/items/special_orbs.gd").NAMES[str(payload.orb)] if payload.has("orb") else "Próbka do analizy" if payload.has("samples") else "Ładunek surowców z bazy" if payload.has("materials") else "Mapa odległych systemów · poz. %d" % int(payload.map.level)
|
|
if payload.has("samples"): _icon = load("res://assets/icons/resources/uranium.png")
|
|
if payload.has("materials"): _icon = load("res://assets/icons/resources/copper.svg")
|
|
add_child(_label)
|
|
preload("res://scripts/items/loot_reveal_effect.gd").spawn(get_parent(),position,Color("b991ff"),3)
|
|
func _process(delta: float) -> void:
|
|
_time += delta
|
|
queue_redraw()
|
|
func _draw() -> void:
|
|
var color := Color("b991ff") if payload.has("map") else Color("f5cf82")
|
|
draw_circle(Vector2.ZERO,27+sin(_time*3)*2,Color(color,0.15))
|
|
draw_arc(Vector2.ZERO,24,_time,_time+TAU*0.8,40,color,1.5,true)
|
|
if _icon != null: draw_texture_rect(_icon,Rect2(-21,-21,42,42),false)
|
|
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 <= 48:
|
|
var progress: Resource = GameState.captain.expedition
|
|
if payload.has("samples"): progress.analysis_samples += int(payload.samples)
|
|
if payload.has("materials"):
|
|
for key in payload.materials:
|
|
GameState.captain.minerals[key] = int(GameState.captain.minerals.get(key,0)) + int(payload.materials[key])
|
|
GameState.captain.emit_changed()
|
|
if payload.has("map"): progress.distant_maps[str(payload.map.id)] = payload.map.duplicate(true)
|
|
if payload.has("orb"):
|
|
var id := str(payload.orb)
|
|
var inventory := _player.get_node("ShipInventory")
|
|
if not inventory.add_item(preload("res://scripts/items/special_orbs.gd").create_item(id)):
|
|
_label.text = "%s\nŁadownia pełna" % preload("res://scripts/items/special_orbs.gd").NAMES[id]
|
|
return
|
|
progress.emit_changed()
|
|
set_physics_process(false)
|
|
queue_free()
|
|
elif distance < 180: global_position = global_position.move_toward(_player.global_position,200*delta)
|