public virtual FlyingCube Clone(Transform parent, Vector3 pos, Vector3 vel)
    {
        FlyingCube cube = null;

        //Before we clone, let's see if we can recycle a clone...
        if (m_inactiveClones.Count > 0)
        {
            cube = m_inactiveClones[0];
            m_inactiveClones.Remove(cube);

            Transform cubeTrans = cube.transform;
            cubeTrans.SetParent(parent);
            cubeTrans.position = pos;
            cube.gameObject.SetActive(true);
        }
        else
        {
            cube = (FlyingCube)Instantiate(this,
                                           pos, Quaternion.identity, parent);
        }

        cube.Velocity = vel;

        return(cube);
    }
示例#2
0
    IEnumerator SpawnFlyingCubes(FlyingCube prefab, Vector3 cubePos)
    {
        ClipPlanePoints clipPoints = ClipPlanePoints.Instance;
        Camera          camera     = clipPoints.Camera;

        if (!clipPoints.CollidesTop(cubePos) &&
            !clipPoints.CollidesBottom(cubePos))
        {
            float cubeSpeed = Random.Range(
                m_minCubeSpeed, m_maxCubeSpeed);

            float firstSpawnTime = 0f;

            //Allows closer cubes to spawn more. If the cube is closer, maxRandMulti will be less.
            float spawnMulti = 0.05f * Mathf.Max(Vector3.Distance(clipPoints.NearUpperLeft, cubePos) /
                                                 Vector3.Distance(clipPoints.NearUpperLeft, clipPoints.FarUpperLeft), m_minSpawnTime);
            float maxSpawnTime = Mathf.Max(spawnMulti * m_maxSpawnTime, m_minSpawnTime);

            do
            {
                float spawnTime = Random.Range(firstSpawnTime, maxSpawnTime);
                yield return(new WaitForSeconds(spawnTime));

                firstSpawnTime = m_minSpawnTime;
                prefab.Clone(transform, cubePos, cubeSpeed * camera.transform.right);
            } while (true);
        }
    }
示例#3
0
    IEnumerator SpawnAttractCubes()
    {
        ClipPlanePoints clipPoints = ClipPlanePoints.Instance;
        Camera          camera     = clipPoints.Camera;

        //HACK: Used to increase attract cube velocity speed, for some time, after app times back in...
        float velMultiplier = 100f;

        /////////////////////////////////////////
        //HACK: Hackkery! Uglyness! :(
        Vector3 firstPoint  = m_attractSpawnPoints[0];
        Vector3 lastPoint   = m_attractSpawnPoints[m_attractSpawnPoints.Count - 1];
        Vector3 middlePoint = (firstPoint + lastPoint) / 2f;

        //Adding up/down adjustments...
        firstPoint = middlePoint + (camera.transform.up * m_attractBoundsOffset);
        lastPoint  = middlePoint - (camera.transform.up * m_attractBoundsOffset);

        do
        {
            if (AppManager.State == AppManager.AppState.ATTRACT_CUBES)
            {
                float      speed = Random.Range(m_attractCubeSpeed, m_attractCubeSpeed + .1f); //For versatility...
                FlyingCube cube  = m_attractCubePref.Clone(transform, firstPoint +
                                                           (Vector3.up * Random.Range(0f, -m_attractBoundsRandOffset)),
                                                           speed * camera.transform.right);

                cube.VelMultiplier = velMultiplier;

                float spawnTime = Random.Range(m_minAttractSpawnTime, m_maxAttractSpawnTime);
                yield return(new WaitForSeconds(spawnTime));

                ///////////////////////////////////////////////////////////

                speed = Random.Range(m_attractCubeSpeed, m_attractCubeSpeed + .1f);  //For versatility...
                cube  = cube = m_attractCubePref.Clone(transform, lastPoint +
                                                       (Vector3.up * Random.Range(0f, m_attractBoundsRandOffset)),
                                                       speed * camera.transform.right);

                cube.VelMultiplier = velMultiplier;

                spawnTime = Random.Range(m_minAttractSpawnTime, m_maxAttractSpawnTime);
                yield return(new WaitForSeconds(spawnTime));
            }
            else
            {
                yield return(new WaitForSeconds(.1f));
            }
        } while (true);
    }
    public virtual void InitPool(Transform parent)
    {
        //First time initialize to number of twitter feeds...
        if (m_inactiveClones == null)
        {
            m_inactiveClones = new List <FlyingCube>();

            FlyingCube cube = null;
            for (int i = 0, count = TwitterManager.Instance.NumTweets;
                 i < count; ++i)
            {
                cube = (FlyingCube)Instantiate(this, parent);
                cube.Recycle();
            }
        }
    }