62 lines
1.3 KiB
C#
62 lines
1.3 KiB
C#
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 Enemy;
|
|
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;
|
|
}
|
|
}
|