private void OnTriggerStay(Collider other)
        {
            if ((damagedLayers.value & 1 << other.gameObject.layer) == 0)
            {
                return;
            }

            Damageable d = other.GetComponentInChildren <Damageable>();

            if (d != null && timer > delay)
            {
                timer = 0f;
                d.currentHitPoints -= amount;
                if (d.currentHitPoints <= 3)
                {
                    Damageable.DamageMessage message = new Damageable.DamageMessage
                    {
                        damageSource = transform.position,
                        damager      = this,
                        amount       = 100,
                        direction    = (other.transform.position - transform.position).normalized,
                        throwing     = false
                    };

                    d.ApplyDamage(message);
                }
            }
            else
            {
                timer += Time.deltaTime;
            }
        }
        void AreaDamageEnemies(Vector3 location, float radius, float damage)
        {
            Collider[] objectsInRange = Physics.OverlapSphere(location, radius);
            foreach (Collider col in objectsInRange)
            {
                if (col.gameObject.layer == 13)
                {
                    Damageable enemy = col.GetComponent <Damageable>();
                    if (enemy != null)
                    {
                        // linear falloff of effect
                        float proximity = (location - enemy.transform.position).magnitude;
                        float effect    = 1 - (proximity / radius);


                        Damageable.DamageMessage message = new Damageable.DamageMessage
                        {
                            damageSource = transform.position,
                            damager      = this,
                            amount       = (int)(damage),
                            direction    = (col.gameObject.transform.position - transform.position).normalized,
                            throwing     = false,
                        };

                        enemy.ApplyDamage(message);
                    }
                }
            }
        }
        private bool CheckDamage(Collider other, AttackPoint pts)
        {
            Damageable d = other.GetComponent <Damageable>();

            if (d == null)
            {
                return(false);
            }

            if (d.gameObject == m_Owner)
            {
                return(true);
            }

            if ((targetLayers.value & (1 << other.gameObject.layer)) == 0)
            {
                return(false);
            }



            Damageable.DamageMessage data;

            data.amount       = damage;
            data.damager      = this;
            data.direction    = m_Direction.normalized;
            data.damageSource = m_Owner.transform.position;
            data.throwing     = m_IsThrowingHit;
            data.stopCamera   = false;

            d.ApplyDamage(data);

            if (hitParticlePrefab != null)
            {
                m_ParticlesPool[m_CurrentParticle].transform.position = pts.attackRoot.transform.position;
                m_ParticlesPool[m_CurrentParticle].time = 0;
                m_ParticlesPool[m_CurrentParticle].Play();
                m_CurrentParticle = (m_CurrentParticle + 1) % PARTICLE_COUNT;
            }

            return(true);
        }
예제 #4
0
        private void OnTriggerStay(Collider other)
        {
            if ((damagedLayers.value & 1 << other.gameObject.layer) == 0)
            {
                return;
            }

            Damageable d = other.GetComponentInChildren <Damageable>();

            if (d != null && !d.isInvulnerable)
            {
                Damageable.DamageMessage message = new Damageable.DamageMessage
                {
                    damageSource = transform.position,
                    damager      = this,
                    amount       = amount,
                    direction    = (other.transform.position - transform.position).normalized,
                    throwing     = false
                };

                d.ApplyDamage(message);
            }
        }