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 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);
        }
    }