100 lines
4.4 KiB
GDScript
100 lines
4.4 KiB
GDScript
extends Node2D
|
||
const ORBS := preload("res://scripts/items/special_orbs.gd")
|
||
const PICKUP := preload("res://scripts/items/loot_pickup.gd")
|
||
const SLOT := preload("res://scenes/ui/inventory_slot_view.tscn")
|
||
|
||
func _ready() -> void:
|
||
GameState.start_new_run()
|
||
var game := preload("res://scenes/game/game.tscn").instantiate()
|
||
add_child(game)
|
||
game.set_physics_process(false)
|
||
var player: CharacterBody2D = game.player
|
||
player.set_physics_process(false)
|
||
player.get_node("WeaponController").set_physics_process(false)
|
||
for enemy in get_tree().get_nodes_in_group("enemies"): enemy.set_physics_process(false)
|
||
var inventory: ShipInventory = player.get_node("ShipInventory")
|
||
inventory.cargo.fill(null)
|
||
var pickup := Node2D.new()
|
||
pickup.set_script(PICKUP)
|
||
pickup.item = ORBS.create_item("piercing",2)
|
||
pickup.position = player.position
|
||
game.add_child(pickup)
|
||
pickup._physics_process(0)
|
||
assert(pickup.is_queued_for_deletion() and inventory.cargo[0].stack_count==2)
|
||
for i in range(1,inventory.get_cargo_capacity()):
|
||
var item := ItemInstance.new()
|
||
item.definition = preload("res://resources/items/hull_plating.tres")
|
||
inventory.cargo[i] = item
|
||
var same := Node2D.new()
|
||
same.set_script(PICKUP)
|
||
same.item = ORBS.create_item("piercing",3)
|
||
same.position = player.position
|
||
game.add_child(same)
|
||
same._physics_process(0)
|
||
assert(same.is_queued_for_deletion() and inventory.cargo[0].stack_count==5,"Stack pickup works even with full cargo")
|
||
var other := Node2D.new()
|
||
other.set_script(PICKUP)
|
||
other.item = ORBS.create_item("booster")
|
||
other.position = player.position
|
||
game.add_child(other)
|
||
other._physics_process(0)
|
||
assert(not other.is_queued_for_deletion(),"Different orb stays in space while cargo is full")
|
||
inventory.cargo[1] = null
|
||
other._physics_process(0)
|
||
assert(other.is_queued_for_deletion() and inventory.cargo[1].definition.orb_id=="booster")
|
||
var source := SLOT.instantiate()
|
||
source.slot_kind = "cargo"
|
||
source.slot_index = 0
|
||
add_child(source)
|
||
var target := SLOT.instantiate()
|
||
target.slot_kind = "weapon"
|
||
target.slot_index = 0
|
||
add_child(target)
|
||
var click := InputEventMouseButton.new()
|
||
click.button_index = MOUSE_BUTTON_LEFT
|
||
click.pressed = true
|
||
click.double_click = true
|
||
source._gui_input(click)
|
||
assert(inventory.selected_orb==inventory.cargo[0])
|
||
click.double_click = false
|
||
target._gui_input(click)
|
||
assert("piercing" in inventory.weapon_slots[0].special_orbs and inventory.cargo[0].stack_count==4 and inventory.selected_orb==null)
|
||
assert(source.get_node("StackOverlay/Count").text=="×4")
|
||
assert(inventory.select_orb(1))
|
||
assert(not inventory.use_selected_orb(inventory.weapon_slots[0]) and inventory.cargo[1].stack_count==1,"Invalid target never consumes an orb")
|
||
var escape := InputEventKey.new()
|
||
escape.keycode = KEY_ESCAPE
|
||
escape.pressed = true
|
||
inventory._input(escape)
|
||
assert(inventory.selected_orb==null)
|
||
var engine := ItemInstance.new()
|
||
engine.definition = preload("res://resources/items/engine_extension.tres")
|
||
inventory.module_slots[2] = engine
|
||
assert(inventory.select_orb(1) and inventory.use_selected_orb(engine))
|
||
assert(inventory.cargo[1]==null and "booster" in engine.special_orbs)
|
||
var radar := Control.new()
|
||
radar.set_script(preload("res://scripts/ui/scanner_overlay.gd"))
|
||
radar.player = player
|
||
add_child(radar)
|
||
var freighter: Node2D = game.get_node("Freighter")
|
||
freighter.position = player.position+Vector2(1000000,1000000)
|
||
assert(radar.is_target_in_range(freighter),"Freighter ignores distance")
|
||
radar._physics_process(0)
|
||
assert(radar.targets.has(freighter))
|
||
var cannon := ItemInstance.new()
|
||
cannon.definition = preload("res://resources/items/artillery_cannon.tres")
|
||
assert(cannon.get_stat_total("damage")==50 and cannon.definition.ammunition_cost==10)
|
||
cannon.damage_min = 74
|
||
cannon.damage_max = 74
|
||
assert(is_equal_approx(cannon.get_stat_total("damage"),50),"Already rolled artillery receives the balance correction")
|
||
var fx := preload("res://scripts/game/artillery_effect.gd")
|
||
fx.launch(player,player.position,Vector2.RIGHT)
|
||
assert(fx._sound.get_length()>0.1)
|
||
source.queue_free()
|
||
target.queue_free()
|
||
game.get_node("HUD")._toggle_inventory()
|
||
await get_tree().create_timer(0.4).timeout
|
||
await RenderingServer.frame_post_draw
|
||
get_viewport().get_texture().get_image().save_png("res://artifacts/orb_cargo_stacks.png")
|
||
print("ARTILLERY_ORB_RADAR_TEST: PASS (50 base damage, CC0 audio, cargo drops, full-cargo stacking, double-click target use, invalid target/cancel, stack counter, unlimited freighter radar)")
|