public void CheckBoard() { List <GameBoardSlot> connectedSlots = new List <GameBoardSlot>(); for (int x = 0; x < rowSize; x++) { for (int y = 0; y < columnSize; y++) { GameBoardSlot tempSlot = GetSlot(x, y); if (tempSlot && tempSlot.isOccupied) { CheckValidNeighbours(tempSlot, ref connectedSlots); if (AnySlotsCleared(connectedSlots)) { Debug.Log("TO DO: Score Tracking!!"); } connectedSlots.Clear(); } } } if (IsBoardBlocked()) { ResetBoard(); movOrders.Clear(); GameManager.StartGame(); } }
private Vector3 GetBoardSlotBorder(GameBoardSlot slot, Types.LaneMovementType dir, bool collapse) { Vector3 startPos = slot.transform.position; int dirMult = (collapse) ? -1 : 1; switch (dir) { case Types.LaneMovementType.LEFT: startPos += new Vector3((slot.slotSprite.bounds.size.x / 2) * dirMult, 0, 0); break; case Types.LaneMovementType.RIGHT: startPos -= new Vector3((slot.slotSprite.bounds.size.x / 2) * dirMult, 0, 0); break; case Types.LaneMovementType.UP: startPos -= new Vector3(0, (slot.slotSprite.bounds.size.y / 2) * dirMult, 0); break; case Types.LaneMovementType.DOWN: startPos += new Vector3(0, (slot.slotSprite.bounds.size.y / 2) * dirMult, 0); break; default: startPos = Vector3.zero; break; } return(startPos); }
private void SpawnBoardSlot(int x, int y) { GameBoardSlot newSlot = Instantiate(slotPrefab, GetWorldPosition(x + transform.position.x, y + transform.position.y), Quaternion.identity); newSlot.transform.parent = transform; newSlot.SetBoardPosition(x, y); boardSize[x, y] = newSlot; }
public GameBoard(int numberOfColumns, int numberOfRows) { NumberOfColumns = numberOfColumns; NumberOfRows = numberOfRows; validateCreationParams(); Board = new GameBoardSlot[NumberOfColumns, NumberOfRows]; bootstrapBoard(); }
public void CheckValidNeighbours(GameBoardSlot slotToCheck, ref List <GameBoardSlot> connectedSlots) { GameBoardSlot tempSlot; // Left Neighbour tempSlot = GetSlot(slotToCheck.slotColPos - 1, slotToCheck.slotRowPos); if (tempSlot && tempSlot.isOccupied) { if (slotToCheck.objInSlot.GetComponent <Tile>().tileType == tempSlot.objInSlot.GetComponent <Tile>().tileType) { if (AddFoundSlot(tempSlot, ref connectedSlots)) { CheckValidNeighbours(tempSlot, ref connectedSlots); } } } // Right Neighbour tempSlot = GetSlot(slotToCheck.slotColPos + 1, slotToCheck.slotRowPos); if (tempSlot && tempSlot.isOccupied) { if (slotToCheck.objInSlot.GetComponent <Tile>().tileType == tempSlot.objInSlot.GetComponent <Tile>().tileType) { if (AddFoundSlot(tempSlot, ref connectedSlots)) { CheckValidNeighbours(tempSlot, ref connectedSlots); } } } // Upper Neighbour tempSlot = GetSlot(slotToCheck.slotColPos, slotToCheck.slotRowPos + 1); if (tempSlot && tempSlot.isOccupied) { if (slotToCheck.objInSlot.GetComponent <Tile>().tileType == tempSlot.objInSlot.GetComponent <Tile>().tileType) { if (AddFoundSlot(tempSlot, ref connectedSlots)) { CheckValidNeighbours(tempSlot, ref connectedSlots); } } } // Lower Neighbour tempSlot = GetSlot(slotToCheck.slotColPos, slotToCheck.slotRowPos - 1); if (tempSlot && tempSlot.isOccupied) { if (slotToCheck.objInSlot.GetComponent <Tile>().tileType == tempSlot.objInSlot.GetComponent <Tile>().tileType) { if (AddFoundSlot(tempSlot, ref connectedSlots)) { CheckValidNeighbours(tempSlot, ref connectedSlots); } } } AddFoundSlot(slotToCheck, ref connectedSlots); }
private void bootstrapBoard() { for (var i = 0; i < NumberOfColumns; i++) { for (var j = 0; j < NumberOfRows; j++) { Board[i, j] = new GameBoardSlot(); } } }
public void UncollapseTile(Types.LaneMovementType direction, GameBoardSlot transferTo, Tile tile) { Vector3 uncollapseEndPoint = GetBoardSlotBorder(transferTo, direction, false); tile.SetUncollapsedTile(uncollapseEndPoint, direction); transferTo.objInSlot = tile.gameObject; transferTo.isOccupied = true; transferTo.objInSlot.GetComponent <Tile>().ProceedUncollapse(direction, transferTo.transform.position); }
public void MoveTile(GameObject tile, GameBoardSlot from, GameBoardSlot to) { Tile newTile = tile.GetComponent <Tile>(); SubscribeOnTileMovementEnded(newTile); newTile.SetDestination(to.transform.position); newTile.SetTileInMotion(true); to.objInSlot = from.objInSlot; to.isOccupied = true; from.ResetSlot(); }
private bool AddFoundSlot(GameBoardSlot foundSlot, ref List <GameBoardSlot> connectedSlots) { if (!connectedSlots.Contains(foundSlot)) { foundSlot.beenChecked = true; connectedSlots.Add(foundSlot); return(true); } else { return(false); } }
private static void printgameBoardSlot(GameBoardSlot gameBoardSlot) { if (gameBoardSlot.IsOccupied) { if (gameBoardSlot.OccupiedBy.Color == Color.Red) { Console.Write("{ RED }\t"); } else { Console.Write("{ YELLOW }\t"); } } else { Console.Write("{ }\t"); } }
private bool FindRows(ref List <int> rows) { for (int y = 0; y < columnSize; y++) { if (!IsRowOrdered(y)) { for (int x = 0; x < rowSize; x++) { GameBoardSlot temp = GetSlot(x, y); if (temp.isOccupied) { rows.Add(y); break; } } } } return(rows.Count != 0); }
private bool FindColumns(ref List <int> columns) { for (int x = 0; x < rowSize; x++) { if (!IsColumnOrdered(x)) { for (int y = 0; y < columnSize; y++) { GameBoardSlot temp = GetSlot(x, y); if (temp.isOccupied) { columns.Add(x); break; } } } } return(columns.Count != 0); }
public void SetTile(GameBoardSlot slot, Tile tile) { if (slot != null && tile != null) { slot.SlotTile = tile; slot.SlotTile.transform.SetParent(slot.transform); slot.SlotTile.transform.position = slot.transform.position; } }
public void OnSlotTileChange(GameBoardSlot slot) { bool isFilled = true; foreach (var s in slots) { if (s.SlotTile == null) { isFilled = false; break; } } if (isFilled && OnGameBoardFilled != null) { OnGameBoardFilled(); } }