// Function : EnemyIldeStateFunction // Method : This Function is Use for Update When Enemy is At The Ilde Statement void EnemyIldeStateFunction() { if (!IsDead) { if (!HasFoundPlayer) { _nav.stoppingDistance = 0.0f; _anim.SetFloat(WalkingSpeedFloatAnimator, 0f); WaitingCrtTimer -= Time.deltaTime; if (WaitingCrtTimer <= 0) { _nav.SetDestination(_WayPoints[WayPointCount].position); _EnemySoilderStatus = EnemySoilderStatus.Enemy_WalkingState; } } else { _EnemySoilderStatus = EnemySoilderStatus.Enemy_FoundPlayerState; } } else { _EnemySoilderStatus = EnemySoilderStatus.Enemy_DeadState; } }
// Function :EnemyGetHurtStatement // Method : This Function is Mainly used For Update The Statement // When The AI Is At The Get Hurt Statement void EnemyGetHurtStatement() { if (!IsDead) { HasFoundPlayer = true; _EnemySoilderStatus = EnemySoilderStatus.Enemy_FoundPlayerState; } else { _EnemySoilderStatus = EnemySoilderStatus.Enemy_DeadState; } }
// Function : SettingBasicInformation // Method : This Function is Mainly used For Setting The Basic Statement void SettingBasicInformation() { IsDead = false; _Enemy2SoilderState = EnemySoilderStatus.Enemy_IldeState; CanAttack = false; DoAttack = false; HasBeenCountedBf = false; CanAttackMaxTimer = Random.Range(3f, 4.5f); CanAttackCrtTimer = CanAttackMaxTimer; GetHurtMaxTimer = Random.Range(0.6f, 1.4f); GetHurtCrtTimer = GetHurtMaxTimer; }
// Function : EnemyWalkingStateFunction // Method : This Function is Mainly used For Update The Statement // When The AI Is At The Walking Statement void EnemyWalkingStateFunction() { if (!IsDead) { if (!HasFoundPlayer) { _nav.stoppingDistance = 0.0f; if (_nav.remainingDistance >= 0.05f) { if (_nav.remainingDistance >= 2f) { _nav.speed = 5f; _anim.SetFloat(WalkingSpeedFloatAnimator, Mathf.Lerp(_anim.GetFloat(WalkingSpeedFloatAnimator), 1f, 0.5f)); } else if (_nav.remainingDistance < 2f) { _nav.speed = 3f; _anim.SetFloat(WalkingSpeedFloatAnimator, Mathf.Lerp(_anim.GetFloat(WalkingSpeedFloatAnimator), 0.5f, 0.5f)); } } else if (_nav.remainingDistance <= 0.05f) { MaxCrtWaitingTimer = Random.Range(2.5f, 4f); WaitingCrtTimer = MaxCrtWaitingTimer; _EnemySoilderStatus = EnemySoilderStatus.Enemy_IldeState; if (WayPointCount < _WayPoints.Length) { WayPointCount++; if (WayPointCount >= _WayPoints.Length) { WayPointCount = 0; } } } } else { _EnemySoilderStatus = EnemySoilderStatus.Enemy_FoundPlayerState; } } else { _EnemySoilderStatus = EnemySoilderStatus.Enemy_DeadState; } }
// Function : EnemyFoundPlayerState // Method : This Function is Mainly used For Update The Statement // When The AI Is At The Found Player Statement void EnemyFoundPlayerState() { if (!IsDead) { if (HasFoundPlayer) { _nav.stoppingDistance = 1.65f; if (PlayerCtrl._INSTANCE != null) { float WithPlayerDistance = Vector3.Distance(this.transform.position, PlayerCtrl._INSTANCE.transform.position); _nav.SetDestination(PlayerCtrl._INSTANCE.transform.position); // _EnemySoilderStatus = EnemySoilderStatus.Enemy_WalkingState; if (_nav.remainingDistance >= 1.65f) { if (_nav.remainingDistance >= 2f) { _nav.speed = 5f; _anim.SetFloat(WalkingSpeedFloatAnimator, Mathf.Lerp(_anim.GetFloat(WalkingSpeedFloatAnimator), 1f, 0.5f)); } else if (_nav.remainingDistance < 2f) { _nav.speed = 3f; _anim.SetFloat(WalkingSpeedFloatAnimator, Mathf.Lerp(_anim.GetFloat(WalkingSpeedFloatAnimator), 0.5f, 0.5f)); } } else { _anim.SetFloat(WalkingSpeedFloatAnimator, 0f); _EnemySoilderStatus = EnemySoilderStatus.Enemy_AttackPlayerState;; } } } else { _EnemySoilderStatus = EnemySoilderStatus.Enemy_IldeState; } } else { _EnemySoilderStatus = EnemySoilderStatus.Enemy_DeadState; } }
// Function : EnemyIldeState // Method : This Function is Use for Update When Enemy is At The Ilde Statement private void EnemyIldeState() { if (!IsDead) { if (PlayerCtrl._INSTANCE != null) { float WithPlayerDistance = Vector3.Distance(transform.position, PlayerCtrl._INSTANCE.transform.position); if (WithPlayerDistance <= 15) { _Enemy2SoilderState = EnemySoilderStatus.Enemy_AttackPlayerState; } } } else { _Enemy2SoilderState = EnemySoilderStatus.Enemy_DeadState; } }
// Function :GetHurtFunction // Method : This Function is Mainly used For Update The Statement // When The AI Is At The Get Hurt Statement void GetHurtFunction() { if (!IsDead) { GetHurtCrtTimer -= Time.deltaTime; if (GetHurtCrtTimer <= 0) { if (PlayerCtrl._INSTANCE != null) { if (!PlayerCtrl._INSTANCE.IsDead) { float WithPlayerDistance = Vector3.Distance(transform.position, PlayerCtrl._INSTANCE.transform.position); if (WithPlayerDistance <= 25f) { _Enemy2SoilderState = EnemySoilderStatus.Enemy_AttackPlayerState; GetHurtMaxTimer = Random.Range(0.8f, 1.6f); GetHurtCrtTimer = GetHurtMaxTimer; } else if (WithPlayerDistance >= 25f) { _Enemy2SoilderState = EnemySoilderStatus.Enemy_IldeState; GetHurtMaxTimer = Random.Range(0.8f, 1.6f); GetHurtCrtTimer = GetHurtMaxTimer; } } else { _Enemy2SoilderState = EnemySoilderStatus.Enemy_IldeState; } } } } else { _Enemy2SoilderState = EnemySoilderStatus.Enemy_DeadState; } }
// Function : EnemyAttackPlayerState // Method : This Function is Mainly used For Update The Statement // When The AI Is At The Attack Player Statement void EnemyAttackPlayerState() { if (!IsDead) { if (!PlayerCtrl._INSTANCE.IsDead) { if (HasFoundPlayer) { if (_nav.remainingDistance >= 1.65f) { _EnemySoilderStatus = EnemySoilderStatus.Enemy_FoundPlayerState; } else if (_nav.remainingDistance <= 1.65f) { AttackCrtTimer -= Time.deltaTime; if (AttackCrtTimer <= 0) { DoAttack = true; } if (DoAttack) { int Rand = Random.Range(0, 9); if (Rand >= 0 && Rand <= 2) { _anim.SetTrigger(Attack1TriggerAnimator); transform.LookAt(PlayerCtrl._INSTANCE.transform.position, Vector3.up); transform.eulerAngles = new Vector3(0f, transform.eulerAngles.y, 0f); DoAttack = false; MaxAttackTimer = Random.Range(1.25f, 2f); AttackCrtTimer = MaxAttackTimer; } else if (Rand >= 3 && Rand <= 5) { _anim.SetTrigger(Attack2TriggerAnimator); transform.LookAt(PlayerCtrl._INSTANCE.transform.position, Vector3.up); transform.eulerAngles = new Vector3(0f, transform.eulerAngles.y, 0f); DoAttack = false; MaxAttackTimer = Random.Range(1.25f, 2f); AttackCrtTimer = MaxAttackTimer; } else if (Rand >= 6) { _anim.SetTrigger(Attack3TriggerAnimator); transform.LookAt(PlayerCtrl._INSTANCE.transform.position, Vector3.up); transform.eulerAngles = new Vector3(0f, transform.eulerAngles.y, 0f); DoAttack = false; MaxAttackTimer = Random.Range(1.25f, 2f); AttackCrtTimer = MaxAttackTimer; } } } } else { _EnemySoilderStatus = EnemySoilderStatus.Enemy_IldeState; } } else { HasFoundPlayer = false; } } else { _EnemySoilderStatus = EnemySoilderStatus.Enemy_DeadState; } }
// Function : EnemyAttackPlayerState // Method : This Function is Mainly used For Update The Statement // When The AI Is At The Attack Player Statement void EnemyAttackPlayerState() { if (!IsDead) { CanAttackCrtTimer -= Time.deltaTime; if (PlayerCtrl._INSTANCE != null) { if (!PlayerCtrl._INSTANCE.IsDead) { float WithPlayerDistance = Vector3.Distance(transform.position, PlayerCtrl._INSTANCE.transform.position); if (WithPlayerDistance <= 25f) { if (CanAttackCrtTimer <= 0) { CanAttack = true; } if (CanAttack) { int rand = Random.Range(0, 10); if (rand >= 0 && rand <= 2) { CanAttackMaxTimer = Random.Range(4.5f, 6f); CanAttackCrtTimer = CanAttackMaxTimer; CanAttack = false; _anim.SetTrigger(Attack1TriggerAnimator); transform.LookAt(PlayerCtrl._INSTANCE.transform.position, Vector3.up); transform.eulerAngles = new Vector3(0f, transform.eulerAngles.y, 0f); Debug.Log("Attack1 "); } else if (rand >= 3 && rand <= 5) { CanAttackMaxTimer = Random.Range(4.5f, 6f); CanAttackCrtTimer = CanAttackMaxTimer; CanAttack = false; _anim.SetTrigger(Attack2TriggerAnimator); transform.LookAt(PlayerCtrl._INSTANCE.transform.position, Vector3.up); transform.eulerAngles = new Vector3(0f, transform.eulerAngles.y, 0f); } else if (rand >= 6) { CanAttackMaxTimer = Random.Range(4.5f, 6f); CanAttackCrtTimer = CanAttackMaxTimer; CanAttack = false; _anim.SetTrigger(Attack3TriggerAnimator); transform.LookAt(PlayerCtrl._INSTANCE.transform.position, Vector3.up); transform.eulerAngles = new Vector3(0f, transform.eulerAngles.y, 0f); } } } else if (WithPlayerDistance > 25f) { _Enemy2SoilderState = EnemySoilderStatus.Enemy_IldeState; } } else { _Enemy2SoilderState = EnemySoilderStatus.Enemy_IldeState; } } } else { _Enemy2SoilderState = EnemySoilderStatus.Enemy_DeadState; } }