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,58 @@
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();
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;
enemyPawn.GameObject.transform.rotation = Quaternion.LookRotation(dir);
//rotate towards player and handle Attack here
}
public override void Exit()
{
base.Exit();
enemyAnimController.PlayAttackAnim(false);
enemyPawn.OnHealthDecreased -= HandleHealth;
}
}
}

View File

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

View File

@@ -0,0 +1,64 @@
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();
runner.SetSpeed(enemyConfig.chaseSpeed);
enemyAnimController.PlayeChaseAnim(true);
enemyPawn.OnHealthDecreased += HandleHealth;
runner.audioService.PlaySFXAt(AudioId.Zombie_Growl, enemyPawn.ReturnMyPos());
}
private void HandleHealth(float health)
{
if (health <= 0)
{
runner.Die();
}
}
public override void Update()
{
if (enemyPawn.isDead) return;
base.Update();
HandleChase();
CheckForStateBreak();
}
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();
enemyAnimController.PlayeChaseAnim(false);
enemyPawn.OnHealthDecreased -= HandleHealth;
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 3a599db206b4b2a4b91b0af8749183e7

View File

@@ -0,0 +1,32 @@
using Darkmatter.Core;
using UnityEngine;
using VContainer;
using VContainer.Unity;
namespace Darkmatter.Domain
{
public class EnemyController : MonoBehaviour
{
EnemyStateMachine esm;
IEnemyAnimController animController;
IEnemyPawn enemy;
[SerializeField] public EnemyConfigSO enemyConfig;
[Inject] IAudioService audioService;
private void Awake()
{
animController = this.GetComponent<IEnemyAnimController>();
enemy = this.GetComponent<IEnemyPawn>();
}
public void Start()
{
esm = new EnemyStateMachine(enemy,animController,audioService, enemyConfig);
esm.ChangeState(new PatrolState(esm));
}
public void Update()
{
esm.Update();
}
}
}

View File

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

View File

@@ -0,0 +1,55 @@
using Darkmatter.Core;
using System.Threading.Tasks;
using UnityEngine;
using VContainer;
namespace Darkmatter.Domain
{
public class EnemyStateMachine:StateMachine
{
public readonly IEnemyPawn enemyPawn;
public readonly IEnemyAnimController enemyAnimController;
public readonly EnemyConfigSO enemyConfig;
public readonly IAudioService audioService;
public EnemyStateMachine(IEnemyPawn pawn, IEnemyAnimController animController, IAudioService audioService, EnemyConfigSO enemyConfig)
{
enemyPawn = pawn;
enemyAnimController = animController;
this.audioService = audioService;
this.enemyConfig = 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()
{
if (enemyPawn.isDead) return;
enemyAnimController.PlayDeadAnim();
audioService.PlaySFXAt(AudioId.Zombie_Death,enemyPawn.ReturnMyPos());
enemyPawn.Die();
}
}
}

View File

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

View File

@@ -0,0 +1,72 @@
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();
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
{
currentPatrolPointIndex = (currentPatrolPointIndex+1)%enemyPawn.PatrolPoints.Count;
}
}
public override void Exit()
{
base.Exit();
enemyAnimController.PlayWalkAnim(false);
enemyPawn.OnHealthDecreased -= HandleHealth;
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 7c5d8a8739037414ea98cca25c34a1c9