Exemple #1
0
    public void ShootOnTarget(Vector3 p_targetPos)
    {
        if (Time.time - m_lastfired <= 1 / m_weaponData.FireRate)
        {
            return;
        }

        if (OutOfAmmo)
        {
            Reload();
            return;
        }

        m_currentAmmo--;
        m_lastfired = Time.time;
        Vector3 l_recoil        = new Vector3(Recoil(), Recoil(), 0);
        Vector3 l_shotDirection = CustomMethod.GetNormalizedDirection(transform.position, (p_targetPos + l_recoil));
        Ray     l_ray           = new Ray(transform.position, l_shotDirection);

        Physics.Raycast(l_ray, out RaycastHit l_hit, m_weaponData.Range, m_targetLayer, QueryTriggerInteraction.Collide);
        Debug.DrawRay(l_ray.origin, l_ray.direction * m_weaponData.Range, Color.magenta, 3);

        if (l_hit.collider != null)
        {
            IDamagable damagable = l_hit.transform.GetComponent <IDamagable>();

            if (damagable != null)
            {
                damagable.TakeDamage(new DamageInfo(m_weaponData.Damage, l_hit.point, l_hit.normal));
            }
        }

        //FX
        shootSfx?.Play();
        flashFx?.Play();
    }