Initial commit

This commit is contained in:
Mausham Neupane
2026-01-05 00:11:51 +05:45
commit 05ee499ce3
2015 changed files with 835249 additions and 0 deletions

View File

@@ -0,0 +1,77 @@
using Darkmatter.Core;
using UnityEngine;
using UnityEngine.Pool;
using VContainer;
namespace Darkmatter.Presentation
{
public class EnemiesSpawnner : MonoBehaviour
{
[Inject] IEnemyFactory _enemyFactory;
[Inject] IGameScreenController gameScreenController;
public int baseEnemyCount =2;
private ObjectPool<IEnemyPawn> _enemyPool;
private int killedEnemies = 0;
private int enemiesMultiplier = 1;
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(enemiesMultiplier);
}
private void SpawnWave(int multiplier)
{
gameScreenController.UpdateTotalZombiesCount(baseEnemyCount*multiplier);
gameScreenController.UpdateRemainingZombiesCount(baseEnemyCount*multiplier);
for (int i = 0; i < baseEnemyCount*multiplier; i++)
{
IEnemyPawn enemy = _enemyPool.Get();
enemy.GameObject.transform.position = enemy.PatrolPoints[Random.Range(0, enemy.PatrolPoints.Count)].position;
}
}
public void ReturnEnemy(IEnemyPawn enemy)
{
enemy.Reset();
_enemyPool.Release(enemy);
killedEnemies++;
gameScreenController.UpdateRemainingZombiesCount(baseEnemyCount*enemiesMultiplier - killedEnemies);
if(killedEnemies == baseEnemyCount*enemiesMultiplier)
{
killedEnemies = 0;
enemiesMultiplier++;
SpawnWave(enemiesMultiplier);
}
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: a025e89a66ec0f147a00c91dcb63c22f

View File

@@ -0,0 +1,69 @@
using Darkmatter.Core;
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
using VContainer;
namespace Darkmatter.Presentation
{
public class EnemyMotor : MonoBehaviour, IEnemyPawn
{
public static event Action<IEnemyPawn> OnEnemyDead;
public GameObject GameObject => this.gameObject;
[SerializeField] private NavMeshAgent enemyAI;
public Transform PlayerTarget { get; private set; }
public NavMeshAgent EnemyAI => enemyAI;
public List<Transform> PatrolPoints { get; private set; } = new List<Transform>();
public float Health { get; set; } = 100;
public bool isDead { get; set; } = false;
public event Action<float> OnHealthDecreased;
public void Die()
{
if(isDead) return;
isDead = true;
enemyAI.enabled = false;
Invoke(nameof(Hide), 5f);
}
private void Hide()
{
OnEnemyDead?.Invoke(this);
}
public Vector3 ReturnMyPos()
{
return this.transform.position;
}
public void SetDestination(Vector3 destination)
{
enemyAI.SetDestination(destination);
}
public void TakeDamage(float damage)
{
Health -= damage;
OnHealthDecreased?.Invoke(Health);
}
public void InitializeFromFactory(Transform player, List<Transform> patrolPoints)
{
this.PlayerTarget = player;
this.PatrolPoints = patrolPoints;
}
public void Reset()
{
Health = 100;
enemyAI.enabled = true;
isDead = false;
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: df95acdebfef05045a08adb2e752fd26