/// <summary> /// This function helper for create new hexagons to empty slot. /// </summary> public void FillEmptySlots() { Debug.Log("Fill Empty Slots Progress Started."); foreach (List <SlotController> verticalSlots in seperateSlotControllers) { List <SlotController> emptySlots = new List <SlotController>(); foreach (SlotController slotController in verticalSlots) { if (slotController.GetHexagonController() != null) { break; } emptySlots.Add(slotController); } if (emptySlots.Count == 0) { continue; } Debug.Log($"{emptySlots.Count} Empty Slot Detected."); emptySlots.Reverse(); bool spawnBomb = false; int randomBombSlot = 0; if (GameManager.Instance.GetScore() >= board.NextBombPoint) { board.NextBombPoint += gameSettings.BombInitialPoint; randomBombSlot = Random.Range(0, emptySlots.Count); spawnBomb = true; Debug.Log($"Bomb Time! Next Bomb Point : {board.NextBombPoint}"); } for (int i = 0; i < emptySlots.Count; i++) { if (spawnBomb && i == randomBombSlot) { BombController createdBomb = CreateBomb(null, emptySlots[i], true); ((BombView)createdBomb.GetView()).DrawDefaultLayer(true, (float)i / 10); spawnBomb = false; } else { HexagonController createdHexagon = CreateHexagon(null, emptySlots[i], true); ((HexagonView)createdHexagon.GetView()).DrawDefaultLayer(true, (float)i / 10); } } } Debug.Log("Fill Empty Slots Progress Completed."); }
/// <summary> /// This function helper for shift some hexagons like gravity.. /// </summary> /// <returns></returns> public async UniTask Gravity() { isGravity = true; Debug.Log("Gravity Progress Started."); foreach (List <SlotController> verticalSlots in seperateSlotControllers) { int emptyCount = 0; int interactedCount = 1; foreach (SlotController slotController in verticalSlots.AsEnumerable().Reverse().ToList()) { if (slotController.GetHexagonController() == null) { emptyCount++; continue; } if (emptyCount == 0) { continue; } HexagonController hexagonController = slotController.GetHexagonController(); SlotController oldSlotController = hexagonController.GetSlotController(); SlotController targetSlotController = GetSlotControllerByCoordinate(new Coordinate(hexagonController.GetCoordinate().x, hexagonController.GetCoordinate().y + emptyCount)); if (targetSlotController == null) { continue; } oldSlotController.SetHexagonController(null); hexagonController.SetSlotController(targetSlotController); ((HexagonView)hexagonController.GetView()).DrawDefaultLayer(true, (float)interactedCount / 10); interactedCount++; } } await UniTask.WaitUntil(() => !DOTween.IsTweening(CommonTypes.HEXAGON_GRAVITY_TWEEN_KEY)); FillEmptySlots(); await UniTask.WaitUntil(() => !DOTween.IsTweening(CommonTypes.HEXAGON_GRAVITY_TWEEN_KEY)); await CheckHexagons(hexagonControllers); await CheckGameOver(); isGravity = false; Debug.Log("Gravity Progress Completed."); }