/// <summary> /// Updates all of the regions. /// </summary> void UpdateRegions() { Vector3 cameraPosition = _camera.position; _currentRegion = (int)(cameraPosition.z / _regionSize.y); if (_currentRegion > _previousRegion) {//if we have moved up a region. //destroy the bottom regions Destroy(_regions[RegionOrder.Bot].gameObject); int size = _regions.Count - 1; for (int i = 0; i < size; i++) {//shift all of the regions down _regions[(RegionOrder)i] = _regions[(RegionOrder)i + 1]; } //create and intiialize a new regions for the top. GameObject regionClone = PrefabFactory.CreateGameObject(PrefabFactory.Prefab.Region); Vector3 position = regionClone.transform.position; position.z = _regions[(RegionOrder)((int)RegionOrder.Top - 1)].position.z + _regionSize.y; regionClone.transform.position = position; Region region = regionClone.GetComponent <Region>(); region.Setup(_halfRegionSize); _regions[RegionOrder.Top] = region; } _previousRegion = _currentRegion; }
/// <summary> /// Generates YellowBall randomly around the region. /// </summary> /// <param name="positionsOccupied"></param> void GenerateYellowBalls(ref List <CreationData> positionsOccupied) { Vector2 size = PrefabFactory.GetSize(PrefabFactory.Prefab.YellowBall) * 0.5f; Vector2 failedToPosition = new Vector3(-1, -1); int yellowBallCount = 0; int yellowBallsToCreate = Random.Range(0, ConstHolder.MAX_YELLOWBALLS); while (yellowBallCount != yellowBallsToCreate) { Vector2 position = GetAvailabePosition(size, ref positionsOccupied); if (position != failedToPosition) { positionsOccupied.Add(new CreationData(position, size)); GameObject clone = PrefabFactory.CreateGameObject(PrefabFactory.Prefab.YellowBall); clone.transform.position = new Vector3(position.x, clone.transform.position.y, position.y); clone.transform.parent = _transform; YellowBall yellowBall = clone.GetComponent <YellowBall>(); yellowBall.Initialize(); _yellowBalls.Add(yellowBall); yellowBallCount++; } else { break; } } }
/// <summary> /// Generates obstacles randomly around the region. /// Actiavtes one of its walls. /// </summary> /// <param name="prefab"></param> /// <param name="positionsOccupied"></param> void GenerateObstacles(ref List <CreationData> positionsOccupied) { int obstacleCount = 0; int obstaclesToCreate = Random.Range(1, DataManager.maximumObstacles + 1); ActivateWall(ref positionsOccupied); Vector2 size = PrefabFactory.GetSize(PrefabFactory.Prefab.Wall) * 0.5f; Vector2 failedToPosition = new Vector2(-1, -1); while (obstacleCount < obstaclesToCreate) { Vector2 position = GetAvailabePosition(size, ref positionsOccupied); if (position != failedToPosition) { positionsOccupied.Add(new CreationData(position, size)); GameObject clone = PrefabFactory.CreateGameObject(PrefabFactory.Prefab.Wall); Transform cloneTransform = clone.transform; cloneTransform.position = new Vector3(position.x, cloneTransform.position.y, position.y); cloneTransform.parent = _transform; _obstacles.Add(clone); obstacleCount++; } else { break; } } }
/// <summary> /// Generates regions and restarts the level. /// </summary> void GenerateRegions() { RestartGame(); //setup region size _regionSize = PrefabFactory.GetSize(PrefabFactory.Prefab.Region); _halfRegionSize = _regionSize * 0.5f; //create the first region and initialize it Region region = PrefabFactory.CreateGameObject(PrefabFactory.Prefab.Region).GetComponent <Region>(); region.Initialize(_halfRegionSize); _regions.Add(RegionOrder.Bot, region); //set the z position to the next position to connect the regions. float z = _regions[RegionOrder.Bot].position.z + _regionSize.y; int extraRegions = (int)RegionOrder.Count; for (int i = 1; i < extraRegions; i++) {//create each individual region, set its position and initialize it. GameObject regionClone = PrefabFactory.CreateGameObject(PrefabFactory.Prefab.Region); Vector3 position = regionClone.transform.position; position.z = z; regionClone.transform.position = position; region = regionClone.GetComponent <Region>(); region.Initialize(_halfRegionSize); _regions.Add((RegionOrder)i, region); z += _regionSize.y; } }