added enemy factory and pool
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using Darkmatter.Core;
|
||||
using UnityEngine;
|
||||
using UnityEngine.Pool;
|
||||
using VContainer;
|
||||
|
||||
namespace Darkmatter.Presentation
|
||||
@@ -7,14 +8,54 @@ namespace Darkmatter.Presentation
|
||||
public class EnemiesSpawnner : MonoBehaviour
|
||||
{
|
||||
[Inject] IEnemyFactory _enemyFactory;
|
||||
public int enemiesCount = 2;
|
||||
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()
|
||||
{
|
||||
for (int i = 0;i< enemiesCount;i++)
|
||||
SpawnWave();
|
||||
}
|
||||
|
||||
private void SpawnWave()
|
||||
{
|
||||
for (int i = 0; i < enemiesPerWave; i++)
|
||||
{
|
||||
_enemyFactory.GetEnemy(ZombieType.Fat);
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user