using System.Collections.Generic; using System.Linq; using UnityEngine; public class LevelLimiter : MonoBehaviour { private GameObject deathWall; private LevelGenerator levelGen; private float wallHeight; public float timeBetweenChecks; private float timeSinceCheck; private bool checkedTiles; private List<GameObject> wallsAndTiles = new List<GameObject>(); private List<GameObject> backgroundElements = new List<GameObject>(); private void Start() { deathWall = ObjectManager.GetObject(2); levelGen = GetComponent<LevelGenerator>(); } private void Update() { if (checkedTiles) { timeSinceCheck += Time.deltaTime; if (timeSinceCheck >= timeBetweenChecks) { checkedTiles = false; } } else { wallHeight = deathWall.transform.position.y; CollectTiles(); foreach (GameObject item in wallsAndTiles) { if (item.transform.position.y - 10 < wallHeight && item.activeSelf) { foreach (Transform transform in item.GetComponentsInChildren<Transform>()) { if (transform.TryGetComponent(out BoxCollider2D boxColl)) if(boxColl.name == "Blocker Wall") boxColl.enabled = false; else boxColl.enabled = true; if (transform.TryGetComponent(out SpriteRenderer targetSprite)) { Color currentSpriteColor = targetSprite.color; if (transform.name == "Glow") targetSprite.color = new Color(currentSpriteColor.r, currentSpriteColor.g, currentSpriteColor.b, 0); else if (transform.name.Contains("Gradient")) targetSprite.color = new Color(currentSpriteColor.r, currentSpriteColor.g, currentSpriteColor.b, 0); else targetSprite.color = new Color(currentSpriteColor.r, currentSpriteColor.g, currentSpriteColor.b, 0.5f); if(item.name.Contains("Wall Piece")) item.gameObject.SetActive(false); } } } if (item.transform.position.y + 20 < wallHeight) { item.SetActive(false); foreach (Transform transform in item.GetComponentsInChildren<Transform>()) { if (transform.TryGetComponent(out BoxCollider2D boxColl)) if(boxColl.name == "Blocker Wall") boxColl.enabled = false; else boxColl.enabled = true; if (transform.TryGetComponent(out SpriteRenderer targetSprite)) { Color currentSpriteColor = targetSprite.color; if (transform.name == "Glow") targetSprite.color = new Color(currentSpriteColor.r, currentSpriteColor.g, currentSpriteColor.b, 0.1019608f); else if (transform.name.Contains("Gradient")) targetSprite.color = new Color(currentSpriteColor.r, currentSpriteColor.g, currentSpriteColor.b, 0.07843138f); else targetSprite.color = new Color(currentSpriteColor.r, currentSpriteColor.g, currentSpriteColor.b, 1); if(item.name.Contains("Wall Piece")) item.gameObject.SetActive(false); } } } } foreach (GameObject item in backgroundElements) if (item.transform.position.y + 20 < wallHeight) item.SetActive(false); checkedTiles = true; timeSinceCheck = 0.0f; } } public void CollectTiles() { foreach (GameObject item in levelGen.CreatedNormalTiles) { if (!wallsAndTiles.Contains(item)) wallsAndTiles.Add(item); } foreach (GameObject item in levelGen.CreatedClouds) { if (!backgroundElements.Contains(item)) backgroundElements.Add(item); } foreach (GameObject item in levelGen.CreatedParticles) { if (!backgroundElements.Contains(item)) backgroundElements.Add(item); } foreach (GameObject item in levelGen.CreatedBackgrounds) { if (!wallsAndTiles.Contains(item)) wallsAndTiles.Add(item); } foreach (GameObject item in levelGen.CreatedConnectorTiles) { if (!wallsAndTiles.Contains(item)) wallsAndTiles.Add(item); } wallsAndTiles = wallsAndTiles.Distinct().ToList(); backgroundElements = backgroundElements.Distinct().ToList(); int wtListCount = wallsAndTiles.Count - 1; int bgListCount = backgroundElements.Count - 1; for (int i = wtListCount; i >= 0; i--) { if (wallsAndTiles[i] == null) wallsAndTiles.RemoveAt(i); } for (int i = bgListCount; i >= 0; i--) { if (backgroundElements[i] == null) backgroundElements.RemoveAt(i); } } }