public void Awake() { int ballCounter = 0; for (int i = 0; i < Config.BOARD_WIDTH; i++) { for (int j = 0; j < Config.BOARD_HEIGHT; j++) { if (i == 0 || i == 1 || i == 5 || i == 6) { if (j == 0 || j == 1) { j = 2; } else if (j == 5 || j == 6) { j = Config.BOARD_HEIGHT; continue; } } CoordInfo coordInfo = transform.GetChild(ballCounter).GetComponent <CoordInfo>(); ballCounter++; if (coordInfo == null) { continue; } coordInfo.SetCoord(i, j); } } }
private bool IsMoveValid(MoveDirection _direction, Type type) { CoordInfo ballCoord = new CoordInfo(); if (type == typeof(Ball)) { ballCoord.coord[0] = coordInfo.coord[0] + BallsManager.Instance.moveDirectionCoord.checkMoves[(int)_direction][0]; ballCoord.coord[1] = coordInfo.coord[1] + BallsManager.Instance.moveDirectionCoord.checkMoves[(int)_direction][1]; return(BallsManager.Instance.ballsLeft.Exists(x => x.coordInfo.coord[0] == ballCoord.coord[0] && x.coordInfo.coord[1] == ballCoord.coord[1])); } if (type == typeof(Pot)) { ballCoord.coord[0] = coordInfo.coord[0] + BallsManager.Instance.moveDirectionCoord.checkMoves[(int)_direction][0] * 2; ballCoord.coord[1] = coordInfo.coord[1] + BallsManager.Instance.moveDirectionCoord.checkMoves[(int)_direction][1] * 2; Pot pot = PotManager.Instance.potsList.FirstOrDefault(x => x.coordInfo.coord[0] == ballCoord.coord[0] && x.coordInfo.coord[1] == ballCoord.coord[1]); return(pot && pot.potState == PotState.Free); } return(false); }
public bool CanSelectPot(CoordInfo _potCoord) { CoordInfo ballCoord = BallsManager.Instance.ballToMakeMove.coordInfo; return(CheckIfBetweenBalExist(ballCoord, _potCoord) && CheckIfPotIsInLine(ballCoord, _potCoord) && (Mathf.Abs((ballCoord.coord[0] + ballCoord.coord[1]) - (_potCoord.coord[0] + _potCoord.coord[1])) == 2)); }
private void SaveMove(CoordInfo _selectedBall, CoordInfo _betweenBall, CoordInfo _selectedPot) { MoveInfo moveInfo = new MoveInfo() { from = new[] { _selectedBall.coord[0], _selectedBall.coord[1] }, between = new[] { _betweenBall.coord[0], _betweenBall.coord[1] }, to = new[] { _selectedPot.coord[0], _selectedPot.coord[1] } }; movesContainer.movesMade.Add(moveInfo); }
public void MoveBallToCoord(Ball _ballToMove, CoordInfo _destinationCoord, Ball _betweenBall) { MoveDirection direction = FindMoveDirection(_ballToMove, _destinationCoord); _ballToMove.transform.position += directions[direction]; PotManager.Instance.SetPotState(PotManager.Instance.FindPotByCoords(_ballToMove.coordInfo), PotState.Free); PotManager.Instance.SetPotState(PotManager.Instance.FindPotByCoords(_betweenBall.coordInfo), PotState.Free); PotManager.Instance.SetPotState(PotManager.Instance.FindPotByCoords(_destinationCoord), PotState.Occupied); SaveMove(_ballToMove.coordInfo, _betweenBall.coordInfo, _destinationCoord); _ballToMove.coordInfo.SetCoord(_destinationCoord); RemoveBall(_betweenBall); PotManager.Instance.OnUpdateScore(); }
private MoveDirection FindMoveDirection(Ball _ballToMove, CoordInfo _destinationCoord) { if (_ballToMove.coordInfo.coord[0] - _destinationCoord.coord[0] != 0) { return(_ballToMove.coordInfo.coord[0] - _destinationCoord.coord[0] > 0 ? MoveDirection.Up : MoveDirection.Down); } if (_ballToMove.coordInfo.coord[1] - _destinationCoord.coord[1] != 0) { return(_ballToMove.coordInfo.coord[1] - _destinationCoord.coord[1] > 0 ? MoveDirection.Left : MoveDirection.Right); } return(default);
private bool CheckIfBetweenBalExist(CoordInfo _selectedBall, CoordInfo _potCoord) { int[] betweenCoord = new int[2]; if (_selectedBall.coord[0] - _potCoord.coord[0] != 0) { betweenCoord[0] = _selectedBall.coord[0] + (_selectedBall.coord[0] - _potCoord.coord[0] > 0 ? -1:1); betweenCoord[1] = _selectedBall.coord[1]; } if (_selectedBall.coord[1] - _potCoord.coord[1] != 0) { betweenCoord[0] = _selectedBall.coord[0]; betweenCoord[1] = _selectedBall.coord[1] + (_selectedBall.coord[1] - _potCoord.coord[1] > 0 ? -1:1); } Ball betweenBall = BallsManager.Instance.ballsLeft.FirstOrDefault(x => x.coordInfo.coord[0] == betweenCoord[0] && x.coordInfo.coord[1] == betweenCoord[1]); return(BallsManager.Instance.ballsLeft.Contains(betweenBall)); }
private bool CheckIfPotIsInLine(CoordInfo _selectedBall, CoordInfo _potCoord) { return((_selectedBall.coord[0] - _potCoord.coord[0] == 0) || (_selectedBall.coord[1] - _potCoord.coord[1] == 0)); }
public void SetCoord(CoordInfo _coord) { coord[0] = _coord.coord[0]; coord[1] = _coord.coord[1]; }
public Pot FindPotByCoords(CoordInfo _potCoords) { return(potsList.FirstOrDefault(x => x.coordInfo.coord[0] == _potCoords.coord[0] && x.coordInfo.coord[1] == _potCoords.coord[1])); }
private void Awake() { coordInfo = new CoordInfo(); }