Exemple #1
0
    /// <summary>
    /// Checks to see if the punch hit anything
    /// </summary>
    void checkPunch()
    {
        Vector3 origin      = transform.position - (transform.forward * playerRadius) + attackPoint;
        int     layerMask   = 1 << LayerMask.NameToLayer("Enemy");
        float   switchdir   = -1;
        float   widthScale  = 0.5f;
        bool    hitCollided = false;

        for (int i = 0; i < 3; i++)
        {
            switchdir *= -1;
            if (Physics.Raycast(origin, transform.forward, out RaycastHit hit, punchRange, layerMask))
            {
                bool wasHit = false;
                foreach (GameObject child in hitEnemies)
                {
                    if (hit.collider.gameObject.Equals(child))
                    {
                        wasHit = true;
                        break;
                    }
                }
                if (!wasHit)
                {
                    hitCollided = true;
                    if (!hit.collider.gameObject.GetComponent <AI>().channeling)
                    {
                        hit.collider.GetComponent <AI>().takeDamage(punchDamage);
                    }
                    if (hit.collider.gameObject.GetComponent <AI>().isDead)
                    {
                        points.gainKills();
                    }
                    hitEnemies.Add(hit.collider.gameObject);
                }
            }
            origin     += transform.right * (playerRadius * widthScale) * switchdir;
            widthScale += 0.5f;
        }
        if (hitCollided)
        {
            input.setVibration(1, 0.1f);
            OnHit.Invoke();
        }
    }