95 lines
4.4 KiB
GDScript
95 lines
4.4 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["titanium"] = 600
|
|
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["titanium"] = 99
|
|
screen._refresh()
|
|
assert(not inv.unlock_slot("weapon",captain))
|
|
assert(captain.minerals.titanium == 99 and inv.unlocked_weapon_slots == 1)
|
|
captain.minerals["titanium"] = 600
|
|
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.name == "UnlockWeapon": button = node
|
|
assert(button != null and not button.disabled)
|
|
button.pressed.emit()
|
|
assert(inv.unlocked_weapon_slots == 2 and captain.minerals.titanium == 500)
|
|
assert(inv.can_move_item("cargo",0,"weapon",1))
|
|
assert(inv.unlock_slot("weapon",captain))
|
|
assert(captain.minerals.titanium == 0)
|
|
for mineral in ["iron", "aluminium", "titanium"]: captain.minerals[mineral] = 600
|
|
for index in 4:
|
|
var cost := 40 * (1 << index)
|
|
assert(inv.get_slot_unlock_cost("extension") == {"iron":cost, "aluminium":cost, "titanium":cost})
|
|
var stock: Dictionary = captain.minerals.duplicate()
|
|
captain.minerals.aluminium = cost - 1
|
|
assert(not inv.unlock_slot("extension", captain))
|
|
assert(captain.minerals.iron == stock.iron and captain.minerals.titanium == stock.titanium)
|
|
captain.minerals.aluminium = stock.aluminium
|
|
assert(inv.unlock_slot("extension",captain))
|
|
assert(inv.unlocked_weapon_slots == 3 and inv.unlocked_extension_slots == 5)
|
|
assert(captain.minerals.iron == 0 and captain.minerals.aluminium == 0 and captain.minerals.titanium == 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)
|
|
captain.minerals.iron = 100
|
|
captain.minerals.aluminium = 50
|
|
assert(inv.unlock_slot("cargo", captain) and inv.get_cargo_capacity() == 6)
|
|
assert(not inv.is_slot_unlocked("cargo", 6))
|
|
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 and inv.get_cargo_capacity() == 6)
|
|
inv.preserve_for_restart()
|
|
GameState.restart_inventory.erase("unlocked_cargo_slots")
|
|
GameState.restart_inventory["unlocked_cargo_rows"] = 2
|
|
game.free()
|
|
game = preload("res://scenes/game/game.tscn").instantiate()
|
|
add_child(game)
|
|
await settle()
|
|
inv = game.player.get_node("ShipInventory")
|
|
assert(inv.get_cargo_capacity() == 10, "Legacy two-row progress retains ten slots")
|
|
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, new resource costs, doubling extensions, single cargo slot, legacy migration, limits 3/5, restart persistence, new run reset")
|
|
get_tree().quit()
|