public void FallGemsIntoEmptyPositions() { for (int x = 0; x < gridWidth; x++) { for (int y = 0; y < gridHeight; y++) { GemGridPosition gemGridPosition = grid.GetGridObject(x, y); if (!gemGridPosition.IsEmpty()) { // Grid Position has Gem for (int i = y - 1; i >= 0; i--) { GemGridPosition nextGemGridPosition = grid.GetGridObject(x, i); if (nextGemGridPosition.IsEmpty()) { gemGridPosition.GetGemGrid().SetGemXY(x, i); nextGemGridPosition.SetGemGrid(gemGridPosition.GetGemGrid()); gemGridPosition.ClearGemGrid(); gemGridPosition = nextGemGridPosition; } else { // Next Grid Position is not empty, stop looking break; } } } } } }
public void SwapGridPositions(int startX, int startY, int endX, int endY) { if (!IsValidPosition(startX, startY) || !IsValidPosition(endX, endY)) { return; // Invalid Position } if (startX == endX && startY == endY) { return; // Same Position } GemGridPosition startGemGridPosition = grid.GetGridObject(startX, startY); GemGridPosition endGemGridPosition = grid.GetGridObject(endX, endY); GemGrid startGemGrid = startGemGridPosition.GetGemGrid(); GemGrid endGemGrid = endGemGridPosition.GetGemGrid(); startGemGrid.SetGemXY(endX, endY); endGemGrid.SetGemXY(startX, startY); startGemGridPosition.SetGemGrid(endGemGrid); endGemGridPosition.SetGemGrid(startGemGrid); }
public void SpawnNewMissingGridPositions() { for (int x = 0; x < gridWidth; x++) { for (int y = 0; y < gridHeight; y++) { GemGridPosition gemGridPosition = grid.GetGridObject(x, y); if (gemGridPosition.IsEmpty()) { GemSO gem = levelSO.gemList[UnityEngine.Random.Range(0, levelSO.gemList.Count)]; GemGrid gemGrid = new GemGrid(gem, x, y); gemGridPosition.SetGemGrid(gemGrid); OnNewGemGridSpawned?.Invoke(gemGrid, new OnNewGemGridSpawnedEventArgs { gemGrid = gemGrid, gemGridPosition = gemGridPosition, }); } } } }