extends Node2D const PLAYER := preload("res://scenes/game/player_ship.tscn") const BANK := preload("res://resources/items/energy_bank.tres") func _ready() -> void: GameState.start_new_run() var ship := PLAYER.instantiate() as CharacterBody2D ship.name = "PlayerShip" add_child(ship) ship.set_physics_process(false) ship.get_node("WeaponController").set_physics_process(false) var inventory := ship.get_node("ShipInventory") as ShipInventory inventory.cargo.fill(null) var item := ItemInstance.new() item.definition = BANK var pickup := Node2D.new() pickup.set_script(preload("res://scripts/items/loot_pickup.gd")) pickup.set("item", item) add_child(pickup) pickup.set_physics_process(false) var equipment := ItemInstance.new() equipment.definition = preload("res://resources/items/plasma_cannon.tres") inventory.cargo.fill(equipment) pickup.call("_physics_process", 0.1) assert(pickup.is_queued_for_deletion()) assert(inventory.get_cargo_used() == ShipInventory.CARGO_SIZE) assert(inventory.get_energy_bank_count() == 1) assert(not inventory.use_energy_bank()) assert(inventory.get_energy_bank_count() == 1) ship.set("max_energy", 250.0) ship.set("energy", 100.0) assert(inventory.use_energy_bank()) assert(is_equal_approx(float(ship.get("energy")), 125.0)) assert(inventory.get_energy_bank_count() == 0) assert(not inventory.use_energy_bank()) assert(inventory.add_item(item)) ship.set("energy", 240.0) ship.set("is_docked", true) assert(not inventory.use_energy_bank()) ship.set("is_docked", false) var press := InputEventAction.new() press.action = "use_energy_bank" press.pressed = true ship.call("_unhandled_key_input", press) assert(is_equal_approx(float(ship.get("energy")), 250.0)) assert(inventory.get_energy_bank_count() == 0) assert(inventory.add_item(item)) inventory.preserve_for_restart() assert(GameState.restart_inventory["energy_banks"] == 1) assert(GameState.restart_inventory["cargo"][0].definition != BANK) # Old slot-based banks are converted once when restoring a ship. GameState.restart_inventory["cargo"][0] = item var restored := PLAYER.instantiate() as CharacterBody2D restored.name = "RestoredShip" add_child(restored) restored.set_physics_process(false) restored.get_node("WeaponController").set_physics_process(false) var restored_inventory := restored.get_node("ShipInventory") as ShipInventory assert(restored_inventory.get_energy_bank_count() == 2) assert(restored_inventory.cargo[0] == null) assert(restored_inventory.get_cargo_used() == ShipInventory.CARGO_SIZE - 1) assert(is_equal_approx(preload("res://resources/items/gamma_cannon.tres").weapon_range, 400.0)) print("ENERGY_BANK_TEST: PASS (pickup, full cargo, 10% maximum, cap, full energy, empty cargo, docked, R, persistence, gamma range)") get_tree().quit()