Example #1
0
    //Land the group of blocks
    private void Land()
    {
        //Transform the position to a static form
        transform.localScale = new Vector3(1.0f, 1.0f);
        transform.position   = Playfield.RoundVec2(transform.position);

        //get nearest 90 degrees and rotate perfectly
        var degrees = Mathf.Round(transform.localEulerAngles.z / 90) * 90;

        transform.rotation = Quaternion.Euler(0, 0, degrees);
        SetInactive();

        //set to valid coordinates
        SetValidPosition();

        //remove physics
        Destroy(physics);

        //Clear filled horizontal lines
        UpdateGrid();
        Playfield.DeleteFullRows();

        //Spawn next Group
        FindObjectOfType <Spawner>().SpawnNext();

        //Disable script for this group
        enabled = false;
    }
Example #2
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.LeftArrow) || Input.GetKeyDown(KeyCode.A))
        {
            transform.position += new Vector3(-1, 0, 0);
            if (IsValidGridPos())
            {
                UpdateGrid();
            }
            else
            {
                transform.position += new Vector3(1, 0, 0);
            }
        }
        else if (Input.GetKeyDown(KeyCode.RightArrow) || Input.GetKeyDown(KeyCode.D))
        {
            transform.position += new Vector3(1, 0, 0);
            if (IsValidGridPos())
            {
                UpdateGrid();
            }
            else
            {
                transform.position += new Vector3(-1, 0, 0);
            }
        }
        else if ((Input.GetKeyDown(KeyCode.UpArrow) || Input.GetKeyDown(KeyCode.W)) && gameObject.name != "GroupO(Clone)")
        {
            transform.Rotate(0, 0, -90);

            if (IsValidGridPos())
            {
                UpdateGrid();
            }
            else
            {
                transform.Rotate(0, 0, 90);
            }
        }
        else if (
            Input.GetKeyDown(KeyCode.DownArrow) || Input.GetKeyDown(KeyCode.S) ||
            ((Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.S)) && Time.time - lastFall >= .5f / 2.5f) ||
            Time.time - lastFall >= .5f
            )
        {
            transform.position += new Vector3(0, -1, 0);
            if (IsValidGridPos())
            {
                UpdateGrid();
            }
            else
            {
                transform.position += new Vector3(0, 1, 0);
                Playfield.DeleteFullRows();
                spawner.SpawnNext();
                enabled = false;
            }
            lastFall = Time.time;
        }
    }
Example #3
0
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            transform.position += new Vector3(-1, 0, 0);

            if (IsValidGridPos())
            {
                UpdateGrid();
            }
            else
            {
                transform.position += new Vector3(1, 0, 0);
            }
        }
        else if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            transform.position += new Vector3(1, 0, 0);

            if (IsValidGridPos())
            {
                UpdateGrid();
            }
            else
            {
                transform.position += new Vector3(-1, 0, 0);
            }
        }
        else if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            transform.Rotate(0, 0, -90);

            if (IsValidGridPos())
            {
                UpdateGrid();
            }
            else
            {
                transform.Rotate(0, 0, 90);
            }
        }
        else if (Input.GetKeyDown(KeyCode.DownArrow) || Time.time - lastFall >= 1)
        {
            transform.position += new Vector3(0, -1, 0);

            if (IsValidGridPos())
            {
                UpdateGrid();
            }
            else
            {
                transform.position += new Vector3(0, 1, 0);
                Playfield.DeleteFullRows();
                FindObjectOfType <Spawner>().SpawnNext();
                enabled = false;
            }

            lastFall = Time.time;
        }
    }
Example #4
0
    private void PressDown()
    {
        // Modify position
        this.transform.position += new Vector3(0, -1, 0);

        // See if valid
        if (this.gameObject.IsValidGridPos())
        {
            // It's valid. Update grid.
            this.gameObject.UpdateGrid();
        }
        else
        {
            var lowestY =
                (from Transform child in this.gameObject.transform
                 select child.transform.position.y).Min() + 2f;
            Common.HitSound.Play();
            Results.Score += (int)(Constants.MaxAdditionalPoints - Mathf.Round(lowestY));

            // It's not valid. revert.
            this.transform.position += new Vector3(0, 1, 0);

            // Clear filled horizontal lines
            Playfield.DeleteFullRows();

            // Spawn next Group
            GameObject.FindObjectOfType <Spawner>().SpawnNext();

            // Disable script
            this.enabled = false;
        }

        this.lastFall = Time.time;
    }
Example #5
0
    public void MoveDown()
    {
        //Modify position
        transform.position += new Vector3(0, -1, 0);

        //See if valid
        if (IsValidGridPos())
        {
            //It's valid. Update grid.
            UpdateGrid();
        }
        else
        {
            //It's not valid. revert.
            transform.position += new Vector3(0, 1, 0);

            //Clear filled horizontal lines
            Playfield.DeleteFullRows();

            //Spawn next Group
            FindObjectOfType <Spawner>().SpawnNext();

            //Disable script
            enabled = false;
        }
        lastFall = Time.time;
    }
Example #6
0
    private void MoveAndRotate()
    {
        if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            // Moves left
            transform.position += Vector3.left;

            if (isValidGridPosition())
            {
                UpdateGrid();
            }
            else
            {
                transform.position += Vector3.right;
            }
        }
        else if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            // Moves right
            transform.position += Vector3.right;

            if (isValidGridPosition())
            {
                UpdateGrid();
            }
            else
            {
                transform.position += Vector3.left;
            }
        }
        else if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            // Rotates
            transform.Rotate(0, 0, -90);

            if (isValidGridPosition())
            {
                UpdateGrid();
            }
            else
            {
                transform.Rotate(0, 0, 90);
            }
        }
        else if (Input.GetKeyDown(KeyCode.DownArrow) || Time.time - lastFall >= 1)
        {
            // Moves down
            transform.position += Vector3.down;

            if (isValidGridPosition())
            {
                UpdateGrid();
            }
            else
            {
                transform.position += Vector3.up;
                Playfield.DeleteFullRows();
                spawner.SpawnNextGroup();
                this.enabled = false;
            }

            lastFall = Time.time;
        }
    }
Example #7
0
    // Update is called once per frame
    void Update()
    {
        int validPos;

        // Move left
        if (Input.GetKeyDown(KeyCode.LeftArrow) && !(PauseMenu.isPaused))
        {
            transform.position     += new Vector3(-1, 0, 0);
            cam.transform.position += new Vector3(-1, 0, 0);

            validPos = IsValidGridPos();

            // If the method returns 2 or we are in between borders
            if ((validPos == 2) || inBetweenBorders)
            {
                UpdateGridInBetweenBorders(); // Update in between borders
            }
            // The position is valid and not between borders
            else if (validPos == 1)
            {
                UpdateGrid(); // Update the grid since it is valid
            }
            else
            {
                transform.position     += new Vector3(1, 0, 0); // Revert
                cam.transform.position += new Vector3(1, 0, 0);
            }
            if (shadow.enabled)
            {
                shadow.UpdateShadowMove(-1); // Update the shadow
            }
        }
        // Move right
        else if (Input.GetKeyDown(KeyCode.RightArrow) && !(PauseMenu.isPaused))
        {
            // Modify position
            transform.position     += new Vector3(1, 0, 0);
            cam.transform.position += new Vector3(1, 0, 0);

            validPos = IsValidGridPos();

            // If the method returns 2 or we are in between borders
            if ((validPos == 2) || inBetweenBorders)
            {
                UpdateGridInBetweenBorders();
            }
            // Otherwise the position is entirely valid and not between borders
            else if (validPos == 1)
            {
                UpdateGrid(); // Update the grid since it is valid
            }
            else
            {
                transform.position     += new Vector3(-1, 0, 0); // Its not valid so revert to original position
                cam.transform.position += new Vector3(-1, 0, 0);
            }
            if (shadow.enabled)
            {
                shadow.UpdateShadowMove(1); // Update the shadow
            }
        }
        // Rotate
        else if (Input.GetKeyDown(KeyCode.UpArrow) && !(PauseMenu.isPaused))
        {
            if (inBetweenBorders)
            {
                RotateInBetweenBorders();
            }
            else
            {
                transform.Rotate(0, 0, -90); // Rotate
            }
            validPos = IsValidGridPos();

            // If the method returns 2 or we are in between borders
            if (validPos == 2)
            {
                UpdateGridInBetweenBorders();
            }
            // Otherwise the position is entirely valid and not between borders
            else if (validPos == 1)
            {
                UpdateGrid(); // Update the grid since it is valid
            }
            else
            {
                transform.Rotate(0, 0, 90); // Its not valid so revert to original position
            }
            if (shadow.enabled)
            {
                shadow.UpdateShadowRotate(-90); // Update the shadow
            }
        }
        // Fall
        else if ((Input.GetKeyDown(KeyCode.DownArrow) || (Time.time - lastFall >= 2.0)) && !(PauseMenu.isPaused))
        {
            // Modify position
            transform.position += new Vector3(0, -1, 0);

            validPos = IsValidGridPos();

            // See if the new position is valid
            if (validPos == 2)
            {
                UpdateGridInBetweenBorders();
            }
            else if (validPos == 1)
            {
                UpdateGrid();// Update the grid since it is valid
            }
            else
            {
                transform.position += new Vector3(0, 1, 0); // Revert

                if (!inBetweenBorders)
                {
                    UpdateGrid();
                }
                else
                {
                    UpdateGridInBetweenBorders();
                    inBetweenBorders = false;
                }

                // Destroy the shadow
                if (shadow.enabled)
                {
                    shadow.DestroyShadow();
                }

                // Clear filled horizontal lines
                Playfield.DeleteFullRows();

                // Spawn next group
                FindObjectOfType <Spawner>().SpawnNext();

                // Disable script
                enabled = false;

                cam.transform.position = cameraPos;

                FindObjectOfType <Board>().FixSides(transform);
            }
            lastFall = Time.time; // Update this as last time decreased y position
        }
        // Immediate drop
        else if (Input.GetKeyDown(KeyCode.Space) && !(PauseMenu.isPaused)) // Immediate drop
        {
            validPos = IsValidGridPos();
            // Loop while making sure the position is valid and adding a vector in the downward direction
            while ((validPos == 1) || (validPos == 2))
            {
                transform.position += new Vector3(0, -1, 0); // Send it one down
                validPos            = IsValidGridPos();
            }

            transform.position += new Vector3(0, 1, 0); // Revert by one step since we went too far

            // Update the grid
            if (!inBetweenBorders)
            {
                UpdateGrid();
            }
            else
            {
                UpdateGridInBetweenBorders();
            }

            // Destroy the shadow
            shadow.DestroyShadow();

            // Clear filled horizontal lines
            Playfield.DeleteFullRows();

            // Spawn next group
            FindObjectOfType <Spawner>().SpawnNext();

            // Disable script
            enabled = false;

            cam.transform.position = cameraPos;

            FindObjectOfType <Board>().FixSides(transform);
        }
        shadow.CheckIfActive();
    }