using Godot; using System; public partial class Spawner : Node3D { [Export(PropertyHint.NodeType)] public PackedScene SceneToSpawn { get; set; } [Export] public Resource Inputs; [Export] public Node3D Target { get; set; } [Export(PropertyHint.Range, "0.1, 100, 0.1, or_greater")] public float SpawnInterval { get; set; } = 1.0f; [Export] public bool IsActiveOnStart { get; set; } = true; private float _spawnTimer; private bool _isActive; public override void _Ready() { _isActive = IsActiveOnStart; _spawnTimer = SpawnInterval; } public override void _Process(double delta) { if (!_isActive) return; _spawnTimer -= (float) delta; if (_spawnTimer <= 0) Spawn(); } public void Spawn() { if (SceneToSpawn == null || !SceneToSpawn.CanInstantiate()) return; var spawnedInstance = SceneToSpawn.Instantiate() as FirstEnemy; if (spawnedInstance == null) return; spawnedInstance.Inputs = Inputs as EnemyInitInputs; spawnedInstance.Target = Target; GetTree().GetCurrentScene().AddChild(spawnedInstance); spawnedInstance.GlobalPosition = GlobalPosition; _spawnTimer = SpawnInterval; } public void StartSpawning() { _isActive = true; _spawnTimer = SpawnInterval; } public void StopSpawning() { _isActive = false; } }