factory pattern for zombie error
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a025e89a66ec0f147a00c91dcb63c22f
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user