Randoloot/tests/items/energy_bank_test.gd
2026-10-16 20:24:12 +02:00

66 lines
2.7 KiB
GDScript

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()