Randoloot/tests/previews/external_turret_preview.gd
2026-10-26 19:33:45 +01:00

85 lines
3.2 KiB
GDScript

extends Node2D
const DEFINITION := preload("res://resources/items/external_turret.tres")
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 ship: CharacterBody2D = game.player
ship.set_physics_process(false)
ship.get_node("WeaponController").set_physics_process(false)
ship.get_node("ExtensionSystems").set_physics_process(false)
for enemy in get_tree().get_nodes_in_group("enemies"): enemy.queue_free()
ship.position = Vector2(0,1500)
ship.rotation = 0.0
ship.get_node("Camera2D").reset_smoothing()
var inventory: ShipInventory = ship.get_node("ShipInventory")
var item := ItemInstance.new()
item.definition = DEFINITION
inventory.weapon_slots[0] = item
inventory.ammunition = 300
inventory.inventory_changed.emit()
var targets: Array[Node2D] = []
for point in [Vector2(-260,-160),Vector2(260,-160)]:
var enemy := preload("res://scenes/game/enemy_ship.tscn").instantiate()
enemy.position = ship.position+point
game.add_child(enemy)
enemy.set_physics_process(false)
enemy._player = ship
enemy.max_hull = 10000.0
enemy.hull = 10000.0
targets.append(enemy)
for point in [Vector2(-120,-70),Vector2(0,-120),Vector2(120,-70)]:
var turret := Node2D.new()
turret.set_script(preload("res://scripts/game/deployed_turret.gd"))
turret.mother = ship
turret.weapon = item
turret.position = ship.position+point
game.add_child(turret)
turret.set_physics_process(false)
turret._age = 1.0
turret._fire_timer = 0.0
turret._physics_process(0.1)
var layer := CanvasLayer.new()
layer.layer = 100
add_child(layer)
var panel := PanelContainer.new()
panel.position = Vector2(340,80)
var style := StyleBoxFlat.new()
style.bg_color = Color("07121ee8")
style.border_color = Color("619ab9")
style.set_border_width_all(1)
style.set_corner_radius_all(8)
style.set_content_margin_all(14)
panel.add_theme_stylebox_override("panel",style)
layer.add_child(panel)
var row := HBoxContainer.new()
row.add_theme_constant_override("separation",14)
panel.add_child(row)
var icon := TextureRect.new()
icon.texture = DEFINITION.icon
icon.custom_minimum_size = Vector2(72,72)
icon.expand_mode = TextureRect.EXPAND_IGNORE_SIZE
icon.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
row.add_child(icon)
var text := Label.new()
text.text = "DZIAŁKA ZEWNĘTRZNE\n50 amunicji → 1 działko • 50 pocisków\nPołowa obrażeń działka maszynowego • Zasięg 550"
text.add_theme_font_size_override("font_size",15)
row.add_child(text)
for frame in 12: await get_tree().process_frame
for turret in get_tree().get_nodes_in_group("player_external_turrets"):
turret.rotation = (targets[0].position-turret.position).angle()+PI*0.5
turret._fire(targets[0])
for child in game.get_children():
if child.get_script() == preload("res://scripts/game/weapon_projectile.gd"):
child.set_physics_process(false)
child.position += child.direction*55.0
turret.queue_redraw()
await get_tree().process_frame
await RenderingServer.frame_post_draw
assert(get_viewport().get_texture().get_image().save_png("res://artifacts/external_turret_preview.png") == OK)
print("EXTERNAL_TURRET_PREVIEW: PASS")
get_tree().quit()