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

@@ -302,6 +302,7 @@ GameObject:
- component: {fileID: 4193559228769778618}
- component: {fileID: 3688033262952903992}
- component: {fileID: 4621369044726135548}
- component: {fileID: 1262021852007174908}
m_Layer: 0
m_Name: FatZombie
m_TagString: Untagged
@@ -406,14 +407,6 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier: PresentationAssembly::Darkmatter.Presentation.EnemyMotor
enemyAI: {fileID: 5265447112151943116}
playerTransform: {fileID: 0}
patrolPoints:
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
enemyConfig: {fileID: 11400000, guid: 1e02b1a664706154ead0ba098a00c234, type: 2}
--- !u!114 &3688033262952903992
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -448,6 +441,18 @@ BoxCollider:
serializedVersion: 3
m_Size: {x: 0.67956746, y: 1.6583844, z: 0.61457443}
m_Center: {x: -0.0076850057, y: 0.8590092, z: 0.10332298}
--- !u!114 &1262021852007174908
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2162868264375740700}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2fbe43d3f58deb3489ba1565abc2b050, type: 3}
m_Name:
m_EditorClassIdentifier: DomainAssembly::Darkmatter.Domain.EnemyController
--- !u!1 &2323887794076591119
GameObject:
m_ObjectHideFlags: 0

View File

@@ -716,6 +716,7 @@ GameObject:
- component: {fileID: 4755594883418314781}
- component: {fileID: 870679708961234365}
- component: {fileID: 3936161263970401193}
- component: {fileID: 5384777900783069292}
m_Layer: 0
m_Name: Zombie
m_TagString: Untagged
@@ -797,14 +798,6 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier: PresentationAssembly::Darkmatter.Presentation.EnemyMotor
enemyAI: {fileID: 5800253524903319650}
playerTransform: {fileID: 0}
patrolPoints:
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
- {fileID: 0}
enemyConfig: {fileID: 11400000, guid: 1e02b1a664706154ead0ba098a00c234, type: 2}
--- !u!114 &870679708961234365
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -839,6 +832,18 @@ BoxCollider:
serializedVersion: 3
m_Size: {x: 0.4155221, y: 1.9943717, z: 0.40793037}
m_Center: {x: 0.0037953854, y: 1.0057575, z: 0.0000009536743}
--- !u!114 &5384777900783069292
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3896887842999248674}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 2fbe43d3f58deb3489ba1565abc2b050, type: 3}
m_Name:
m_EditorClassIdentifier: DomainAssembly::Darkmatter.Domain.EnemyController
--- !u!1 &3971490782850491051
GameObject:
m_ObjectHideFlags: 0

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;
}
}
}

View File

@@ -15922,6 +15922,16 @@ MonoBehaviour:
camService: {fileID: 335159079}
gunWeapon: {fileID: 1291938116}
TargetProvider: {fileID: 9174570246757384965}
playerTransform: {fileID: 4813119173320015549}
fatZombie: {fileID: 2162868264375740700, guid: 1db0ca1519136ff49adfaa7a580fd90b, type: 3}
SlimZombie: {fileID: 3896887842999248674, guid: 22ab1609051017345aba2f871d7f4daa, type: 3}
patrolPoints:
- {fileID: 1704050588}
- {fileID: 841019811}
- {fileID: 1037650355}
- {fileID: 775540181}
- {fileID: 279822045}
spawnner: {fileID: 1118003635}
--- !u!1 &1037650354
GameObject:
m_ObjectHideFlags: 0
@@ -15953,6 +15963,51 @@ Transform:
m_Children: []
m_Father: {fileID: 2029320970}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1118003633
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1118003634}
- component: {fileID: 1118003635}
m_Layer: 0
m_Name: EnemySpawnner
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1118003634
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1118003633}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1118003635
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1118003633}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a025e89a66ec0f147a00c91dcb63c22f, type: 3}
m_Name:
m_EditorClassIdentifier: PresentationAssembly::Darkmatter.Presentation.EnemiesSpawnner
enemiesCount: 2
--- !u!1 &1188606426
GameObject:
m_ObjectHideFlags: 0
@@ -17275,91 +17330,6 @@ Transform:
m_CorrespondingSourceObject: {fileID: 5913718649806696177, guid: c2a30b2ff39bb704ba9d3726a86f6ca9, type: 3}
m_PrefabInstance: {fileID: 3748176527562877927}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &4820818298332742348
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 3896887842999248674, guid: 22ab1609051017345aba2f871d7f4daa, type: 3}
propertyPath: m_Name
value: Zombie
objectReference: {fileID: 0}
- target: {fileID: 3896887842999248674, guid: 22ab1609051017345aba2f871d7f4daa, type: 3}
propertyPath: m_IsActive
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4755594883418314781, guid: 22ab1609051017345aba2f871d7f4daa, type: 3}
propertyPath: playerTransform
value:
objectReference: {fileID: 4813119173320015549}
- target: {fileID: 4755594883418314781, guid: 22ab1609051017345aba2f871d7f4daa, type: 3}
propertyPath: 'patrolPoints.Array.data[0]'
value:
objectReference: {fileID: 1704050588}
- target: {fileID: 4755594883418314781, guid: 22ab1609051017345aba2f871d7f4daa, type: 3}
propertyPath: 'patrolPoints.Array.data[1]'
value:
objectReference: {fileID: 841019811}
- target: {fileID: 4755594883418314781, guid: 22ab1609051017345aba2f871d7f4daa, type: 3}
propertyPath: 'patrolPoints.Array.data[2]'
value:
objectReference: {fileID: 1037650355}
- target: {fileID: 4755594883418314781, guid: 22ab1609051017345aba2f871d7f4daa, type: 3}
propertyPath: 'patrolPoints.Array.data[3]'
value:
objectReference: {fileID: 775540181}
- target: {fileID: 4755594883418314781, guid: 22ab1609051017345aba2f871d7f4daa, type: 3}
propertyPath: 'patrolPoints.Array.data[4]'
value:
objectReference: {fileID: 279822045}
- target: {fileID: 5689268458101631349, guid: 22ab1609051017345aba2f871d7f4daa, type: 3}
propertyPath: m_LocalPosition.x
value: 2.635
objectReference: {fileID: 0}
- target: {fileID: 5689268458101631349, guid: 22ab1609051017345aba2f871d7f4daa, type: 3}
propertyPath: m_LocalPosition.y
value: -0.018
objectReference: {fileID: 0}
- target: {fileID: 5689268458101631349, guid: 22ab1609051017345aba2f871d7f4daa, type: 3}
propertyPath: m_LocalPosition.z
value: 17.56
objectReference: {fileID: 0}
- target: {fileID: 5689268458101631349, guid: 22ab1609051017345aba2f871d7f4daa, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 5689268458101631349, guid: 22ab1609051017345aba2f871d7f4daa, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5689268458101631349, guid: 22ab1609051017345aba2f871d7f4daa, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5689268458101631349, guid: 22ab1609051017345aba2f871d7f4daa, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5689268458101631349, guid: 22ab1609051017345aba2f871d7f4daa, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5689268458101631349, guid: 22ab1609051017345aba2f871d7f4daa, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 5689268458101631349, guid: 22ab1609051017345aba2f871d7f4daa, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 22ab1609051017345aba2f871d7f4daa, type: 3}
--- !u!114 &5149987667482231426 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 5776293653337045881, guid: c2a30b2ff39bb704ba9d3726a86f6ca9, type: 3}
@@ -17376,87 +17346,6 @@ Transform:
m_CorrespondingSourceObject: {fileID: 6865961981432566207, guid: c2a30b2ff39bb704ba9d3726a86f6ca9, type: 3}
m_PrefabInstance: {fileID: 3748176527562877927}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &6920423467887712584
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 1184232008272073952, guid: 1db0ca1519136ff49adfaa7a580fd90b, type: 3}
propertyPath: m_LocalPosition.x
value: -1.9946207
objectReference: {fileID: 0}
- target: {fileID: 1184232008272073952, guid: 1db0ca1519136ff49adfaa7a580fd90b, type: 3}
propertyPath: m_LocalPosition.y
value: 0.01
objectReference: {fileID: 0}
- target: {fileID: 1184232008272073952, guid: 1db0ca1519136ff49adfaa7a580fd90b, type: 3}
propertyPath: m_LocalPosition.z
value: 18.196135
objectReference: {fileID: 0}
- target: {fileID: 1184232008272073952, guid: 1db0ca1519136ff49adfaa7a580fd90b, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1184232008272073952, guid: 1db0ca1519136ff49adfaa7a580fd90b, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1184232008272073952, guid: 1db0ca1519136ff49adfaa7a580fd90b, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1184232008272073952, guid: 1db0ca1519136ff49adfaa7a580fd90b, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1184232008272073952, guid: 1db0ca1519136ff49adfaa7a580fd90b, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1184232008272073952, guid: 1db0ca1519136ff49adfaa7a580fd90b, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1184232008272073952, guid: 1db0ca1519136ff49adfaa7a580fd90b, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2162868264375740700, guid: 1db0ca1519136ff49adfaa7a580fd90b, type: 3}
propertyPath: m_Name
value: FatZombie
objectReference: {fileID: 0}
- target: {fileID: 4193559228769778618, guid: 1db0ca1519136ff49adfaa7a580fd90b, type: 3}
propertyPath: playerTransform
value:
objectReference: {fileID: 4813119173320015549}
- target: {fileID: 4193559228769778618, guid: 1db0ca1519136ff49adfaa7a580fd90b, type: 3}
propertyPath: 'patrolPoints.Array.data[0]'
value:
objectReference: {fileID: 1704050588}
- target: {fileID: 4193559228769778618, guid: 1db0ca1519136ff49adfaa7a580fd90b, type: 3}
propertyPath: 'patrolPoints.Array.data[1]'
value:
objectReference: {fileID: 841019811}
- target: {fileID: 4193559228769778618, guid: 1db0ca1519136ff49adfaa7a580fd90b, type: 3}
propertyPath: 'patrolPoints.Array.data[2]'
value:
objectReference: {fileID: 1037650355}
- target: {fileID: 4193559228769778618, guid: 1db0ca1519136ff49adfaa7a580fd90b, type: 3}
propertyPath: 'patrolPoints.Array.data[3]'
value:
objectReference: {fileID: 775540181}
- target: {fileID: 4193559228769778618, guid: 1db0ca1519136ff49adfaa7a580fd90b, type: 3}
propertyPath: 'patrolPoints.Array.data[4]'
value:
objectReference: {fileID: 279822045}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 1db0ca1519136ff49adfaa7a580fd90b, type: 3}
--- !u!114 &7539699777945653300 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 731740553215042304, guid: c2a30b2ff39bb704ba9d3726a86f6ca9, type: 3}
@@ -17494,7 +17383,6 @@ SceneRoots:
- {fileID: 1761763681}
- {fileID: 3748176527562877927}
- {fileID: 389331258}
- {fileID: 6920423467887712584}
- {fileID: 4820818298332742348}
- {fileID: 1793638439}
- {fileID: 2029320970}
- {fileID: 1118003634}