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

75 lines
2.7 KiB
GDScript

extends Node2D
class DemoLaser extends "res://scripts/game/weapon_controller.gd":
func _aim_direction_from(_origin: Vector2) -> Vector2: return Vector2.RIGHT
var _ship: CharacterBody2D
var _controller: Node
var _item: ItemInstance
var _automatic := true
var _status: Label
var _delay := 0.0
func _ready() -> void:
GameState.start_new_run()
var game := preload("res://scenes/game/game.tscn").instantiate()
add_child(game)
game.set_physics_process(false)
_ship = 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 = PI*0.5
_ship.get_node("Camera2D").reset_smoothing()
_item = ItemInstance.new()
_item.definition = preload("res://resources/items/pulse_laser.tres")
var inventory: ShipInventory = _ship.get_node("ShipInventory")
inventory.weapon_slots[0] = _item
inventory.inventory_changed.emit()
_controller = DemoLaser.new()
_ship.add_child(_controller)
_controller.set_physics_process(false)
var target := preload("res://scenes/game/weapon_test_target.tscn").instantiate()
target.position = _ship.position+Vector2(450,0)
game.add_child(target)
target.get_node("Sprite2D").rotation = -PI*0.5
var overlay := CanvasLayer.new()
overlay.layer = 100
add_child(overlay)
var panel := PanelContainer.new()
panel.position = Vector2(350,90)
var style := StyleBoxFlat.new()
style.bg_color = Color("130913ec")
style.border_color = Color("d75f6c")
style.set_border_width_all(1)
style.set_content_margin_all(14)
panel.add_theme_stylebox_override("panel",style)
overlay.add_child(panel)
_status = Label.new()
_status.add_theme_font_size_override("font_size",16)
panel.add_child(_status)
_update_status()
print("PULSE_LASER_LIVE_DEMO: running — SPACE toggles fire, ESC closes demo")
func _physics_process(delta: float) -> void:
if not is_instance_valid(_controller): return
_controller._shot_timers[0] = maxf(0.0,_controller._shot_timers[0]-delta)
_delay += delta
if _automatic and _delay >= 1.0:
_ship.energy = _ship.max_energy
_controller._fire_laser(0,_item)
func _unhandled_key_input(event: InputEvent) -> void:
if event is InputEventKey and event.pressed and not event.echo:
if event.keycode == KEY_SPACE:
_automatic = not _automatic
_update_status()
get_viewport().set_input_as_handled()
elif event.keycode == KEY_ESCAPE:
get_tree().quit()
func _update_status() -> void:
_status.text = "LASER PULSACYJNY · %s\nPojedyncze czerwone impulsy lecą do celu · 1500 px/s\nSPACJA: włącz/wyłącz strzelanie · ESC: zamknij pokaz" % ("STRZELA" if _automatic else "WSTRZYMANY")