Ejemplo n.º 1
0
        private void OnTriggerEnter(Collider other)
        {
            // make projectiles go trough cinematic triggers and items on the ground
            if (other.gameObject.CompareTag(TAG_CINEMATIC) || other.gameObject.CompareTag(TAG_PICKUP))
            {
                return;
            }

            foreach (GameObject toDestroy in destroyAfterHit)
            {
                toDestroy.SetActive(true);
            }

            var targetHealth = other.GetComponent <Health>();

            if (targetHealth == null)
            {
                // to disallow friendly fire -  || targetHealth != target
                ReturnToPool();
                return;
            }

            if (targetHealth.IsDead)
            {
                StartCoroutine(ReturnToPoolWithDelay(projectileTTL));
                return;
            }

            speed = 0;

            if (hitEffect != null)
            {
                Vector3 position     = m_Transform.position;
                Vector3 closestPoint = !targetHealth.IsDead
                    ? other.ClosestPoint(position)
                    : m_Target.GetComponent <Collider>().ClosestPoint(position);
                GameObject impactObj = Instantiate(hitEffect);
                impactObj.transform.position = closestPoint;
                impactObj.transform.rotation = m_Transform.rotation;
            }

            if (targetHealth == m_Target)
            {
                m_Target.TakeDamage(m_Instigator, m_Damage);
            }
            else
            {
                targetHealth.TakeDamage(m_Instigator, m_Damage);
            }

            foreach (GameObject toDestroy in destroyAfterHit)
            {
                toDestroy.SetActive(false);
            }

            onHit?.Invoke();
            m_UpdateUi?.Invoke();

            StartCoroutine(ReturnToPoolWithDelay(afterHitTTL));
        }
Ejemplo n.º 2
0
        private Vector3 GetAimLocation()
        {
            CapsuleCollider targetCapsuleCollider = target.GetComponent <CapsuleCollider>();

            if (targetCapsuleCollider == null)
            {
                return(target.transform.position);
            }
            return(target.transform.position + Vector3.up * targetCapsuleCollider.height / 2);
        }
Ejemplo n.º 3
0
 public IEnumerator _BlockHitReact()
 {
     StopAllCoroutines();
     StartCoroutine(_LockMovementAndAttack(0.5f));
     target.GetComponent <Animator>().SetTrigger("BlockHitReactTrigger");
     yield return(null);
 }
Ejemplo n.º 4
0
 void Hit()
 {
     if (target)
     {
         target.GetComponent <Health>().TakeDamage(weaponDamage);
     }
 }
Ejemplo n.º 5
0
        private Vector3 GetAimLocation()
        {
            var targetCapsule = _target.GetComponent <CapsuleCollider>();
            var position      = _target.transform.position;

            return(targetCapsule == null ? position : position + Vector3.up * targetCapsule.height / 2);
        }
Ejemplo n.º 6
0
        public float CalculateDamage(GameObject instigator, Health target, Weapon weapon)
        {
            attackerStats      = instigator.GetComponent <BaseStats>();
            attackerLevel      = attackerStats.GetLevel();
            attackerCritChange = attackerStats.GetStat(Stat.CritPercentage);
            weaponDamage       = weapon.WeaponDamage;
            weaponSpeed        = weapon.WeaponSpeed;

            defenderStats = target.GetComponent <BaseStats>();
            defenderLevel = defenderStats.GetLevel();

            float hitChance = random.Next(1, 100);

            if (hitChance <= (hitEqualLevel + hitChangePrLevel * (attackerLevel - defenderLevel)))
            {
                if (weapon.IsMagicAttack)
                {
                    return(CalculateMagicDamage());
                }
                else
                {
                    return(CalculateMeleeDamage());
                }
            }
            else //miss
            {
                Debug.Log("Miss");
                return(0f);
            }
        }
Ejemplo n.º 7
0
        // Animation Event
        void Hit()
        {
            if (target == null)
            {
                return;
            }

            float     damage          = GetComponent <BaseStats>().GetStat(Stat.Damage);
            BaseStats targetBaseStats = target.GetComponent <BaseStats>();

            if (targetBaseStats != null)
            {
                float defence = targetBaseStats.GetStat(Stat.Defence);
                damage /= 1 + defence / damage;
            }

            if (currentWeapon.value != null)
            {
                currentWeapon.value.OnHit();
            }

            if (currentWeaponConfig.HasProjectile())
            {
                currentWeaponConfig.LaunchProjectile(rightHandTransform, leftHandTransform, target, gameObject, damage);
            }
            else
            {
                target.TakeDamage(gameObject, damage);
            }
        }
Ejemplo n.º 8
0
        // Private Methods
        private Vector3 GetPosition()
        {
            CapsuleCollider collider = target.GetComponent <CapsuleCollider>();
            Vector3         offset   = Vector3.up * collider.height * 0.66f;

            return(target.transform.position + offset);
        }
Ejemplo n.º 9
0
        private Vector3 GetAimLocation()
        {
            CapsuleCollider targetCapsule = target.GetComponent <CapsuleCollider>();

            return(null == targetCapsule ?
                   target.transform.position :
                   target.transform.position + Vector3.up * targetCapsule.height * 0.5f);
        }
Ejemplo n.º 10
0
        private Vector3 GetAimLocation()
        {
            CapsuleCollider targetCapsule = target.GetComponent <CapsuleCollider>();

            if (targetCapsule == null)
            {
                return(target.transform.position);
            }
            return(target.transform.position); // + Vector3.up * targetCapsule.height / 2; for very low target position
        }
Ejemplo n.º 11
0
        private Vector3 GetAimLocation()
        {
            CapsuleCollider targetCapsule = target.GetComponent <CapsuleCollider>();

            if (targetCapsule == null)
            {
                return(target.transform.position);
            }
            return(target.transform.position + (Vector3.up * ((targetCapsule.height * 5 / 8))));
        }
Ejemplo n.º 12
0
        private Vector3 GetAimPosition()
        {
            CapsuleCollider capsule = target.GetComponent <CapsuleCollider>();

            if (capsule == null)
            {
                return(target.transform.position);
            }
            return(target.transform.position + Vector3.up * capsule.height / 2);
        }
Ejemplo n.º 13
0
        private Vector3 GetAimLocation()                                             // aims the arrow/projectile at the target's center mass
        {
            CapsuleCollider targetCapsule = target.GetComponent <CapsuleCollider>(); // sets the target to the capsule collider of the target

            if (targetCapsule == null)
            {
                return(target.transform.position);                                     // location of the target
            }
            return(target.transform.position + Vector3.up * targetCapsule.height / 2); // center mass of the target
        }
Ejemplo n.º 14
0
        private Vector3 GetAimLocation()
        {
            CapsuleCollider targetCapsule = target.GetComponent <CapsuleCollider>();

            if (targetCapsule == null)
            {
                return(target.transform.position);                       // If target does not have capsule collider
            }
            return(target.transform.position + Vector3.up * targetCapsule.height / 2);
        }
Ejemplo n.º 15
0
        private Vector3 GetAimLocation()
        {
            CapsuleCollider targetcapsule = _target.GetComponent <CapsuleCollider>();

            if (targetcapsule == null)
            {
                return(_target.transform.position);
            }
            return(_target.transform.position + Vector3.up * targetcapsule.height / _aimHeight);
        }
Ejemplo n.º 16
0
        private Vector3 GetAimLocation()
        {
            CapsuleCollider targetCapsule = target.GetComponent <CapsuleCollider>();

            if (targetCapsule == null)
            {
                return(target.transform.position);
            }
            // return targets position + half ot the targets height
            return(target.transform.position + Vector3.up * targetCapsule.height / 2);
        }
Ejemplo n.º 17
0
        private Vector3 GetAimLocation()
        {
            CapsuleCollider targetCapsule = target.GetComponent <CapsuleCollider>();

            if (targetCapsule == null)
            {
                return(target.transform.position);
            }

            return(target.transform.position + Vector3.up * targetCapsule.height / 2); //TODO: I don't understand this formula?
        }
Ejemplo n.º 18
0
        private Vector3 GetAimLocation()
        {
            CapsuleCollider targetCollider = _target.GetComponent <CapsuleCollider>();

            if (targetCollider != null && targetCollider.enabled)
            {
                return(_target.transform.position + (Vector3.up * (targetCollider.height / 2)));
            }

            return(_target.transform.position);
        }
Ejemplo n.º 19
0
        private Vector3 GetAimLocation()
        {
            // Arrow shoots at feet so this ensures arrow aims at middle of capsule collider
            CapsuleCollider targetCapsule = target.GetComponent <CapsuleCollider>();

            if (targetCapsule == null)
            {
                return(target.transform.position);
            }
            return(target.transform.position + (Vector3.up * targetCapsule.height / 2));
        }
Ejemplo n.º 20
0
        private Vector3 GetAimLocation()
        {
            Vector3         aimLocation   = target.transform.position;
            CapsuleCollider targetCapsule = target.GetComponent <CapsuleCollider>();

            if (targetCapsule)
            {
                // Adjust the aim location to be at the target mid height
                aimLocation += Vector3.up * targetCapsule.height * 0.5f;
            }
            return(aimLocation);
        }
Ejemplo n.º 21
0
        private Vector3 GetAimLocation()
        {
            CapsuleCollider targetCapsule = target.GetComponent <CapsuleCollider>();

            if (targetCapsule == null)
            {
                return(target.transform.position);
            }
            // target.position 으로 target의 위치를 얻고
            // + Vector3.up * targetCapsule.height / 2 로 상대의 타격객체의 몸통을 노린다. /2 보다 *0.5가 더 빠름.
            return(target.transform.position + Vector3.up * (targetCapsule.height * 0.5f));
        }
Ejemplo n.º 22
0
        Vector3 GetAimLocation()
        {
            CapsuleCollider cc = myTarget.GetComponent <CapsuleCollider>();

            if (cc == null)
            {
                return(myTarget.transform.position);
            }

            // we have vector3.up so that the x and z values aren't affected
            // in this calculation since we are only interested in returning the new y value
            return(myTarget.transform.position + (Vector3.up * (cc.height / 2)));
        }
Ejemplo n.º 23
0
 private void AttackBehaviour()
 {
     transform.LookAt(target.transform);
     if (timeSinceLastAttack > timeBetweenAttacks)
     {
         //trigger Hit() event
         TriggerAttack();
         timeSinceLastAttack = 0;
         Health healthComponent = target.GetComponent <Health>();
         float  damage          = GetComponent <BaseStats>().GetStat(Stat.Damage);
         healthComponent.TakeDamage(gameObject, damage);
     }
 }
Ejemplo n.º 24
0
        public void OnHit(Health target)
        {
            onHit?.Invoke();

            if (hitEffect == null)
            {
                return;
            }
            GameObject impactObj = Instantiate(hitEffect);

            impactObj.transform.position = target.GetComponent <Collider>().ClosestPoint(transform.position);
            impactObj.transform.rotation = transform.rotation;
        }
Ejemplo n.º 25
0
        private Vector3 GetAimLocation()
        {
            Vector3 aimPosition = target.transform.position;

            var targetCapsule = target.GetComponent <CapsuleCollider>();

            if (targetCapsule != null)
            {
                aimPosition += Vector3.up * targetCapsule.height / 2;
            }

            return(aimPosition);
        }
Ejemplo n.º 26
0
        //Hedefin tam yükseklik merkezini işan noktası olarak döndüren fonksiyon
        private Vector3 GetAimLocation()
        {
            CapsuleCollider targetCapsule = target.GetComponent <CapsuleCollider>();

            //eğer coolider yoksa
            if (targetCapsule == null)
            {
                return(target.transform.position);
            }

            //collider ın tam orta noktası hesaplandı
            return(target.transform.position + Vector3.up * targetCapsule.height / 2);
        }
Ejemplo n.º 27
0
        /// <summary>
        /// Calculates the location where the projectile is going to on the target
        /// </summary>
        /// <returns></returns>
        private Vector3 GetAimLocation()
        {
            CapsuleCollider targetHitBox = m_Target.GetComponent <CapsuleCollider>();

            //Protect against null
            if (targetHitBox == null)
            {
                return(m_Target.transform.position);
            }
            else
            {
                return(m_Target.transform.position + Vector3.up * (targetHitBox.height / 1.5f));
            }
        }
Ejemplo n.º 28
0
        //An animation event! triggered on range attacks
        void Shoot()
        {
            if (target == null || quiver == null || !quiver.CanUse())
            {
                Cancel();
                print("Shoot animation triggered but no arrow shot. Target: " + target);
                return;
            }
            var launchArrow = quiver.Use();

            launchArrow.transform.position = leftHand.position;
            var     bodyMass       = target.GetComponent <CharacterBodyCenter>();
            Vector3 targetPosition = bodyMass ? bodyMass.bodyCenter.transform.position : target.transform.position;

            launchArrow.Launch(targetPosition, currentWeapon.Damage + quiver.Damage, gameObject.tag);
        }
Ejemplo n.º 29
0
        // Animation Event
        public void Hit()
        {
            if (target == null)
            {
                return;
            }

            if (currentWeapon.value.HasProjectile())
            {
                currentWeapon.value.LaunchProjectile(rightHandTransform, leftHandTransform, target, gameObject, GetComponent <BaseStats>().GetStat(Stat.Dmg));
            }
            else
            {
                target.GetComponent <Health>().TakeDamage(gameObject, GetComponent <BaseStats>().GetStat(Stat.Dmg));
            }
        }
Ejemplo n.º 30
0
 // Animation triggered events
 private void Hit()
 {
     if (opponent == null)
     {
         return;
     }
     if (currentSpell)
     {
         currentSpell.CastSpell(me, opponent, hands, baseStats.GetCasterLevel());
     }
     else
     {
         Health enemyHealth = opponent.GetComponent <Health>();
         DealDamage(enemyHealth);
         enemyHealth.GetComponent <Fighter>().LookAt(transform.position);
     }
 }