90 lines
4.2 KiB
GDScript
90 lines
4.2 KiB
GDScript
extends Node
|
|
var screen: Control
|
|
|
|
func settle() -> void:
|
|
for frame in 5: await get_tree().process_frame
|
|
|
|
func find_button(prefix: String) -> Button:
|
|
for node in screen._content.find_children("*","Button",true,false):
|
|
if node.text.begins_with(prefix): return node
|
|
return null
|
|
|
|
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.get_cargo_capacity() == 5 and inv.unlocked_cargo_rows == 1)
|
|
var items: Array[ItemInstance] = []
|
|
for index in 6:
|
|
items.append(preload("res://scripts/items/item_generator.gd").generate_for_definition(preload("res://resources/items/reinforced_shield.tres"),index+1))
|
|
for index in 5: assert(inv.add_item(items[index]))
|
|
assert(not inv.add_item(items[5]) and inv.cargo[5] == null)
|
|
assert(not inv.can_move_item("cargo",0,"cargo",5))
|
|
captain.minerals["iron"] = 100
|
|
assert(not inv.unlock_cargo_row(captain))
|
|
assert(not inv.store_on_freighter(0,items[0],captain))
|
|
var manager := game.get_node("PlanetExpeditions")
|
|
manager.open_freighter()
|
|
screen = manager.screen
|
|
screen._select_section("storage")
|
|
assert(find_button("ZBUDUJ SKŁAD") != null)
|
|
assert(not inv.store_on_freighter(0,items[0],captain))
|
|
find_button("ZBUDUJ SKŁAD").pressed.emit()
|
|
assert(find_button("ODŁÓŻ") != null)
|
|
find_button("ODŁÓŻ").pressed.emit()
|
|
assert(captain.expedition.freighter_storage[0] == items[0])
|
|
assert(inv.cargo[0] == null)
|
|
assert(not inv.store_on_freighter(0,items[0],captain))
|
|
assert(inv.add_item(items[5]))
|
|
assert(not inv.retrieve_from_freighter(0,items[0],captain))
|
|
assert(captain.expedition.freighter_storage.size() == 1)
|
|
screen._refresh()
|
|
assert(find_button("← ODBIERZ").disabled)
|
|
screen._select_section("hangar")
|
|
captain.minerals["iron"] = 9
|
|
assert(not inv.unlock_cargo_row(captain) and captain.minerals.iron == 9)
|
|
captain.minerals["iron"] = 30
|
|
screen._refresh()
|
|
find_button("ODBLOKUJ RZĄD").pressed.emit()
|
|
assert(inv.get_cargo_capacity() == 10 and captain.minerals.iron == 20)
|
|
screen._select_section("storage")
|
|
find_button("← ODBIERZ").pressed.emit()
|
|
assert(inv.cargo[5] == items[0] and captain.expedition.freighter_storage.is_empty())
|
|
assert(inv.store_on_freighter(1,items[1],captain))
|
|
assert(inv.store_on_freighter(2,items[2],captain))
|
|
assert(not inv.retrieve_from_freighter(0,items[2],captain),"Stale buttons cannot transfer another item")
|
|
screen._refresh()
|
|
await settle()
|
|
await RenderingServer.frame_post_draw
|
|
get_viewport().get_texture().get_image().save_png("res://artifacts/freighter_storage.png")
|
|
assert(inv.unlock_cargo_row(captain) and inv.unlock_cargo_row(captain))
|
|
assert(inv.get_cargo_capacity() == 20 and captain.minerals.iron == 0)
|
|
captain.minerals["iron"] = 10
|
|
assert(not inv.unlock_cargo_row(captain) and captain.minerals.iron == 10)
|
|
assert(ResourceSaver.save(captain.expedition,"user://freighter_storage_test.tres") == OK)
|
|
var restored: Resource = ResourceLoader.load("user://freighter_storage_test.tres","",ResourceLoader.CACHE_MODE_IGNORE)
|
|
assert(restored.freighter_storage.size() == 2)
|
|
assert(restored.freighter_storage[0].item_level == items[1].item_level)
|
|
DirAccess.remove_absolute("user://freighter_storage_test.tres")
|
|
inv.preserve_for_restart()
|
|
screen.closed.emit()
|
|
assert(not inv.retrieve_from_freighter(0,items[1],captain))
|
|
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() == 20 and captain.expedition.freighter_storage.size() == 2)
|
|
game.get_node("PlanetExpeditions").open_freighter()
|
|
assert(inv.retrieve_from_freighter(0,items[1],captain))
|
|
game.get_node("PlanetExpeditions").screen.closed.emit()
|
|
game.free()
|
|
GameState.start_new_run()
|
|
assert(GameState.captain.expedition.freighter_storage.is_empty())
|
|
print("FREIGHTER STORAGE PASS: 5 starting cargo cells, locked loot/drop, row costs/limits, construction, bidirectional transfers, full cargo, stale buttons, resource serialization, system persistence, new run reset")
|
|
get_tree().quit()
|