void SpawnElementGroup(float furthestRoomEndX) { // find random inactive element group GameObject newGroup = InactiveGroups[Random.Range(0, InactiveGroups.Count - 1)]; //Debug.Log("spawning element group: " + newGroup.name); //Messenger.Broadcast("GroupActivated" + newGroup.name); // enable it + all children newGroup.SetActive(true); foreach (Transform element in newGroup.transform) { element.gameObject.SetActive(true); } SpriteGroupData groupData = newGroup.GetComponent <SpriteGroupData>(); // spawn powerups and obstacles if this is a group that does so if (groupData != null) { groupData.SpawnObjects(); } // move to active InactiveGroups.Remove(newGroup); ActiveGroups.Add(newGroup); float roomWidth = 0.0f; Transform width = newGroup.transform.Find("Width"); if (width != null) { roomWidth = width.localScale.x; } else { roomWidth = groupData.GroupTileWidth * (groupData.GroupTileSize / 100); } float roomCenter = furthestRoomEndX + roomWidth * 0.5f; newGroup.transform.position = new Vector3(roomCenter, newGroup.transform.position.y, newGroup.transform.position.z); }
void Deactivate(GameObject group) { if (ReactivateElements == true) { foreach (Transform child in group.transform) { child.gameObject.SetActive(true); // clear spawned-in powerups or obstacles if (child.gameObject.name == "Powerup" || child.gameObject.name == "Obstacle") { foreach (Transform powerupOrObstacle in child) { Destroy(powerupOrObstacle.gameObject); } } } } group.SetActive(false); group.transform.position = new Vector3(ResetPosition.position.x, group.transform.position.y, group.transform.position.z); //sprite.transform.position = ResetPosition.position; //Debug.Log("deactivating element group: " + group.name); // move group to deactivate on next update SpriteGroupData groupData = group.GetComponent <SpriteGroupData>(); // spawn powerups and obstacles if this is a group that does so if (groupData != null) { groupData.DespawnObjects(); } toDeactivate.Add(group); }
void GenerateGroup() { List <GameObject> roomsToRemove = new List <GameObject>(); bool addRooms = true; float playerX = player.transform.position.x; float removeRoomX = playerX - screenWidth; float addRoomX = playerX + screenWidth; float furthestRoomEndX = 0; foreach (GameObject group in ActiveGroups) { SpriteGroupData groupData = group.GetComponent <SpriteGroupData>(); float roomWidth = 0.0f; Transform width = group.transform.Find("Width"); if (width != null) { roomWidth = width.localScale.x; } else { roomWidth = groupData.GroupTileWidth * (groupData.GroupTileSize / 100); } float roomStartX = group.transform.position.x - (roomWidth * 0.5f); float roomEndX = roomStartX + roomWidth; if (roomStartX > addRoomX) { addRooms = false; } if (roomEndX < removeRoomX) { roomsToRemove.Add(group); } furthestRoomEndX = Mathf.Max(furthestRoomEndX, roomEndX); /* * // hacky, but it works. * if (group.name == "ObstacleGroup1" && firstGenerate == false) * { * Debug.Log("hacky"); * Debug.Log(furthestRoomEndX); * Debug.Log(roomEndX); * Debug.Log(roomStartX); * Debug.Log(roomWidth); * SpawnElementGroup(furthestRoomEndX);// + (roomWidth * 0.5f)); * firstGenerate = true; * return; * } */ } // deactivate groups foreach (GameObject group in roomsToRemove) { Deactivate(group); } if (addRooms == true) { SpawnElementGroup(furthestRoomEndX); } }