Randoloot/tests/abilities/scanner_test.gd
2026-10-11 21:39:53 +02:00

47 lines
2.0 KiB
GDScript

extends Node2D
const GENERATOR := preload("res://scripts/items/item_generator.gd")
func _ready() -> void:
GameState.start_new_run()
var ship := preload("res://scenes/game/player_ship.tscn").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
var scanner := GENERATOR.generate_for_definition(preload("res://resources/items/scanner.tres"), 5)
assert(scanner.get_addon_count() > 0)
assert(inventory.add_item(scanner))
assert(inventory.move_item("cargo", inventory.cargo.find(scanner), "module", 0))
var enemy := preload("res://scenes/game/enemy_ship.tscn").instantiate() as CharacterBody2D
enemy.position = Vector2(900, 0)
add_child(enemy)
enemy.set_physics_process(false)
for kind in ["asteroid", "wreck", "ruin"]:
var poi := StaticBody2D.new()
poi.set_script(preload("res://scripts/levels/exploration_poi.gd"))
poi.set("kind", kind)
poi.set("player", ship)
poi.position = Vector2(1500, 100)
add_child(poi)
poi.set_physics_process(false)
var maximum := float(ship.get("max_energy"))
ship.set("energy", maximum * 0.49)
assert(not ship.activate_ability(0))
ship.set("energy", maximum * 0.8)
assert(ship.activate_ability(0))
assert(is_equal_approx(ship.get("energy"), maximum * 0.3))
var layer := ship.get_node("ScannerOverlay") as CanvasLayer
var overlay := layer.get_child(0) as Control
assert(overlay.get("targets").size() == 4)
assert(overlay.mouse_filter == Control.MOUSE_FILTER_IGNORE)
assert(not ship.activate_ability(0))
await get_tree().process_frame
overlay.call("_process", 8.1)
await get_tree().process_frame
assert(not ship.has_node("ScannerOverlay"))
ship.set("energy", maximum * 0.5)
assert(ship.activate_ability(0))
assert(is_zero_approx(ship.get("energy")))
print("SCANNER_TEST: PASS loot addons, module activation, 50% max energy cost, four target types, repeat prevention, 8s expiry, reactivation")
get_tree().quit()