62 lines
1.6 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|