Item void

This commit is contained in:
Rendo 2025-10-17 01:11:01 +05:00
commit fa6212400b
7 changed files with 43 additions and 29 deletions

View file

@ -1,16 +1,12 @@
[gd_scene load_steps=8 format=3 uid="uid://dpsrwmum6rbmi"] [gd_scene load_steps=6 format=3 uid="uid://dpsrwmum6rbmi"]
[ext_resource type="Script" uid="uid://bbd7o2st8kmgl" path="res://scripts/structure.gd" id="1_818vg"] [ext_resource type="Script" uid="uid://bbd7o2st8kmgl" path="res://scripts/structure.gd" id="1_818vg"]
[ext_resource type="Script" uid="uid://bd4ojfqrl8idm" path="res://scripts/inventory/inventory_slot.gd" id="2_y1ram"] [ext_resource type="Script" uid="uid://conadqnb0asi0" path="res://scripts/inventory/void_inventory.gd" id="3_y1ram"]
[ext_resource type="Script" uid="uid://1scdy7mttx5h" path="res://scripts/inventory/storage.gd" id="3_lldoj"]
[ext_resource type="Script" uid="uid://dwx8y8c6guldd" path="res://scripts/structures/trash_can.gd" id="4_mfdbk"]
[ext_resource type="Texture2D" uid="uid://gfkhedfdi7ug" path="res://sprites/atlasses/Popekko.png" id="5_y1ram"] [ext_resource type="Texture2D" uid="uid://gfkhedfdi7ug" path="res://sprites/atlasses/Popekko.png" id="5_y1ram"]
[sub_resource type="Resource" id="Resource_fvoq6"] [sub_resource type="Resource" id="Resource_818vg"]
resource_local_to_scene = true script = ExtResource("3_y1ram")
script = ExtResource("3_lldoj") metadata/_custom_type_script = "uid://conadqnb0asi0"
capacity = 1
metadata/_custom_type_script = "uid://1scdy7mttx5h"
[sub_resource type="AtlasTexture" id="AtlasTexture_lldoj"] [sub_resource type="AtlasTexture" id="AtlasTexture_lldoj"]
atlas = ExtResource("5_y1ram") atlas = ExtResource("5_y1ram")
@ -18,10 +14,7 @@ region = Rect2(80, 0, 16, 16)
[node name="TrashCan" type="Node2D"] [node name="TrashCan" type="Node2D"]
script = ExtResource("1_818vg") script = ExtResource("1_818vg")
inventory = SubResource("Resource_fvoq6") inventory = SubResource("Resource_818vg")
[node name="Can" type="Node2D" parent="."]
script = ExtResource("4_mfdbk")
[node name="Sprite2D" type="Sprite2D" parent="."] [node name="Sprite2D" type="Sprite2D" parent="."]
texture = SubResource("AtlasTexture_lldoj") texture = SubResource("AtlasTexture_lldoj")

View file

@ -20,6 +20,7 @@ class_name InventorySlot
amount = 0 amount = 0
return return
if held_item == null: if held_item == null:
amount = 0
return return
if value > held_item.stack_size: if value > held_item.stack_size:
amount = held_item.stack_size amount = held_item.stack_size
@ -66,7 +67,7 @@ func as_stack() -> Stack:
func can_be_merged(item : Item) -> bool: func can_be_merged(item : Item) -> bool:
if filter != null: if filter != null:
return filter.is_equal(item) return filter.is_equal(item)
if amount == 0: if amount <= 0:
return true return true
return item == held_item return item == held_item

View file

@ -44,7 +44,7 @@ func add(stack: Stack, _context: InventoryContext = null) -> Stack:
if stack.is_valid() == false: if stack.is_valid() == false:
return null return null
for i in range(len(internal_array)): for i in range(len(internal_array)):
if internal_array[i].held_item == null or internal_array[i].held_item == stack.held_item: if internal_array[i].can_be_merged(stack.held_item):
stack_added.emit(stack,i) stack_added.emit(stack,i)
internal_array[i].merge_stack(stack) internal_array[i].merge_stack(stack)
if stack.is_valid() == false: if stack.is_valid() == false:
@ -54,13 +54,13 @@ func add(stack: Stack, _context: InventoryContext = null) -> Stack:
func can_add(item : Item = null, _context: InventoryContext = null) -> bool: func can_add(item : Item = null, _context: InventoryContext = null) -> bool:
if item == null: if item == null:
for i in range(capacity): for i in range(capacity):
return internal_array[i].amount == 0 if internal_array[i].can_be_merged(item):
return true
return false return false
else: else:
for i in range(capacity): for i in range(capacity):
if internal_array[i].amount == 0: if internal_array[i].can_be_merged(item):
return (internal_array[i].filter != null and internal_array[i].filter.is_equal(item)) or internal_array[i].filter == null return true
return internal_array[i].held_item.is_equal(item)
return false return false
## Tries to take first item. Returns null if no items in inventory ## Tries to take first item. Returns null if no items in inventory

View file

@ -0,0 +1,29 @@
extends Inventory
## Base class for simple storages with no differentiation.
class_name VoidInventory
## Tries to add an item into inventory. Returns not stored stack of item.
func add(stack : Stack, context: InventoryContext = null) -> Stack:
return null
## Returns if conditions of adding are met
func can_add(item : Item = null, context: InventoryContext = null) -> bool:
return true
## Tries to take first item. Returns null if no items in inventory
func pop() -> Stack:
return null
func peek() -> Stack:
return null
## Tries to take certain item from inventory. Returns null if no item found
func take(item : Item,amount: int) -> Stack:
return null
## Finds first entry of item. Returns -1 if no item found
func find(item : Item) -> int:
return -1

View file

@ -0,0 +1 @@
uid://conadqnb0asi0

View file

@ -1,9 +0,0 @@
extends StructureBehaviour
@onready var inventory : Storage = structure_parent.inventory
func _ready() -> void:
inventory.stack_added.connect(on_stack_added)
func on_stack_added(_stack : Stack, _position: int) -> void:
inventory.internal_array[0].amount = 0

View file

@ -1 +0,0 @@
uid://dwx8y8c6guldd