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