#Help with item system. Item does not pick up

1 messages · Page 1 of 1 (latest)

runic fable
#

All the relevant code:
Inventory.gd:


class_name Inv

signal update
@export var slots: Array[InvSlot]

func insert(item: InvItem):
    var itemslots = slots.filter(func(slot): return slot.item == item)
    if !itemslots.is_empty():
        itemslots[0].amount += 1
    else:
        var emptyslots = slots.filter(func(slot): return slot.item == null)
        if !emptyslots.is_empty():
            emptyslots[0].item = item
            emptyslots[0].amount = 1
    update.emit()```
#

inv_ui.gd


@onready var inv: Inv = preload("res://Inventory/playerinv.tres")
@onready var slots: Array = $NinePatchRect/GridContainer.get_children()

var is_open = false

func _ready():
    inv.update.connect(update_slots)
    update_slots()
    close()
    
func update_slots():
    for i in range(min(inv.slots.size(), slots.size())):
        slots[i].update(inv.slots[i])
    
    
func _process(delta: float) -> void:
    if Input.is_action_just_pressed("ui_menu"):
        if is_open:
            close()
        else:
            open()
    
func open():
    visible = true
    is_open = true
    
func close():
    visible = false
    is_open = false```
#

inv_ui_slot.gd:



@onready var item_visual: Sprite2D =  $CenterContainer/Panel/item_display
@onready var amount_text: Label = $CenterContainer/Panel/Label

func update(slot: InvSlot):
    if !slot.item:
        item_visual.visible = false
        amount_text.visible = false
    else:
        item_visual.visible = true
        item_visual.texture = slot.item.texture
        amount_text.visible = true
        amount_text.text= str(slot.amount)```
#

player.gd:

class_name player

var speed = 200  # speed in pixels/sec
    
@export var inv: Inv

func collect(item):
    inv.insert(item)


func _physics_process(delta):
    var direction = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
    velocity = direction * speed
    

    move_and_slide()
#

apple.gd:


@export var item: InvItem
var player = null


func _on_area_2d_body_entered(body: Node2D) -> void:
    print("bruh")
    if body.has_method("player"):
        player = body
        playercollect()
        await get_tree().create_timer(0.1).timeout
        queue_free()
        
func playercollect():
    player.collect(item)
#

Resources for the item:


class_name InvItem

@export var name: String = ""
@export var texture: Texture2D