factory pattern for zombie error

This commit is contained in:
Mausham
2025-12-31 18:23:11 -08:00
parent 8eafd8bb60
commit 3470ca4dc6
10 changed files with 152 additions and 198 deletions

View File

@@ -4,6 +4,7 @@ using UnityEngine;
using Darkmatter.Core;
using Darkmatter.Presentation;
using Darkmatter.Domain;
using System.Collections.Generic;
namespace Darkmatter.App
{
@@ -19,10 +20,20 @@ namespace Darkmatter.App
[SerializeField] private CameraService camService;
[SerializeField] private GunWeapon gunWeapon;
[SerializeField] private PlayerAimTargetProvider TargetProvider;
[Header("Factory parameters")]
[SerializeField] private Transform playerTransform;
[SerializeField] private GameObject fatZombie;
[SerializeField] private GameObject SlimZombie;
[SerializeField] private List<Transform> patrolPoints;
[SerializeField] private EnemiesSpawnner spawnner;
private readonly IObjectResolver resolver;
protected override void Configure(IContainerBuilder builder)
{
builder.RegisterEntryPoint<PlayerController>(Lifetime.Scoped);
builder.RegisterEntryPoint<EnemyController>(Lifetime.Scoped);
builder.RegisterComponent<IPlayerAnim>(playerAnim);
builder.RegisterComponent<IInputReader>(inputReader);
@@ -30,17 +41,29 @@ namespace Darkmatter.App
builder.RegisterComponent<ITargetProvider>(TargetProvider);
builder.RegisterComponent(playerConfig);
builder.RegisterComponent(cameraConfig);
builder.RegisterComponent(enemyConfig);
builder.RegisterComponent(enemyConfig);
builder.RegisterComponent<ICameraService>(camService);
builder.RegisterComponent<IReloadableWeapon>(gunWeapon);
builder.RegisterComponent(spawnner);
builder.RegisterComponentInHierarchy<IEnemyAnimController>();
builder.RegisterComponentInHierarchy<IEnemyPawn>();
//builder.RegisterComponentInHierarchy<IEnemyAnimController>();
//builder.RegisterComponentInHierarchy<IEnemyPawn>();
builder.Register<PlayerStateMachine>(Lifetime.Scoped);
builder.Register<EnemyStateMachine>(Lifetime.Scoped);
builder.Register<IEnemyFactory>(container =>
new EnemyFactory(
playerTransform,
patrolPoints,
fatZombie,
SlimZombie,
resolver),
Lifetime.Scoped);
}
}
}

View File

@@ -7,7 +7,7 @@ namespace Darkmatter.Core
{
public interface IEnemyPawn : IDamageable
{
void InitializeFromFactory();
void InitializeFromFactory(Transform player,List<Transform> patrolPoints);
bool isDead { get; }
NavMeshAgent EnemyAI { get; }
List<Transform> PatrolPoints { get; }

View File

@@ -4,7 +4,7 @@ using VContainer.Unity;
namespace Darkmatter.Domain
{
public class EnemyController : IStartable, ITickable
public class EnemyController : MonoBehaviour
{
[Inject] EnemyStateMachine esm;
@@ -13,7 +13,7 @@ namespace Darkmatter.Domain
esm.ChangeState(new PatrolState(esm));
}
public void Tick()
public void Update()
{
esm.Update();
}

View File

@@ -1,5 +1,6 @@
using Darkmatter.Core;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using VContainer;
@@ -12,12 +13,13 @@ namespace Darkmatter.Domain
private readonly GameObject fatZombiePrefab;
private readonly GameObject slimZombiePrefab;
private readonly IObjectResolver objectResolver;
public EnemyFactory(Transform playerTransform, List<Transform> patrolPoints, GameObject fatZombiePrefab, GameObject slimZombiePrefab)
public EnemyFactory(Transform playerTransform, List<Transform> patrolPoints, GameObject fatZombiePrefab, GameObject slimZombiePrefab, IObjectResolver resolver)
{
this.playerTransform = playerTransform;
this.patrolPoints = patrolPoints;
this.fatZombiePrefab = fatZombiePrefab;
this.slimZombiePrefab = slimZombiePrefab;
this.objectResolver = resolver;
}
public IEnemyPawn GetEnemy(ZombieType type)
{
@@ -38,7 +40,7 @@ namespace Darkmatter.Domain
}
objectResolver.Inject(enemyObj);
IEnemyPawn enemyPawn = enemyObj.GetComponent<IEnemyPawn>();
enemyPawn.InitializeFromFactory(playerTransform, GetRandomPatrolPoints(Random.Range(4, patrolPoints.Count)));
return enemyPawn;
}
@@ -46,5 +48,11 @@ namespace Darkmatter.Domain
{
return patrolPoints[Random.Range(0, patrolPoints.Count)].position;
}
private List<Transform> GetRandomPatrolPoints(int count)
{
return patrolPoints.OrderBy(x=>Random.value).Take(count).ToList();
}
}
}

View File

@@ -0,0 +1,20 @@
using Darkmatter.Core;
using UnityEngine;
using VContainer;
namespace Darkmatter.Presentation
{
public class EnemiesSpawnner : MonoBehaviour
{
[Inject] IEnemyFactory _enemyFactory;
public int enemiesCount = 2;
private void Start()
{
for (int i = 0;i< enemiesCount;i++)
{
_enemyFactory.GetEnemy(ZombieType.Fat);
}
}
}
}

View File

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

View File

@@ -10,13 +10,11 @@ namespace Darkmatter.Presentation
public class EnemyMotor : MonoBehaviour, IEnemyPawn
{
[SerializeField] private NavMeshAgent enemyAI;
[SerializeField] private Transform playerTransform;
[SerializeField] private List<Transform> patrolPoints = new List<Transform>();
[Inject] private EnemyConfigSO enemyConfig;
public Transform PlayerTarget => playerTransform;
public Transform PlayerTarget { get; private set; }
public NavMeshAgent EnemyAI => enemyAI;
public List<Transform> PatrolPoints => patrolPoints;
public List<Transform> PatrolPoints { get; private set; } = new List<Transform>();
public float Health { get; set; } = 100;
@@ -61,5 +59,10 @@ namespace Darkmatter.Presentation
Gizmos.DrawWireSphere(transform.position, enemyConfig.attackRange);
}
public void InitializeFromFactory(Transform player, List<Transform> patrolPoints)
{
this.PlayerTarget = player;
this.PatrolPoints = patrolPoints;
}
}
}