protected override void Attack(DamageableGameObject target)
        {
            GameObject           projectile = Instantiate(projectilePrefab, castTransform.position, Quaternion.identity) as GameObject;
            ProjectileController controller = projectile.GetComponent <ProjectileController>();

            controller.Init(target, ofenseStats.damage);
            controller.onAttackStrike += onAttackStrike;
        }
示例#2
0
 public void AttackOnCoolDown(DamageableGameObject target)
 {
     if (cooldown <= 0f)
     {
         cooldown = 1f / stats.attackSpeed;
         target.TakeDamage(stats.damage);
     }
 }
 void OnTriggerExit(Collider other)
 {
     if (enemyMask.Contains(other.gameObject.layer))
     {
         DamageableGameObject obj = other.transform.parent.GetComponent <DamageableGameObject>();
         enemiesToAttack.Remove(obj);
     }
 }
示例#4
0
 protected override void Attack(DamageableGameObject target)
 {
     target.TakeDamage(ofenseStats.damage);
     if (onAttackStrike != null)
     {
         onAttackStrike(target.damageTransform.position);
     }
 }
 public void AttackOnCooldown(DamageableGameObject target)
 {
     if (cooldown <= 0f)
     {
         cooldown = 1f / ofenseStats.attackSpeed;
         target.TakeDamage(ofenseStats.damage);
         if (onAttackHit != null)
         {
             onAttackHit(target.transform.position);
         }
     }
 }
 public void AttackOnCooldown(DamageableGameObject target)
 {
     if (cooldown <= 0f)
     {
         cooldown = 1f / ofenseStats.attackSpeed;
         if (onAttackStart != null)
         {
             onAttackStart();
         }
         StartCoroutine(AttackAfterDelay(target, attackDelay));
     }
 }
 void OnTriggerEnter(Collider other)
 {
     if (enemyMask.Contains(other.gameObject.layer))
     {
         DamageableGameObject obj = other.transform.parent.GetComponent <DamageableGameObject>();
         if (!enemiesToAttack.Contains(obj))
         {
             enemiesToAttack.Add(obj);
             obj.onDied += () => { enemiesToAttack.Remove(obj); };
         }
     }
 }
        IEnumerator AttackAfterDelay(DamageableGameObject target, float delay)
        {
            yield return(new WaitForSeconds(delay));

            if (target != null)
            {
                if (onAttackCast != null)
                {
                    onAttackCast(castTransform.position);
                }
                Attack(target);
            }
        }
        void Awake()
        {
            Canvas canvas = FindWorldCanvas();

            if (canvas == null)
            {
                throw new Exception("A WorldSpace canvas was needed");
            }
            cam          = Camera.main.transform;
            healthUI     = Instantiate(healthUIPrefab, canvas.transform);
            healthSlider = healthUI.transform.GetChild(0).GetComponent <Image>();
            damageable   = GetComponent <DamageableGameObject>();

            damageable.onHealthChanged += UpdateHealth;
            damageable.onDied          += DestroyHealth;
        }
示例#10
0
        protected virtual void Awake()
        {
            if (gameObject.tag != "Enemy")
            {
                obj = GameObject.FindWithTag("Enemy");
            }
            else
            {
                obj = GameObject.FindWithTag("Player");
            }

            if (obj != null)
            {
                enemyDamageable = obj.GetComponent <DamageableGameObject>();
            }
            agent     = GetComponent <NavMeshAgent>();
            enemyMask = LayerMask.GetMask(enemyLayers);

            if (castTransform == null)
            {
                castTransform = transform;
            }
        }
 public void Init(DamageableGameObject target, int damage)
 {
     this.target = target;
     this.damage = damage;
     isInit      = true;
 }
 protected abstract void Attack(DamageableGameObject target);