public void UpdateGrid(TetrominoLogic tetrominoLogic)
    {
        for (int y = 0; y < GridHeight; ++y)
        {
            for (int x = 0; x < GridWidth; ++x)
            {
                if (Grid[x, y] != null)
                {
                    if (Grid[x, y].parent == tetrominoLogic.transform)
                    {
                        Grid[x, y] = null;
                    }
                }
            }
        }

        foreach (Transform square in tetrominoLogic.transform)
        {
            Vector2 pos = Round(square.position);
            if (pos.y < GridHeight)
            {
                Grid[(int)pos.x, (int)pos.y] = square;
            }
        }
    }
    private DataColor AddEntry(TetrominoLogic tetrominoLogic)
    {
        GameObject newTetromino = (GameObject)Resources.Load(ManagerTetroGame.I.TetrominoPrefabsPath + "/" + tetrominoLogic.NameTetromino, typeof(GameObject));

        TetraminoListAll.Add(newTetromino.GetComponent <TetrominoLogic>());
        var color = DataColor.CreateInstance <DataColor>();

        color.RandomizeColor();
        TetraminoColors.Add(color);
        return(color);
    }
    public float GetTetrominoProbability(TetrominoLogic tetrominoLogic)
    {
        int index = TetraminoListAll.FindIndex(x => x.NameTetromino == tetrominoLogic.NameTetromino);

        if (index == -1 || TetraminoProbability.Count < index - 1)
        {
            Debug.LogWarning("Not all Tetromino listed in current TetrominoProbability data source", this);
            return(1.0f);
        }
        else
        {
            return(TetraminoProbability[index]);
        }
    }
 private bool CheckRowAboveGrid(TetrominoLogic tetromino)
 {
     for (int x = 0; x < GridWidth; ++x)
     {
         foreach (Transform square in tetromino.transform)
         {
             Vector2 pos = Round(square.position);
             if (pos.y > GridHeight - 1)
             {
                 return(true);
             }
         }
     }
     return(false);
 }
    public void ProcessTetraminoDown(TetrominoLogic tetramino)
    {
        TryDeleteRow();

        if (CheckRowAboveGrid(tetramino))
        {
            GameLost();
        }

        CurrentTetromino = null;

        SpawnTetromino();

        RemoveTetrominoFromListSpawnedAll();
        RemoveTetrominoFromListSpawnedTraced();
    }
    private void SpawnTetromino()
    {
        if (!Spawning)
        {
            return;
        }

        GameObject tetromino = (GameObject)Resources.Load(TetrominoPrefabsPath + "/" + RandomizeTetromino().NameTetromino, typeof(GameObject));

        TetrominoSpawnPos = new Vector2Int(GridWidth / 2, GridHeight - 1);
        var tetrominoLogic = Instantiate(tetromino, new Vector2(TetrominoSpawnPos.x, TetrominoSpawnPos.y), Quaternion.identity).GetComponent <TetrominoLogic>();

        tetrominoLogic.Initialize(this);
        TetrominoSpawnedAll.Add(tetrominoLogic);
        TetrominoSpawnedTraced.Add(tetrominoLogic.NameTetromino);

        CurrentTetromino = tetrominoLogic;
    }
    //private void Update()
    //{
    //}

    internal void Initialize(TetrominoLogic logic)
    {
        Logic      = logic;
        _sprite    = ManagerVisuals.I.GetTetrominoSprite();
        _dataColor = ManagerVisuals.I.GetTetrominoColor(logic);

        if (_SpriteRenderers.Count == 0)
        {
            foreach (Transform square in transform)
            {
                _SpriteRenderers.Add(square.GetComponent <SpriteRenderer>());
            }
        }

        foreach (var spriteRenderer in _SpriteRenderers)
        {
            spriteRenderer.sprite = _sprite;
            spriteRenderer.color  = _dataColor.Color;
        }
    }
    public DataColor GetTetrominoColor(TetrominoLogic tetrominoLogic)
    {
        int index = TetraminoListAll.FindIndex(x => x.NameTetromino == tetrominoLogic.NameTetromino);

        if (index == -1)
        {
            Debug.LogWarning("Not all Tetromino listed in current TetraminoColors data source", this);

            return(AddEntry(tetrominoLogic));
        }
        else if (TetraminoColors.Count < index - 1)
        {
            Debug.LogWarning("Not all colors for Tetromino are listed in current TetraminoColors data source", this);

            TetraminoListAll.RemoveAt(index);

            return(AddEntry(tetrominoLogic));;
        }
        else
        {
            return(TetraminoColors[index]);
        }
    }
 public DataColor GetTetrominoColor(TetrominoLogic tetrominoLogic)
 {
     return(TetrominoColors.GetTetrominoColor(tetrominoLogic));
 }