spaceship/tests/test_generic_inventory.gd

48 lines
2.2 KiB
GDScript3
Raw Normal View History

2026-08-14 20:32:58 +02:00
extends SceneTree
const INVENTORY = preload("res://Inventory.gd")
const TEST_RESOURCE: String = "crystal"
func _initialize() -> void:
var game_state: Node = root.get_node("GameState")
game_state.buildings.clear()
game_state.bank_inventory.set_amount(TEST_RESOURCE, 40)
game_state.fleet_inventory.set_amount(TEST_RESOURCE, 0)
var mothership_id: int = game_state.add_building(GameState.BUILDING_MOTHERSHIP, Vector2.ZERO)
var crafter_id: int = game_state.add_building(GameState.BUILDING_SHIP_CRAFTER, Vector2(100, 0))
if game_state.transfer_resource_to_fleet(mothership_id, TEST_RESOURCE, 15) != 15:
return _fail("third resource could not move from bank to fleet")
if game_state.transfer_resource_to_building(crafter_id, TEST_RESOURCE, 9) != 9:
return _fail("third resource could not move from fleet to building")
if game_state.transfer_resource_to_fleet(crafter_id, TEST_RESOURCE, 4) != 4:
return _fail("third resource could not move back out of building")
if game_state.banked_resource(TEST_RESOURCE) != 25 \
or game_state.fleet_resource(TEST_RESOURCE) != 10 \
or game_state.building_resource(crafter_id, TEST_RESOURCE) != 5:
return _fail("third-resource amounts were not conserved")
var limited: RefCounted = INVENTORY.new({}, 10)
limited.resource_capacities[TEST_RESOURCE] = 6
if limited.deposit(TEST_RESOURCE, 99) != 6 or limited.deposit("water", 99) != 4:
return _fail("total or per-resource capacity was not enforced")
var legacy_id: int = game_state.next_building_id
game_state.next_building_id += 1
game_state.buildings.append({"id": legacy_id, "type": GameState.BUILDING_SHIP_CRAFTER,
"position": Vector2.ZERO, "stock": 7, "gas_stock": 3, "orders": []})
if game_state.building_resource(legacy_id, GameState.RESOURCE_ORE) != 7 \
or game_state.building_resource(legacy_id, GameState.RESOURCE_GAS) != 3:
return _fail("legacy building stock was not migrated")
var migrated: Dictionary = game_state.find_building(legacy_id)
if migrated.has("stock") or migrated.has("gas_stock") or not migrated.has("inventory"):
return _fail("legacy fields remained after migration")
print("TEST_GENERIC_INVENTORY: PASS")
quit(0)
func _fail(message: String) -> void:
print("TEST_GENERIC_INVENTORY: FAIL (%s)" % message)
quit(1)