Example #1
0
    public void OnRestoreToPrevState()
    {
        if (!(HasEnoughCoin(ItemType.UNDO) || GameManager.instance.debug) ||
            _snapshots.Count <= 0 ||
            GameManager.instance.transition != GameManager.Transition.None)
        {
            SoundManager.Instance.PlayUISoundInstance(
                GameConstants.UIFX_TOUCH_LOCKED_BUTTON_ITEM
                );

            return;
        }

        SoundManager.Instance.PlayUISoundInstance(
            GameConstants.UIFX_TOUCH_BUTTON_ITEM
            );

        BoardSnapshot snapshot = _snapshots[_snapshots.Count - 1];

        _snapshots.Remove(snapshot);

        _scoreCounter.Setup(snapshot.score);
        _savings = snapshot.savings;

        GameManager.instance.RestoreToPrevState(snapshot);
    }
Example #2
0
    IEnumerator ProcessRestoreToPrevState(BoardSnapshot snapshot)
    {
        transition = Transition.Restore;

        _nextBlockNumbers.Push(_block.numbers);

        float halfRestoreBoardTime = _restoreBoardTime * 0.5f;

        _board.highestNumber = snapshot.highestNumber;

        for (int i = 0, max = _board.tiles.Length; i < max; ++i)
        {
            NumberedHexaTile tile = _board.tiles[i] as NumberedHexaTile;
            if (tile != null && tile.cell != null)
            {
                tile.cell.LeanCancel();
                tile.cell.LeanScale(Vector3.zero, halfRestoreBoardTime).
                setEaseInBack().
                setOnComplete(() => tile.Reset());
            }
        }

        NumberedHexaCell[] cells = _block.PopCells();
        for (int i = 0, max = cells.Length; i < max; ++i)
        {
            NumberedHexaCell cell = cells[i];

            cell.LeanCancel();
            cell.LeanScale(Vector3.zero, halfRestoreBoardTime).
            setEaseInBack().
            setOnComplete(() => ReleaseHexaCell(cell));
        }

        yield return(new WaitForSeconds(halfRestoreBoardTime + 0.1f));

        for (int i = 0, max = snapshot.boardNumbers.Length; i < max; ++i)
        {
            if (snapshot.boardNumbers[i] > 0)
            {
                NumberedHexaCell cell = GenerateHexaCell() as NumberedHexaCell;
                cell.Setup(snapshot.boardNumbers[i]);

                _board.tiles[i].SetCell(cell);

                cell.LeanCancel();
                cell.LeanScale(Vector3.zero, Vector3.one, halfRestoreBoardTime).
                setEaseOutBack();
            }
        }

        _block.Setup(snapshot.blockNumbers);

        if (onUseItem != null)
        {
            onUseItem(ItemType.UNDO);
        }

        transition = Transition.None;
    }
Example #3
0
    public void RestoreToPrevState(BoardSnapshot snapshot)
    {
        if (snapshot == null)
        {
            return;
        }

        StartCoroutine(ProcessRestoreToPrevState(snapshot));
    }
Example #4
0
    public void GenerateSnapshot()
    {
        BoardSnapshot snapshot = new BoardSnapshot(
            GameManager.instance.board,
            GameManager.instance.block,
            _scoreCounter.value,
            _savings
            );

        _snapshots.Add(snapshot);
        if (_snapshots.Count > _maxSnapshot)
        {
            _snapshots.RemoveAt(0);
        }
    }