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); }
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; } }
// 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; } }