141 lines
6.8 KiB
GDScript
141 lines
6.8 KiB
GDScript
extends Node
|
|
|
|
const GAME := preload("res://scenes/game/game.tscn")
|
|
|
|
func _ready() -> void:
|
|
get_tree().create_timer(10.0).timeout.connect(func() -> void:
|
|
push_error("CAPTAIN_SHIP_DRAWER_TEST: timed out")
|
|
get_tree().quit(1)
|
|
)
|
|
GameState.start_new_run()
|
|
var game := GAME.instantiate() as Node2D
|
|
add_child(game)
|
|
await get_tree().process_frame
|
|
for enemy in get_tree().get_nodes_in_group("enemies"):
|
|
enemy.set_physics_process(false)
|
|
var ship := game.get_node("PlayerShip") as CharacterBody2D
|
|
ship.set_physics_process(false)
|
|
ship.get_node("WeaponController").set_physics_process(false)
|
|
var hud := game.get_node("HUD")
|
|
var root := hud.get_node("HUDRoot") as Control
|
|
var drawer := root.get_node("ShipDrawer") as Control
|
|
var toggle := root.get_node("ShipToggle") as Button
|
|
var captain := root.get_node("CaptainPanel")
|
|
assert(captain._collapsed and not captain.get_node("Contents/Skills").visible)
|
|
assert(not hud._debug_expanded and not hud.debug_info.visible)
|
|
assert(not hud._sidebar_open and not drawer.visible)
|
|
assert(not hud.inventory_panel.visible)
|
|
toggle.pressed.emit()
|
|
captain._toggle_collapsed()
|
|
await get_tree().create_timer(0.3).timeout
|
|
var equipment := drawer.get_node("Scroll/Contents/ShipEquipmentPanel")
|
|
assert(captain.get_parent() != equipment.get_parent())
|
|
assert(drawer.scale.is_equal_approx(Vector2.ONE * 0.8))
|
|
assert(hud.inventory_panel.scale.is_equal_approx(Vector2.ONE * 0.8))
|
|
assert(captain.get_node("Contents/PortraitRow/AvatarFrame/CaptainAvatar").texture != null)
|
|
assert(root.has_node("Cockpit"))
|
|
var cockpit := root.get_node("Cockpit") as Control
|
|
assert(cockpit.scale.is_equal_approx(Vector2.ONE * 0.85))
|
|
assert(cockpit.WEAPON_DISPLAY_ORDER == [0, 2, 1])
|
|
var old_position := ship.global_position
|
|
ship.global_position = ship.get_viewport().get_canvas_transform().affine_inverse() * (cockpit.position + Vector2(60, 30))
|
|
cockpit._process(1.0)
|
|
assert(is_equal_approx(cockpit.modulate.a, 0.18))
|
|
ship.global_position = old_position
|
|
cockpit._process(1.0)
|
|
assert(is_equal_approx(cockpit.modulate.a, 1.0))
|
|
var crafting := equipment.get_node("Contents/CraftingPanel")
|
|
assert(not crafting._details.visible)
|
|
var closed_height: float = drawer.size.y
|
|
crafting._toggle.pressed.emit()
|
|
await get_tree().process_frame
|
|
await get_tree().process_frame
|
|
assert(crafting._details.visible and drawer.size.y > closed_height)
|
|
GameState.captain.minerals.merge({"titanium": 1, "sulfur": 2, "iron": 1, "uranium": 1}, true)
|
|
GameState.captain.emit_changed()
|
|
var inv: ShipInventory = ship.get_node("ShipInventory")
|
|
var ammo_before := inv.ammunition
|
|
var missiles_before := inv.missile_ammunition
|
|
assert(not crafting._ammo.disabled and not crafting._missile.disabled)
|
|
crafting._ammo.pressed.emit()
|
|
assert(inv.ammunition == ammo_before + ShipInventory.AMMUNITION_CRAFT_AMOUNT)
|
|
crafting._missile.pressed.emit()
|
|
assert(inv.missile_ammunition == missiles_before + 1)
|
|
assert(GameState.captain.parts == 0 and crafting._ammo.disabled and crafting._missile.disabled)
|
|
crafting._toggle.pressed.emit()
|
|
await get_tree().process_frame
|
|
await get_tree().process_frame
|
|
assert(not crafting._details.visible and is_equal_approx(drawer.size.y, closed_height))
|
|
var expanded_height: float = captain.size.y
|
|
captain.get_node("Contents/Header/CollapseCaptain").pressed.emit()
|
|
await get_tree().process_frame
|
|
await get_tree().process_frame
|
|
assert(captain.size.y < expanded_height)
|
|
assert(root.get_node("DebugToggle").position.y >= captain.position.y + captain.size.y)
|
|
captain.get_node("Contents/Header/CollapseCaptain").pressed.emit()
|
|
await get_tree().process_frame
|
|
await get_tree().process_frame
|
|
assert(captain.get_node("Contents/Skills").visible)
|
|
assert(drawer.visible)
|
|
toggle.pressed.emit()
|
|
await get_tree().create_timer(0.3).timeout
|
|
assert(not drawer.visible)
|
|
toggle.pressed.emit()
|
|
await get_tree().create_timer(0.3).timeout
|
|
assert(drawer.visible and is_equal_approx(drawer.position.x + drawer.size.x * drawer.scale.x, root.size.x - 8.0))
|
|
GameState.captain.learning_points = 1
|
|
GameState.captain.emit_changed()
|
|
captain.get_node("Contents/Skills/gunner/Train_gunner").pressed.emit()
|
|
assert(GameState.captain.get_skill_rank("gunner") == 1)
|
|
equipment.get_node("Contents/InventoryButton").pressed.emit()
|
|
await get_tree().create_timer(0.3).timeout
|
|
var inventory_panel: Control = hud.get("inventory_panel")
|
|
assert(inventory_panel.visible and inventory_panel.get("_drawer_open"))
|
|
var inventory := ship.get_node("ShipInventory") as ShipInventory
|
|
var item := ItemInstance.new()
|
|
item.definition = preload("res://resources/items/engine_extension.tres")
|
|
assert(inventory.add_item(item))
|
|
assert(inventory.move_item("cargo", inventory.cargo.find(item), "module", 2))
|
|
assert(ship.get("max_speed") > ship.get("base_max_speed"))
|
|
var equipment_slot := equipment.get_node("Contents/EquipmentLayout/Module3")
|
|
assert(is_equal_approx(equipment_slot.size.x, equipment_slot.size.y))
|
|
assert(equipment_slot.get_node("ItemIcon").texture == item.definition.icon)
|
|
assert(item.definition.icon != null)
|
|
toggle.pressed.emit()
|
|
await get_tree().create_timer(0.3).timeout
|
|
assert(not drawer.visible and not inventory_panel.visible)
|
|
toggle.pressed.emit()
|
|
await get_tree().create_timer(0.3).timeout
|
|
assert(drawer.visible and not inventory_panel.visible)
|
|
var original_size := root.size
|
|
root.size = Vector2(root.size.x, 400)
|
|
hud.call("_layout_sidebar")
|
|
await get_tree().process_frame
|
|
await get_tree().process_frame
|
|
var scroll := drawer.get_node("Scroll") as ScrollContainer
|
|
assert(scroll.get_v_scroll_bar().visible)
|
|
root.size = original_size
|
|
hud.call("_layout_sidebar")
|
|
# The same autoload state is reused by death and level scene reloads.
|
|
captain._toggle_collapsed()
|
|
hud._toggle_debug()
|
|
crafting._toggle_expanded()
|
|
var saved_state := GameState.hud_panel_state.duplicate()
|
|
var restored := GAME.instantiate() as Node2D
|
|
add_child(restored)
|
|
await get_tree().process_frame
|
|
await get_tree().process_frame
|
|
var restored_hud := restored.get_node("HUD")
|
|
var restored_captain := restored.get_node("HUD/HUDRoot/CaptainPanel")
|
|
assert(restored_captain._collapsed == saved_state["captain_collapsed"])
|
|
assert(restored_hud._debug_expanded == saved_state["debug_expanded"])
|
|
assert(restored_hud._sidebar_open == saved_state["ship_open"])
|
|
var restored_crafting := restored.get_node("HUD/HUDRoot/ShipDrawer/Scroll/Contents/ShipEquipmentPanel/Contents/CraftingPanel")
|
|
assert(restored_crafting._expanded == saved_state["crafting_expanded"])
|
|
assert(not restored_captain.has_node("Contents/Critical"))
|
|
var layout := equipment.get_node("Contents/EquipmentLayout")
|
|
assert(layout.get_node("Weapon1").position.x < layout.get_node("Weapon3").position.x)
|
|
assert(layout.get_node("Weapon3").position.x < layout.get_node("Weapon2").position.x)
|
|
print("CAPTAIN_SHIP_DRAWER_TEST: PASS (separate captain, portrait, collapse, debug position, cockpit, ship slide, skills, inventory, equipment stats, small viewport)")
|
|
get_tree().quit()
|