IEnumerator DoDamage(CharaterStats stats, float delay) { yield return(new WaitForSeconds(delay)); stats.TakeDamage(myStats.damage.GetValue()); if (stats.currentHealth <= 0) { InCombat = false; } }
public void Attack(CharaterStats targetStats) { if (attackCooldown <= 0f) { StartCoroutine(DoDamage(targetStats, attackDelay)); if (OnAttack != null) { OnAttack(); } attackCooldown = 1f / attackSpeed; InCombat = true; lastAttackTime = Time.time; } }
// Update is called once per frame void Update() { float distance = Vector3.Distance(target.position, transform.position); if (distance <= lookRadius) { agent.SetDestination(target.position); if (distance <= agent.stoppingDistance) { CharaterStats targetStats = target.GetComponent <CharaterStats>(); if (targetStats != null) { combat.Attack(targetStats); } FaceTarget(); } } }
void Start() { playerManager = PlayerManager.instance; myStats = GetComponent <CharaterStats>(); }
void Start() { myStats = GetComponent <CharaterStats>(); }