protected override void basicAttack1()
    {
        colliderList = Physics.OverlapSphere(transform.position, m_rangeToTakeBullet);
        FlingableRock bullet = null;

        if (colliderList.Length > 0)
        {
            bullet = findBullet();
            if (!bullet)
            {
                spawnAndFlingBullet(m_launcher, m_attack1ForceUp, m_attack1ForceForward);
            }
            else
            {
//                 GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
//                 sphere.transform.position = transform.position;
//                 sphere.transform.localScale = new Vector3(1, 1, 1) * m_rangeToTakeBullet;
//                 sphere.GetComponent<SphereCollider>().enabled = false;

//                UnityEditor.EditorApplication.isPaused = true;

                bullet.setUser(gameObject);
                bullet.fling(m_launcher, m_attack1ForceUp, m_attack1ForceForward, false);
            }
        }
        else
        {
            spawnAndFlingBullet(m_launcher, m_attack1ForceUp, m_attack1ForceForward);
        }

        m_executingAtk1 = true;
        m_Animator.Play("Attack 01");
        m_Animator.CrossFade("Grounded", 1f);
    }
예제 #2
0
    private void basicAttack1()
    {
        AttackLauncher atkLauncher = GetComponent <AttackLauncher>();

        Ray        ray = atkLauncher.getAimRay();
        RaycastHit hit;
        bool       collided = Physics.Raycast(ray, out hit, 5000);

        BreakableRock breakableRock = null;

        if (hit.collider)
        {
            breakableRock = hit.collider.GetComponentInParent <BreakableRock>();
        }

        if (Physics.Raycast(ray, out hit, 5000))
        {
            if (collided && breakableRock != null)
            {
                breakableRock.breakRock(gameObject, GetComponent <AttackLauncher>(), m_attack1ForceUp, m_attack1ForceForward);
            }
            else
            {
                Collider[]    colliders = Physics.OverlapSphere(transform.position, m_rangeToTakeBullet);
                FlingableRock bullet    = null;

                if (colliders.Length > 0)
                {
                    bullet = findBullet(colliders);
                    if (!bullet)
                    {
                        spawnAndFlingBullet(GetComponent <AttackLauncher>(), m_attack1ForceUp, m_attack1ForceForward);
                    }
                    else
                    {
                        //                 GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
                        //                 sphere.transform.position = transform.position;
                        //                 sphere.transform.localScale = new Vector3(1, 1, 1) * m_rangeToTakeBullet;
                        //                 sphere.GetComponent<SphereCollider>().enabled = false
                        //                UnityEditor.EditorApplication.isPaused = true;

                        bullet.setUser(gameObject);
                        myCurrentBullet = bullet;
                        bullet.fling(GetComponent <AttackLauncher>(), m_attack1ForceUp, m_attack1ForceForward, false);
                    }
                }
                else
                {
                    spawnAndFlingBullet(GetComponent <AttackLauncher>(), m_attack1ForceUp, m_attack1ForceForward);
                }
            }
        }
        GetComponent <BasicMovement>().m_Animator.Play("Attack 01");
        GetComponent <BasicMovement>().m_Animator.CrossFade("Grounded", 1f);
    }
예제 #3
0
    public void breakRock(GameObject _user, AttackLauncher _launcher, float _forceUp, float _forceForward)
    {
        if (transform.childCount <= 1)
        {
            return;
        }

        Transform child = transform.GetChild(0);

        if (!child.name.Contains("Part"))
        {
            return;
        }

        MeshRenderer childMeshRenderer = child.GetComponent <MeshRenderer>();

        float centerRatio = childMeshRenderer.bounds.size.y / (2 * m_size.y);

        m_boxCollider.center -= new Vector3(0, centerRatio, 0);

        float sizeRatio = 1 - childMeshRenderer.bounds.size.y / m_size.y;

        m_boxCollider.size = new Vector3(m_boxCollider.size.x, sizeRatio, m_boxCollider.size.z);

        m_size -= childMeshRenderer.bounds.size;

        if (m_pieceList.Count == 0)
        {
            return;
        }

        Object obj = Instantiate(m_pieceList[0], child.position + Vector3.up * 0.1f, child.rotation);

        m_pieceList.RemoveAt(0);

        GameObject gameObject = (GameObject)obj;

        scaleIt(gameObject);
        FlingableRock flingableRock = gameObject.GetComponent <FlingableRock>();

        Destroy(child.gameObject);
        flingableRock.setUser(_user);
        flingableRock.fling(_launcher, _forceUp, _forceForward, true);
    }
예제 #4
0
    void spawnAndFlingBullet(string _buttonToWatch, float _forceUp, float _forceForward)
    {
        Vector3    spawnProjectile = transform.position + transform.forward * m_OffsetForwardEarth;
        RaycastHit hit;

        if (Physics.Raycast(spawnProjectile, -Vector3.up, out hit, 50))
        {
            if (m_attackObject.transform.childCount == 0)
            {
                return;
            }
            Transform    child        = m_attackObject.transform.GetChild(0);
            MeshRenderer meshRenderer = child.GetComponent <MeshRenderer>();
            spawnProjectile = hit.point - new Vector3(0, meshRenderer.bounds.extents.y, 0);

            FlingableRock tmpBullet = ((GameObject)Instantiate(m_attackObject, spawnProjectile, Quaternion.identity)).GetComponent <FlingableRock>();
            tmpBullet.setUser(m_username);
            tmpBullet.init(null, _forceUp, _forceForward);
        }
    }
예제 #5
0
    // ---

    private FlingableRock findBullet(Collider[] colliders)
    {
        int   closerOne  = -1;
        float closerDist = 0;

        for (int i = 0; i < colliders.Length; ++i)
        {
            FlingableRock rock = colliders[i].GetComponent <FlingableRock>();

            if (rock != null)
            {
                if (rock.m_user != null)
                {
                    continue;
                }

                float distance = Vector3.Distance(transform.position, rock.transform.position);
                if (distance < m_rangeToTakeBullet && (closerOne == -1 || closerDist > distance))
                {
                    closerDist = distance;
                    closerOne  = i;
                }
            }
        }

        if (closerOne == -1)
        {
            return(null);
        }
        else
        {
            FlingableRock flingableRock = colliders[closerOne].GetComponent <FlingableRock>();

            if (flingableRock.canRiseInMinTime(0.30f, gameObject, m_attack1ForceUp))
            {
                return(flingableRock);
            }

            return(null);
        }
    }
예제 #6
0
    private void spawnAndFlingBullet(AttackLauncher _launcher, float _forceUp, float _forceForward)
    {
        Vector3    spawnProjectile = transform.position + transform.forward * m_OffsetForwardEarth;
        RaycastHit hit;

        if (Physics.Raycast(spawnProjectile, -Vector3.up, out hit, 50))
        {
            if (rockBullet.transform.childCount == 0)
            {
                return;
            }

            Transform    child        = rockBullet.transform.GetChild(0);
            MeshRenderer meshRenderer = child.GetComponent <MeshRenderer>();
            spawnProjectile = hit.point - new Vector3(0, meshRenderer.bounds.extents.y, 0);

            FlingableRock tmpBullet = ((GameObject)Instantiate(rockBullet, spawnProjectile, Quaternion.identity)).GetComponent <FlingableRock>();
            tmpBullet.setUser(gameObject);
            myCurrentBullet = tmpBullet;
            tmpBullet.init(_launcher, _forceUp, _forceForward);
        }
    }
    FlingableRock findBullet()
    {
        int   closerOne  = -1;
        float closerDist = 0;

        for (int i = 0; i < colliderList.Length; ++i)
        {
            FlingableRock rock = colliderList[i].GetComponent <FlingableRock>();

            if (rock != null)
            {
                if (rock.m_user != null)
                {
                    continue;
                }

                float distance = Vector3.Distance(transform.position, rock.transform.position);
                if (distance < m_rangeToTakeBullet && (closerOne == -1 || closerDist > distance))
                {
                    closerDist = distance;
                    closerOne  = i;
                }
            }
        }

        if (closerOne == -1)
        {
            return(null);
        }
        else
        {
//             FlingableRock flingableRock = colliderList[closerOne].GetComponent<FlingableRock>();
//
//             if (flingableRock.canRiseInMinTime(0.30f, this))
//                 return flingableRock;

            return(null);
        }
    }