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