class_name EnemyBigLaserComponent extends Node # Fires a heavily telegraphed EnemyBigLaserBeam at the fleet's current # centroid on a long cooldown - the beam itself owns the whole charge/fire/ # flash sequence once launched, same "survives the shooter dying" design as # EnemyArtilleryComponent's ArtilleryShell. var capability_id: String = "big_laser" @export var charge_time: float = 2.5 @export var fire_cooldown: float = 9.0 @export var beam_range: float = 1200.0 @export var beam_half_width: float = 35.0 @export var damage: int = 3 @export var color: Color = Color(0.55, 0.05, 0.85) var cooldown_left: float = 0.0 var beam_scene: PackedScene = preload("res://enemies/EnemyBigLaserBeam.tscn") func tick(delta: float) -> void: cooldown_left -= delta if cooldown_left > 0.0: return var enemy: Node2D = get_parent() var fleet: Node2D = get_tree().get_first_node_in_group("player_fleet") if fleet == null or fleet.ships.is_empty(): return var direction: Vector2 = fleet.get_centroid() - enemy.global_position if direction.length() < 1.0: return var beam: Node2D = beam_scene.instantiate() beam.charge_time = charge_time beam.beam_range = beam_range beam.beam_half_width = beam_half_width beam.damage = damage beam.color = color enemy.get_tree().root.add_child(beam) beam.launch(enemy.global_position, direction) cooldown_left = fire_cooldown