started adding enemy factory
This commit is contained in:
60
Assets/Darkmatter/Code/Domain/Enemy/AttackState.cs
Normal file
60
Assets/Darkmatter/Code/Domain/Enemy/AttackState.cs
Normal file
@@ -0,0 +1,60 @@
|
||||
using Darkmatter.Core;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Darkmatter.Domain
|
||||
{
|
||||
public class AttackState : State<EnemyStateMachine>
|
||||
{
|
||||
public AttackState(EnemyStateMachine runner) : base(runner) { }
|
||||
private IEnemyAnimController enemyAnimController => runner.enemyAnimController;
|
||||
private IEnemyPawn enemyPawn => runner.enemyPawn;
|
||||
|
||||
public override void Enter()
|
||||
{
|
||||
base.Enter();
|
||||
Debug.Log("Entered Attack State");
|
||||
Debug.Log("Attacking Player");
|
||||
enemyAnimController.PlayAttackAnim(true);
|
||||
enemyPawn.OnHealthDecreased += HandleHealth;
|
||||
}
|
||||
|
||||
private void HandleHealth(float health)
|
||||
{
|
||||
if (health <= 0)
|
||||
{
|
||||
runner.Die();
|
||||
}
|
||||
}
|
||||
public override void Update()
|
||||
{
|
||||
if (enemyPawn.isDead) return;
|
||||
base.Update();
|
||||
HandleAttack();
|
||||
CheckForStateBreak();
|
||||
|
||||
}
|
||||
|
||||
private void CheckForStateBreak()
|
||||
{
|
||||
if(!runner.PlayerInAttackRange())
|
||||
{
|
||||
runner.ChangeState(new ChaseState(runner));
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleAttack()
|
||||
{
|
||||
Vector3 dir = (enemyPawn.PlayerTarget.position - enemyPawn.ReturnMyPos()).normalized;
|
||||
//rotate towards player and handle Attack here
|
||||
}
|
||||
|
||||
public override void Exit()
|
||||
{
|
||||
base.Exit();
|
||||
Debug.Log("Exiting Attack State");
|
||||
enemyAnimController.PlayAttackAnim(false);
|
||||
enemyPawn.OnHealthDecreased -= HandleHealth;
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Darkmatter/Code/Domain/Enemy/AttackState.cs.meta
Normal file
2
Assets/Darkmatter/Code/Domain/Enemy/AttackState.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ee568c0b6df08d34d9c9fb008040066e
|
||||
66
Assets/Darkmatter/Code/Domain/Enemy/ChaseState.cs
Normal file
66
Assets/Darkmatter/Code/Domain/Enemy/ChaseState.cs
Normal file
@@ -0,0 +1,66 @@
|
||||
using Darkmatter.Core;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Darkmatter.Domain
|
||||
{
|
||||
public class ChaseState : State<EnemyStateMachine>
|
||||
{
|
||||
public ChaseState(EnemyStateMachine runner) : base(runner) { }
|
||||
private EnemyConfigSO enemyConfig => runner.enemyConfig;
|
||||
private IEnemyAnimController enemyAnimController => runner.enemyAnimController;
|
||||
private IEnemyPawn enemyPawn => runner.enemyPawn;
|
||||
|
||||
|
||||
public override void Enter()
|
||||
{
|
||||
base.Enter();
|
||||
Debug.Log("Entered Chase State");
|
||||
runner.SetSpeed(enemyConfig.chaseSpeed);
|
||||
enemyAnimController.PlayeChaseAnim(true);
|
||||
enemyPawn.OnHealthDecreased += HandleHealth;
|
||||
}
|
||||
|
||||
private void HandleHealth(float health)
|
||||
{
|
||||
if (health <= 0)
|
||||
{
|
||||
runner.Die();
|
||||
}
|
||||
}
|
||||
public override void Update()
|
||||
{
|
||||
if (enemyPawn.isDead) return;
|
||||
base.Update();
|
||||
HandleChase();
|
||||
CheckForStateBreak();
|
||||
Debug.Log("Updated Chase State");
|
||||
}
|
||||
|
||||
private void CheckForStateBreak()
|
||||
{
|
||||
if (!runner.PlayerInChasingRange())
|
||||
{
|
||||
runner.ChangeState(new PatrolState(runner));
|
||||
}
|
||||
else if(runner.PlayerInAttackRange())
|
||||
{
|
||||
runner.ChangeState(new AttackState(runner));
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleChase()
|
||||
{
|
||||
enemyPawn.SetDestination(enemyPawn.PlayerTarget.position);
|
||||
}
|
||||
|
||||
public override void Exit()
|
||||
{
|
||||
base.Exit();
|
||||
Debug.Log("Exiting Chase State");
|
||||
enemyAnimController.PlayeChaseAnim(false);
|
||||
enemyPawn.OnHealthDecreased -= HandleHealth;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
2
Assets/Darkmatter/Code/Domain/Enemy/ChaseState.cs.meta
Normal file
2
Assets/Darkmatter/Code/Domain/Enemy/ChaseState.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3a599db206b4b2a4b91b0af8749183e7
|
||||
@@ -10,7 +10,7 @@ namespace Darkmatter.Domain
|
||||
|
||||
public void Start()
|
||||
{
|
||||
|
||||
esm.ChangeState(new PatrolState(esm));
|
||||
}
|
||||
|
||||
public void Tick()
|
||||
|
||||
@@ -1,9 +1,44 @@
|
||||
using Darkmatter.Core;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
using VContainer;
|
||||
|
||||
namespace Darkmatter.Domain
|
||||
{
|
||||
public class EnemyStateMachine:StateMachine
|
||||
{
|
||||
|
||||
[Inject] public readonly IEnemyPawn enemyPawn;
|
||||
[Inject] public readonly IEnemyAnimController enemyAnimController;
|
||||
[Inject] public readonly EnemyConfigSO enemyConfig;
|
||||
|
||||
public void SetSpeed(float speed)
|
||||
{
|
||||
enemyPawn.EnemyAI.speed = speed;
|
||||
}
|
||||
|
||||
public bool PlayerInChasingRange()
|
||||
{
|
||||
if(Vector3.Distance(enemyPawn.PlayerTarget.position,enemyPawn.ReturnMyPos()) < enemyConfig.visionRange)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool PlayerInAttackRange()
|
||||
{
|
||||
if(Vector3.Distance(enemyPawn.PlayerTarget.position,enemyPawn.ReturnMyPos())<enemyConfig.attackRange)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void Die()
|
||||
{
|
||||
enemyAnimController.PlayDeadAnim();
|
||||
enemyPawn.Die();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
75
Assets/Darkmatter/Code/Domain/Enemy/PatrolState.cs
Normal file
75
Assets/Darkmatter/Code/Domain/Enemy/PatrolState.cs
Normal file
@@ -0,0 +1,75 @@
|
||||
using Codice.Client.Common;
|
||||
using Darkmatter.Core;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Darkmatter.Domain
|
||||
{
|
||||
public class PatrolState : State<EnemyStateMachine>
|
||||
{
|
||||
public PatrolState(EnemyStateMachine runner) : base(runner) { }
|
||||
private EnemyConfigSO enemyConfig => runner.enemyConfig;
|
||||
private IEnemyAnimController enemyAnimController => runner.enemyAnimController;
|
||||
private IEnemyPawn enemyPawn => runner.enemyPawn;
|
||||
private int currentPatrolPointIndex = 0;
|
||||
|
||||
|
||||
public override void Enter()
|
||||
{
|
||||
base.Enter();
|
||||
Debug.Log("Entered Patrol State");
|
||||
enemyPawn.OnHealthDecreased += HandleHealth;
|
||||
runner.SetSpeed(enemyConfig.walkSpeed);
|
||||
enemyAnimController.PlayWalkAnim(true);
|
||||
}
|
||||
|
||||
private void HandleHealth(float health)
|
||||
{
|
||||
if(health<=0)
|
||||
{
|
||||
runner.Die();
|
||||
}
|
||||
}
|
||||
|
||||
public override void Update()
|
||||
{
|
||||
if (enemyPawn.isDead) return;
|
||||
base.Update();
|
||||
Debug.Log("Update in Patrol State");
|
||||
HandlePatrol();
|
||||
CheckForStateBreak();
|
||||
}
|
||||
|
||||
private void CheckForStateBreak()
|
||||
{
|
||||
if(runner.PlayerInChasingRange())
|
||||
{
|
||||
runner.ChangeState(new ChaseState(runner));
|
||||
}
|
||||
}
|
||||
|
||||
private void HandlePatrol()
|
||||
{
|
||||
if (enemyPawn.PatrolPoints.Count == 0) return;
|
||||
Transform target = enemyPawn.PatrolPoints[currentPatrolPointIndex];
|
||||
enemyPawn.SetDestination(target.position);
|
||||
|
||||
if(Vector3.Distance(target.position,enemyPawn.ReturnMyPos()) < 0.5f) //close enought to targetPatrolPoint
|
||||
{
|
||||
Debug.Log("Reached Point");
|
||||
currentPatrolPointIndex = (currentPatrolPointIndex+1)%enemyPawn.PatrolPoints.Count;
|
||||
}
|
||||
}
|
||||
|
||||
public override void Exit()
|
||||
{
|
||||
base.Exit();
|
||||
enemyAnimController.PlayWalkAnim(false);
|
||||
Debug.Log("Exiting Patrol State");
|
||||
enemyPawn.OnHealthDecreased -= HandleHealth;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
2
Assets/Darkmatter/Code/Domain/Enemy/PatrolState.cs.meta
Normal file
2
Assets/Darkmatter/Code/Domain/Enemy/PatrolState.cs.meta
Normal file
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7c5d8a8739037414ea98cca25c34a1c9
|
||||
Reference in New Issue
Block a user