Files
MobileShooter/Assets/Darkmatter/Code/Presentation/Enemies/EnemiesSpawnner.cs
2025-12-31 22:09:12 +05:45

62 lines
1.6 KiB
C#

using Darkmatter.Core;
using UnityEngine;
using UnityEngine.Pool;
using VContainer;
namespace Darkmatter.Presentation
{
public class EnemiesSpawnner : MonoBehaviour
{
[Inject] IEnemyFactory _enemyFactory;
public int enemiesPerWave = 5;
private ObjectPool<IEnemyPawn> _enemyPool;
private void OnEnable()
{
EnemyMotor.OnEnemyDead += ReturnEnemy;
}
private void OnDisable()
{
EnemyMotor.OnEnemyDead -= ReturnEnemy;
}
private void Awake()
{
_enemyPool = new ObjectPool<IEnemyPawn>(
createFunc: () => _enemyFactory.GetEnemy(GetRandomType()),
actionOnGet: enemy => enemy.GameObject.SetActive(true),
actionOnRelease: enemy => enemy.GameObject.SetActive(false),
actionOnDestroy: enemy => Destroy(enemy.GameObject),
collectionCheck: true,
defaultCapacity: 10,
maxSize: 50
);
}
private ZombieType GetRandomType()
{
return Random.value > 0.5f ? ZombieType.Fat : ZombieType.slim;
}
private void Start()
{
SpawnWave();
}
private void SpawnWave()
{
for (int i = 0; i < enemiesPerWave; i++)
{
IEnemyPawn enemy = _enemyPool.Get();
enemy.GameObject.transform.position = enemy.PatrolPoints[Random.Range(0, enemy.PatrolPoints.Count)].position;
}
}
public void ReturnEnemy(IEnemyPawn enemy)
{
_enemyPool.Release(enemy);
}
}
}