Beispiel #1
0
    /// <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.");
    }
Beispiel #2
0
    /// <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.");
    }