예제 #1
0
 void Awake()
 {
     gems = new List <GameObject> {
         RedGem, GreenGem, YellowGem, PurpleGem, BlueGem, CrystalGem
     };
     grid = new GemGrid(numberOfRows, numberOfColumns);
     RegenerateGrid();
 }
예제 #2
0
 public void RegenerateGrid()
 {
     InitialGridGenerationFinished = false;
     GridReady = false;
     DestroyGridContent();
     grid = new GemGrid(numberOfRows, numberOfColumns);
     explodeGridPointsCoroutine = ExplodeAdjacentNeighbors(explodingCheckRate);
     PopulateGridWithRandomGems(numberOfRows, numberOfColumns);
     StopCoroutine(explodeGridPointsCoroutine);
     StartCoroutine(explodeGridPointsCoroutine);
 }
예제 #3
0
    private void Awake()
    {
        _grid = new GemGrid(WIDTH, HEIGHT, _cellSize, _gemPrefab, _slots, this);

        _gemsTypesDict = new Dictionary <int, GemTypeSO>();

        foreach (var gemType in _gemTypes)
        {
            _gemsTypesDict.Add(gemType.Type, gemType);
        }
    }
예제 #4
0
    private void Start()
    {
        _grid            = GetComponent <GemGrid>();
        _finder          = GetComponent <MatchFinder>();
        _camera          = Camera.main;
        _shuffleSound    = GetComponent <AudioSource>();
        _roundController = FindObjectOfType <RoundController>();

        InitialSpawn();
        ClearGemSelection();
        SetBusy(false);
    }
    public void SetLevelSO(LevelSO levelSO)
    {
        this.levelSO = levelSO;

        gridWidth  = levelSO.width;
        gridHeight = levelSO.height;
        grid       = new Grid <GemGridPosition>(gridWidth, gridHeight, 1f, Vector3.zero, (Grid <GemGridPosition> g, int x, int y) => new GemGridPosition(g, x, y));

        // Initialize Grid
        for (int x = 0; x < gridWidth; x++)
        {
            for (int y = 0; y < gridHeight; y++)
            {
                // Get Saved LevelGridPosition
                LevelSO.LevelGridPosition levelGridPosition = null;

                foreach (LevelSO.LevelGridPosition tmpLevelGridPosition in levelSO.levelGridPositionList)
                {
                    if (tmpLevelGridPosition.x == x && tmpLevelGridPosition.y == y)
                    {
                        levelGridPosition = tmpLevelGridPosition;
                        break;
                    }
                }

                if (levelGridPosition == null)
                {
                    // Couldn't find LevelGridPosition with this x, y!
                    Debug.LogError("Error! Null!");
                }

                GemSO   gem     = levelGridPosition.gemSO;
                GemGrid gemGrid = new GemGrid(gem, x, y);
                grid.GetGridObject(x, y).SetGemGrid(gemGrid);
                grid.GetGridObject(x, y).SetHasGlass(levelGridPosition.hasGlass);
            }
        }

        score     = 0;
        moveCount = levelSO.moveAmount;

        OnLevelSet?.Invoke(this, new OnLevelSetEventArgs {
            levelSO = levelSO, grid = grid
        });
    }
    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,
                    });
                }
            }
        }
    }
예제 #8
0
 public void Setup(GemGrid grid, int index)
 {
     _parentGrid = grid;
     ListIndex   = index;
 }
예제 #9
0
 private void Start()
 {
     _grid = GetComponent <GemGrid>();
 }
 public void ClearGemGrid()
 {
     gemGrid = null;
 }
 public void SetGemGrid(GemGrid gemGrid)
 {
     this.gemGrid = gemGrid;
     grid.TriggerGridObjectChanged(x, y);
 }
예제 #12
0
    public void SetLevelSO(LevelSO levelSO)
    {
        this.levelSO = levelSO;

        gridWidth  = levelSO.width;
        gridHeight = levelSO.height;
        grid       = new Grid <GemGridPosition>(gridWidth, gridHeight, 1f, Vector3.zero, (Grid <GemGridPosition> g, int x, int y) => new GemGridPosition(g, x, y));

        // Initialize Grid
        for (int x = 0; x < gridWidth; x++)
        {
            for (int y = 0; y < gridHeight; y++)
            {
                // Get Saved LevelGridPosition
                LevelSO.LevelGridPosition levelGridPosition = null;

                foreach (LevelSO.LevelGridPosition tmpLevelGridPosition in levelSO.levelGridPositionList)
                {
                    if (tmpLevelGridPosition.x == x && tmpLevelGridPosition.y == y)
                    {
                        levelGridPosition = tmpLevelGridPosition;
                        break;
                    }
                }

                if (levelGridPosition == null)
                {
                    // Couldn't find LevelGridPosition with this x, y!
                    Debug.LogError("Error! Null!");
                }

                GemSO   gem     = levelGridPosition.gemSO;
                GemGrid gemGrid = new GemGrid(gem, x, y);
                grid.GetGridObject(x, y).SetGemGrid(gemGrid);
                grid.GetGridObject(x, y).SetHasGlass(levelGridPosition.hasGlass);
            }
        }

        if (randomGlass.enabled)
        {
            // Remove all glass
            for (int x = 0; x < gridWidth; x++)
            {
                for (int y = 0; y < gridHeight; y++)
                {
                    grid.GetGridObject(x, y).SetHasGlass(false);
                }
            }
            // Add Random Glass
            while (GetGlassAmount() < randomGlass.glassAmount)
            {
                int glassX = UnityEngine.Random.Range(0, gridWidth);
                int glassY = UnityEngine.Random.Range(0, gridHeight);
                grid.GetGridObject(glassX, glassY).SetHasGlass(true);
            }
        }

        score     = 0;
        moveCount = levelSO.moveAmount;

        OnLevelSet?.Invoke(this, new OnLevelSetEventArgs {
            levelSO = levelSO, grid = grid
        });
    }