Make decor occupy individual inventory slots
This commit is contained in:
parent
f2239d248a
commit
4196cda1d5
9 changed files with 516 additions and 79 deletions
|
|
@ -55,6 +55,31 @@ func _run() -> void:
|
|||
assert(bag.move_item_to_storage_slot(&"worms", shrimp_slot))
|
||||
assert(bag.get_storage_slot(&"worms") == shrimp_slot)
|
||||
assert(bag.get_storage_slot(&"shrimp") == worms_slot)
|
||||
|
||||
# Exhausting bait removes its owned record while retaining the unlock. A
|
||||
# later refill therefore receives whichever inventory slot happens to be free
|
||||
# at that moment. The tackle page must keep catalog order instead of exposing
|
||||
# that incidental refill order.
|
||||
for item_id: StringName in EXPECTED_BAIT_ORDER:
|
||||
if bag.get_quantity(item_id) == 0:
|
||||
assert(bag.add_item(item_id, 1))
|
||||
for item_id: StringName in EXPECTED_BAIT_ORDER:
|
||||
assert(bag.remove_item(item_id, 1))
|
||||
var reverse_refill_order: Array[StringName] = EXPECTED_BAIT_ORDER.duplicate()
|
||||
reverse_refill_order.reverse()
|
||||
for item_id: StringName in reverse_refill_order:
|
||||
assert(bag.add_item(item_id, 1))
|
||||
var refilled_items: Array[OwnedItem] = bag.get_unlocked_bait_items()
|
||||
refilled_items.sort_custom(
|
||||
func(first: OwnedItem, second: OwnedItem) -> bool:
|
||||
return bool(player_menu.call(
|
||||
"_sort_tackle_items", first, second
|
||||
))
|
||||
)
|
||||
var refilled_ids: Array[StringName] = []
|
||||
for owned: OwnedItem in refilled_items:
|
||||
refilled_ids.append(owned.item_id)
|
||||
assert(refilled_ids == EXPECTED_BAIT_ORDER)
|
||||
bag.free()
|
||||
player_menu.free()
|
||||
print("Tackle order validation: PASS")
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ func _run() -> void:
|
|||
assert(basic_cube != null)
|
||||
assert(basic_cube.icon != null)
|
||||
assert(basic_cube.hotbar_allowed)
|
||||
assert(not basic_cube.stackable)
|
||||
assert(bag.add_item(&"basic_cube"))
|
||||
assert(layout.is_item_in_inventory(&"basic_cube"))
|
||||
assert(hotbar.assign_item(0, &"basic_cube"))
|
||||
|
|
@ -73,6 +74,40 @@ func _run() -> void:
|
|||
assert(hotbar.get_selected_item_id() == &"basic_cube")
|
||||
assert(bag.remove_item(&"basic_cube"))
|
||||
|
||||
# Decor ownership remains an aggregate count for persistence, but each
|
||||
# physical piece receives its own movable inventory placement.
|
||||
assert(bag.add_item(&"basic_cube", 3))
|
||||
assert(bag.get_quantity(&"basic_cube") == 3)
|
||||
assert(layout.get_inventory_count() == 3)
|
||||
var decor_entries := layout.get_entries(
|
||||
PlayerInventoryLayout.InventoryContainer.INVENTORY
|
||||
)
|
||||
assert(decor_entries.size() == 3)
|
||||
var decor_keys: Dictionary[String, bool] = {}
|
||||
for entry: Dictionary in decor_entries:
|
||||
assert(StringName(str(entry.get("identity", ""))) == &"basic_cube")
|
||||
assert(int(entry.get("unit", -1)) >= 0)
|
||||
decor_keys[str(entry.get("key", ""))] = true
|
||||
assert(decor_keys.size() == 3)
|
||||
var moved_decor_key: String = str(decor_entries[1].get("key", ""))
|
||||
assert(layout.move_entry_key_to_first_free(
|
||||
moved_decor_key,
|
||||
PlayerInventoryLayout.InventoryContainer.STORAGE,
|
||||
))
|
||||
assert(layout.get_inventory_count() == 2)
|
||||
assert(layout.get_storage_count() == 1)
|
||||
var decor_layout_save := layout.to_save_data()
|
||||
assert(layout.move_entry_key_to_first_free(
|
||||
moved_decor_key,
|
||||
PlayerInventoryLayout.InventoryContainer.INVENTORY,
|
||||
))
|
||||
assert(layout.restore_from_save_data(decor_layout_save))
|
||||
assert(layout.get_inventory_count() == 2)
|
||||
assert(layout.get_storage_count() == 1)
|
||||
assert(bag.remove_item(&"basic_cube", 3))
|
||||
assert(layout.get_inventory_count() == 0)
|
||||
assert(layout.get_storage_count() == 0)
|
||||
|
||||
assert(bag.add_item(&"coffee", 3))
|
||||
assert(layout.get_inventory_count() == 1)
|
||||
assert(layout.get_inventory_capacity() == 9)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue