/// <summary>
    /// Displays the currently holded piece preview
    /// </summary>
    /// <param name="id">id of tetromino</param>
    /// <param name="rotID">Current rotation of tetromino</param>
    private void DisplayHoldPiece(int id, int rotID)
    {
        //If there is any previously holded piece
        if (holdTetromino != null)
        {
            //Disable it and replace it with new
            holdTetromino.gameObject.SetActive(false);
            holdTetromino.transform.Rotate(new Vector3(0, 0, 0));
            holdTetromino.transform.parent = poolTransform;
        }

        //Get matching hold piece preview and display it
        holdTetromino       = previewTetrominoFactory.GetPreview(id);
        holdTetromino.RotID = rotID;
        holdTetromino.transform.position  = holdPosition.position;
        holdTetromino.transform.position += new Vector3(posXOffsetCurve.Evaluate(holdTetromino.RotID), 0, 0);
        holdTetromino.transform.parent    = holdTransform;
        holdTetromino.gameObject.SetActive(true);

        //Invert rotations for T, L, J shapes
        if (id == 1 || id == 5 || id == 6)
        {
            holdTetromino.transform.eulerAngles = new Vector3(0, 0, -90 * rotID);
        }

        else
        {
            holdTetromino.transform.eulerAngles = new Vector3(0, 0, 90 * rotID);
        }
    }
    /// <summary>
    /// Sets the positions of preview pieces
    /// </summary>
    private void SetPositions()
    {
        for (int i = 0; i < previewTetrominos.Count; i++)
        {
            PreviewTetromino pt = previewTetrominos.ElementAt(i);
            //previewTetrominos.ElementAt(i).transform.position = previewPositions[i].position;
            //previewTetrominos.ElementAt(i).transform.position += new Vector3(Mathf.Sin());

            pt.transform.position  = previewPositions[i].position;
            pt.transform.position += new Vector3(posXOffsetCurve.Evaluate(pt.RotID),
                                                 0, 0);
        }
    }
Beispiel #3
0
    public PreviewTetromino GetPreview(int id)
    {
        PreviewTetromino p = pool.Find(x => x.ID == id && !x.gameObject.activeInHierarchy);

        if (p == null)
        {
            p = Object.Instantiate(prefabs.Find(x => x.ID == id));
            p.gameObject.SetActive(false);
            pool.Add(p);
        }

        return(p);
    }
Beispiel #4
0
    public void CreatePool()
    {
        pool = new List <PreviewTetromino>();

        for (int i = 0; i < prefabs.Count; i++)
        {
            for (int k = 0; k < 3; k++)
            {
                PreviewTetromino p = Object.Instantiate(prefabs[i]);
                p.gameObject.SetActive(false);
                p.transform.parent = poolParent;
                pool.Add(p);
            }
        }
    }
    /// <summary>
    /// Display the next preview pieces in queue
    /// </summary>
    /// <param name="tetromino"></param>
    private void DisplayPreview(Tetromino tetromino)
    {
        //Get id and rot of current piece
        int id    = tetromino.GetTetrominoID();
        int rotID = tetromino.RotateID;

        //Get the preview piece of matching id
        PreviewTetromino p = previewTetrominoFactory.GetPreview(id);

        //Set rotation of preivew piece
        p.RotID = rotID;

        //Invert rotations for T, L, J shapes
        if (id == 1 || id == 5 || id == 6)
        {
            p.transform.eulerAngles = new Vector3(0, 0, -90 * rotID);
        }

        else
        {
            p.transform.eulerAngles = new Vector3(0, 0, 90 * rotID);
        }

        previewTetrominos.Enqueue(p);
        p.transform.parent = previewTransform;
        p.gameObject.SetActive(true);

        //If total previews exceed maximum
        if (previewTetrominos.Count > maxQueue)
        {
            //Disable the first preview from queue to only display maximum allowed previews
            PreviewTetromino pt = previewTetrominos.Dequeue();
            pt.gameObject.SetActive(false);
            pt.transform.Rotate(new Vector3(0, 0, 0));
            pt.transform.parent = poolTransform;

            //Set proper positions as we need to shift all up by 1
            SetPositions();
        }
    }