Ejemplo n.º 1
0
    public void FinishExplode()
    {
        boardValue.SetValue(GetCell(transform.localPosition), 0);
        hubValue.score += 1;
        SetState(GameDefine.BALL_STATE_IDLE);
        anim.enabled = false;
        Color tmp = ballImg.color;

        if (tmp.a < 1)
        {
            tmp.a         = 1;
            ballImg.color = tmp;
        }
        transform.localScale = Vector3.one / 2;
        transform.gameObject.SetActive(false);
        GetComponentInParent <BoardManager>().SetState(GameDefine.BOARD_STATE_UPDATE_NEX_BALL);
    }
Ejemplo n.º 2
0
    public void NewGame()
    {
        hubValue.score = 0;
        hubValue.timer = 0;
        for (int i = 0; i < boardValue.GetBoard().Length; i++)
        {
            boardValue.SetValue(i, 0);
        }
        Scene scene = SceneManager.GetActiveScene();

        SceneManager.LoadScene(scene.name);
        if (panelGameOver.activeSelf)
        {
            panelGameOver.SetActive(false);
            isGameOver = false;
        }
    }
Ejemplo n.º 3
0
    // Update is called once per frame
    void Update()
    {
        if (gameHub.isGameOver)
        {
            return;
        }
        switch (boardState)
        {
        case GameDefine.BOARD_STATE_SELECT_BALL:
            if (Input.GetMouseButtonDown(0))
            {
                foreach (RaycastResult r in GetListRaycastResult())
                {
                    Cell c = r.gameObject.GetComponentInParent <Cell>();
                    if (c != null)
                    {
                        Vector2Int cellSelect = GetCell(c.transform.localPosition);

                        if (boardValue.GetValue(cellSelect) > 0)
                        {
                            GetBall(cellSelect).gameObject.SetActive(false);
                            ballSelected.gameObject.SetActive(true);
                            ballSelected.SetBall(GetBall(cellSelect));
                            ballSelected.transform.localPosition = GetBall(cellSelect).transform.localPosition;
                            ballSelected.SetState(GameDefine.BALL_STATE_SELECT);
                            SetState(GameDefine.BOARD_STATE_CHECK_MOVE_BALL);
                        }
                    }
                }
            }
            break;

        case GameDefine.BOARD_STATE_CHECK_MOVE_BALL:
            if (Input.GetMouseButtonDown(0))
            {
                foreach (RaycastResult r in GetListRaycastResult())
                {
                    Cell c = r.gameObject.GetComponentInParent <Cell>();
                    if (c != null)
                    {
                        Vector2Int cellSelect = GetCell(ballSelected.transform.localPosition);
                        Vector2Int cellMove   = GetCell(c.transform.localPosition);
                        if (cellSelect == cellMove)
                        {
                            return;
                        }
                        if (boardValue.GetValue(cellMove) > 0)
                        {
                            GetBall(cellSelect).gameObject.SetActive(true);
                            GetBall(cellMove).gameObject.SetActive(false);
                            ballSelected.SetBall(GetBall(cellSelect));
                            ballSelected.SetBall(GetBall(cellMove));
                            ballSelected.transform.localPosition = GetBall(cellMove).transform.localPosition;
                            ballSelected.SetState(GameDefine.BALL_STATE_SELECT);
                        }
                        else
                        {
                            List <Vector2Int> path = FindPathMove(cellSelect, cellMove, GetBall(cellSelect).GetType());
                            if (path.Count > 0)
                            {
                                boardValue.SetValue(cellSelect, 0);
                                if (boardValue.GetValue(cellMove) < 0 && cellEmptyTotal > 0)
                                {
                                    RandNextValue(GetBall(cellMove).GetType());
                                    cellEmptyTotal += 1;
                                }
                                else
                                {
                                    GetBall(cellSelect).SetType(GetBall(cellMove).GetType());
                                    boardValue.SetValue(cellSelect, boardValue.GetValue(cellMove));
                                }
                                ballSelected.SetState(GameDefine.BALL_STATE_MOVE);
                                ballSelected.SetPathMove(path);
                                SaveBoardUndo();
                                SetState(GameDefine.BOARD_STATE_MOVE_BALL);
                            }
                        }
                    }
                }
            }
            break;

        case GameDefine.BOARD_STATE_MOVE_BALL:
            if (ballSelected.GetState() == GameDefine.BALL_STATE_CHECK_EXPLODE)
            {
                UpdateBall();
                ballSelected.gameObject.SetActive(false);
                SetState(GameDefine.BOARD_STATE_CHECK_EXPLODE);
            }
            break;

        case GameDefine.BOARD_STATE_CHECK_EXPLODE:
            List <Vector2Int> listBallExplode = CheckBallExplode(GetCell(ballSelected.transform.localPosition));

            if (listBallExplode.Count > 0)
            {
                for (int i = 0; i < listBallExplode.Count; i++)
                {
                    GetBall(listBallExplode[i]).SetState(GameDefine.BALL_STATE_EXPLODE);
                }
                cellEmptyTotal += listBallExplode.Count;
                SetState(GameDefine.BOARD_STATE_WAIT_EXPLODE);
            }
            else
            {
                Vector2Int cell     = GetCell(ballSelected.transform.localPosition);
                Ball       ballDest = GetBall(cell);
                ballDest.SetBall(ballSelected);
                ballDest.gameObject.SetActive(true);
                ballDest.SetState(GameDefine.BALL_STATE_IDLE);
                boardValue.SetValue(cell, ballDest.GetType() + 1);
                SetState(GameDefine.BOARD_STATE_UPDATE_NEX_BALL);
            }
            break;

        case GameDefine.BOARD_STATE_WAIT_EXPLODE:
            break;

        case GameDefine.BOARD_STATE_UPDATE_NEX_BALL:

            UpdateNextVaule();
            UpdateBall();
            break;

        case GameDefine.BOARD_STATE_CREATE_BALL:
            ballSelected.transform.localPosition = new Vector2(GameDefine.BOARD_SIZE * GameDefine.CELL_SIZE, GameDefine.BOARD_SIZE * GameDefine.CELL_SIZE);
            if (cellEmptyTotal >= 3)
            {
                for (int i = 0; i < GameDefine.NEXT_BALL_TOTAL; i++)
                {
                    int value = RandNextValue();
                    int type  = Mathf.Abs(value) - 1;
                    hubValue.arrNextBall[i] = type;
                }
                // 5% Add ball ghost
                int percentBallGhost = Mathf.Abs(Random.Range(0, 100));
                if (percentBallGhost >= 95)
                {
                    RandValue(GameDefine.BALL_GHOST);
                }
            }
            else
            {
                for (int i = 0; i < cellEmptyTotal; i++)
                {
                    int value = RandNextValue();
                    int type  = Mathf.Abs(value) - 1;
                    hubValue.arrNextBall[i] = type;
                }
            }
            UpdateBall();
            SetState(GameDefine.BOARD_STATE_SELECT_BALL);
            break;
        }
    }