/// <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); } }
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); }
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(); } }