This commit is contained in:
Rendo 2025-10-17 18:22:49 +05:00
commit 074bb21ffd
18 changed files with 99 additions and 51 deletions

View file

@ -14,12 +14,10 @@ class_name BeltInventory
get:
return capacity
@export var progress_speed : float = 1.0
@export var pop_treshold : float = 0.99
## :3
@export_storage var internal_array : Array[InventorySlot] = []
@export_storage var progress_array : Array[float] = []
func _init() -> void:
super()
@ -27,7 +25,6 @@ func _init() -> void:
func deferred_init():
internal_array.resize(capacity)
progress_array.resize(capacity)
for i in range(capacity):
internal_array[i] = InventorySlot.new()
@ -74,30 +71,21 @@ func can_add(_item : Item = null, context : InventoryContext = null) -> bool:
func pop() -> Stack:
if internal_array[capacity-1].amount == 0:
return null
if progress_array[capacity-1] < pop_treshold:
return null
stack_taken.emit(internal_array[capacity-1], capacity-1)
return internal_array[capacity-1].extract()
func peek() -> Stack:
if internal_array[capacity-1].amount == 0:
return null
if progress_array[capacity-1] < pop_treshold:
return null
return internal_array[capacity-1].as_stack()
func advance(delta : float) -> void:
var progress_flag : bool = false
for i in range(capacity):
if internal_array[i].amount == 0:
continue
if progress_array[i] >= 1:
progress_flag = true
continue
progress_array[i] += delta * progress_speed
if progress_flag:
sort()
func advance() -> void:
for i in range(capacity-1,0,-1):
if internal_array[i].amount == 0 and internal_array[0].updated == false:
var extracted_stack = internal_array[i-1].extract()
internal_array[i].merge_stack(extracted_stack)
if extracted_stack != null and extracted_stack.is_valid():
internal_array[i-1].merge_stack(extracted_stack)
## Tries to take certain item from inventory. Returns null if no item found
func take(item: Item,amount: int) -> Stack:
@ -108,12 +96,6 @@ func take(item: Item,amount: int) -> Stack:
stack_taken.emit(extracted,found)
return extracted
func sort() -> void:
for i in range(capacity-1,0,-1):
if progress_array[i-1] >= 1.0 and internal_array[i].amount == 0:
progress_array[i-1] = 0
progress_array[i] = 0
var extracted_stack = internal_array[i-1].extract()
internal_array[i].merge_stack(extracted_stack)
if extracted_stack.is_valid():
internal_array[i-1].merge_stack(extracted_stack)
func refresh() -> void:
for i in range(capacity):
internal_array[i].updated = false