bool CheckForDangerZone() { Collider2D hitCollider = Physics2D.OverlapPoint(trs.position, whatIsDangerZone); if (hitCollider != null) { if (Enemy.enemiesInArea.Length == 0) { currentDangerArea = hitCollider.GetComponent <DangerZone>().dangerArea; if (currentDangerArea == null) { return(true); } Enemy.enemiesInArea = currentDangerArea.enemies; foreach (Enemy enemy in Enemy.enemiesInArea) { enemy.enabled = true; } Trap.trapsInArea = currentDangerArea.traps; foreach (Trap trap in Trap.trapsInArea) { trap.enabled = true; } foreach (ConveyorBelt conveyorBelt in ConveyorBelt.conveyorBeltsInArea) { conveyorBelt.enabled = false; } foreach (ConveyorBelt conveyorBelt in currentDangerArea.conveyorBelts) { conveyorBelt.enabled = true; } ConveyorBelt.conveyorBeltsInArea = currentDangerArea.conveyorBelts; RedDoor.redDoorsInArea = currentDangerArea.redDoors; GameManager.GetSingleton <GameCamera>().trs.position = currentDangerArea.cameraRect.center.SetZ(GameManager.GetSingleton <GameCamera>().trs.position.z); GameManager.GetSingleton <GameCamera>().viewSize = currentDangerArea.cameraRect.size; GameManager.GetSingleton <GameCamera>().HandleViewSize(); } return(true); } return(false); }
static void MakeSafeAreas() { GameObject[] gos = FindObjectsOfType <GameObject>(); List <Vector2> allPositions = new List <Vector2>(); List <Vector2> safeZonePositions = new List <Vector2>(); List <Vector3Int> _unexploredPositions = new List <Vector3Int>(); Vector3Int[] unexploredPositions = new Vector3Int[0]; List <SafeArea> safeAreas = new List <SafeArea>(); foreach (Vector3Int cellPosition in GameManager.GetSingleton <GameManager>().zonesTilemap.cellBounds.allPositionsWithin) { _unexploredPositions.Add(cellPosition); Vector2 position = GameManager.GetSingleton <GameManager>().zonesTilemap.GetCellCenterWorld(cellPosition); if (!ContainsPoint(safeZonePositions, position, .7f) && !ContainsPoint(allPositions, position, .7f)) { allPositions.Add(position); SafeZone safeZone; if (GetComponent <SafeZone>(gos, position, out safeZone, .7f)) { SafeArea safeArea = new GameObject().AddComponent <SafeArea>(); safeArea.GetComponent <Transform>().SetParent(GameManager.GetSingleton <World>().piecesParent); safeZone.safeArea = safeArea; List <Vector2> safeAreaPositions = new List <Vector2>(); safeAreaPositions.Add(position); List <Vector2> positionsRemaining = new List <Vector2>(); List <Vector2> positionsTested = new List <Vector2>(); positionsTested.Add(position); List <DangerArea> dangerAreas = new List <DangerArea>(); List <ConveyorBelt> conveyorBelts = new List <ConveyorBelt>(); ConveyorBelt conveyorBelt; if (GetComponent <ConveyorBelt>(gos, position, out conveyorBelt, .7f)) { conveyorBelts.Add(conveyorBelt); } foreach (Vector2 possibleMove in GameManager.GetSingleton <GameManager>().possibleMoves) { positionsRemaining.Add(position + possibleMove); } do { position = positionsRemaining[0]; if (GetComponent <SafeZone>(gos, position, out safeZone, .7f)) { safeZone.safeArea = safeArea; foreach (Vector2 possibleMove in GameManager.GetSingleton <GameManager>().possibleMoves) { Vector2 positionToTest = position + possibleMove; if (!ContainsPoint(positionsRemaining, positionToTest, .7f) && !ContainsPoint(positionsTested, positionToTest, .7f)) { positionsRemaining.Add(positionToTest); } } safeAreaPositions.Add(position); } else { DangerZone dangerZone; if (GetComponent <DangerZone>(gos, position, out dangerZone, .7f)) { DangerArea dangerArea = dangerZone.dangerArea; dangerAreas.Add(dangerArea); if (!safeArea.surroundingSafeAreas.Contains(dangerArea.correspondingSafeArea)) { safeArea.surroundingSafeAreas.Add(dangerArea.correspondingSafeArea); } if (!dangerArea.correspondingSafeArea.surroundingSafeAreas.Contains(safeArea)) { dangerArea.correspondingSafeArea.surroundingSafeAreas.Add(safeArea); } } } if (GetComponent <ConveyorBelt>(gos, position, out conveyorBelt, .7f)) { conveyorBelts.Add(conveyorBelt); } positionsTested.Add(position); allPositions.Add(position); positionsRemaining.RemoveAt(0); } while (positionsRemaining.Count > 0); safeZonePositions.AddRange(safeAreaPositions); safeArea.cameraRect = RectExtensions.FromPoints(safeAreaPositions.ToArray()).Expand(Vector2.one * GameManager.WORLD_SCALE * 4); Rect[] dangerAreaCameraRects = new Rect[dangerAreas.Count]; for (int i = 0; i < dangerAreas.Count; i++) { dangerAreaCameraRects[i] = dangerAreas[i].cameraRect; } safeArea.cameraRect = RectExtensions.Combine(dangerAreaCameraRects.Add(safeArea.cameraRect)); safeArea.conveyorBelts = conveyorBelts.ToArray(); safeAreas.Add(safeArea); } } } unexploredPositions = _unexploredPositions.ToArray(); for (int i = 0; i < safeAreas.Count; i++) { safeAreas[i].unexploredCellPositions = unexploredPositions; } }