75 lines
2.7 KiB
GDScript
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")
|