Randoloot/tests/ships/slot_unlock_test.gd
2026-10-18 14:46:34 +02:00

71 lines
3.1 KiB
GDScript

extends Node
func settle() -> void:
for frame in 5: await get_tree().process_frame
func _ready() -> void:
GameState.start_new_run()
GameState.selected_ship_path = "res://assets/Ships/player/bastion.png"
var game := preload("res://scenes/game/game.tscn").instantiate()
add_child(game)
await settle()
var inv: ShipInventory = game.player.get_node("ShipInventory")
var captain := GameState.captain
assert(inv.unlocked_weapon_slots == 1 and inv.unlocked_extension_slots == 1)
assert(inv.is_slot_unlocked("weapon",0) and not inv.is_slot_unlocked("weapon",1))
var weapon: ItemInstance = inv.weapon_slots[0]
inv.cargo[0] = weapon
assert(not inv.can_move_item("cargo",0,"weapon",1))
var extension: ItemInstance = preload("res://scripts/items/item_generator.gd").generate_for_definition(preload("res://resources/items/teleport.tres"),1)
inv.cargo[1] = extension
assert(inv.can_move_item("cargo",1,"extension",0))
assert(not inv.can_move_item("cargo",1,"extension",1))
captain.minerals["iron"] = 100
assert(not inv.unlock_slot("weapon",captain),"Unlock requires docking")
assert(captain.minerals.iron == 100)
var manager := game.get_node("PlanetExpeditions")
manager.open_freighter()
var screen: Control = manager.screen
screen._select_section("hangar")
captain.minerals["iron"] = 9
screen._refresh()
assert(not inv.unlock_slot("weapon",captain))
assert(captain.minerals.iron == 9 and inv.unlocked_weapon_slots == 1)
captain.minerals["iron"] = 60
screen._refresh()
await settle()
await RenderingServer.frame_post_draw
get_viewport().get_texture().get_image().save_png("res://artifacts/hangar_slot_unlock.png")
var button: Button
for node in screen._content.find_children("*","Button",true,false):
if node.text.begins_with("ODBLOKUJ SLOT BRONI"): button = node
assert(button != null and not button.disabled)
button.pressed.emit()
assert(inv.unlocked_weapon_slots == 2 and captain.minerals.iron == 50)
assert(inv.can_move_item("cargo",0,"weapon",1))
assert(inv.unlock_slot("weapon",captain))
for index in 4: assert(inv.unlock_slot("extension",captain))
assert(inv.unlocked_weapon_slots == 3 and inv.unlocked_extension_slots == 5)
assert(captain.minerals.iron == 0)
captain.minerals["iron"] = 100
assert(not inv.unlock_slot("weapon",captain) and not inv.unlock_slot("extension",captain))
assert(not inv.unlock_slot("module",captain) and captain.minerals.iron == 100)
inv.preserve_for_restart()
screen.closed.emit()
game.free()
game = preload("res://scenes/game/game.tscn").instantiate()
add_child(game)
await settle()
inv = game.player.get_node("ShipInventory")
assert(inv.unlocked_weapon_slots == 3 and inv.unlocked_extension_slots == 5)
game.free()
GameState.start_new_run()
game = preload("res://scenes/game/game.tscn").instantiate()
add_child(game)
await settle()
inv = game.player.get_node("ShipInventory")
assert(inv.unlocked_weapon_slots == 1 and inv.unlocked_extension_slots == 1)
game.free()
print("SLOT UNLOCK PASS: starter 1/1, locked mounting, dock requirement, affordability, hangar button, 10 iron per slot, limits 3/5, restart persistence, new run reset")
get_tree().quit()