class_name VesselWeaponComponent extends Node var capability_id: String = "weapon" var fire_range: float var fire_cooldown: float var projectile_damage: int var fire_timer: float = 0.0 var projectile_scene: PackedScene = preload("res://Projectile.tscn") func apply_stats() -> void: var ship: Node = get_parent() var state: Node = ship.get_tree().root.get_node("GameState") fire_range = state.vessel_stat(ship.vessel_type, "fire_range") fire_cooldown = state.vessel_stat(ship.vessel_type, "fire_cooldown") projectile_damage = int(state.vessel_stat(ship.vessel_type, "damage")) func tick(delta: float) -> void: fire_timer -= delta if fire_timer > 0.0: return var ship: Node2D = get_parent() var target: Node2D = _find_nearest_enemy(ship) if target == null: fire_timer = 0.25 return var projectile: Node2D = projectile_scene.instantiate() projectile.position = ship.position projectile.damage = projectile_damage ship.get_tree().root.add_child(projectile) projectile.launch(target.position - ship.position) fire_timer = fire_cooldown func _find_nearest_enemy(ship: Node2D) -> Node2D: var nearest: Node2D = null var best_distance: float = fire_range for enemy in ship.get_tree().get_nodes_in_group("enemies"): if not is_instance_valid(enemy): continue var distance: float = ship.position.distance_to(enemy.position) if distance <= best_distance: best_distance = distance nearest = enemy return nearest