// Generates a boxgrid private void GenerateBoxGrid(Transform startPoint, Transform endPoint, ref List <BoxGrid> boxGrid) { generatorIndex++; int numberOfXGrid = (int)NumberOfGrids(startPoint, endPoint, 'x'); int numberOfYGrid = (int)NumberOfGrids(startPoint, endPoint, 'y'); int numberOfZGrid = (int)NumberOfGrids(startPoint, endPoint, 'z'); int currentTempGridArraySize = (numberOfXGrid * numberOfYGrid * numberOfZGrid); BoxGrid[] tempGridArray = new BoxGrid[currentTempGridArraySize]; if (generatorIndex == previousGeneratorIndex) { gridArraySizeForRemovingBoxGridsFromList[generatorIndex] = gridArraySizeForRemovingBoxGridsFromList[generatorIndex] + currentTempGridArraySize; } else { gridArraySizeForRemovingBoxGridsFromList[generatorIndex] = currentTempGridArraySize; } int l = 0; for (int i = 0; i < numberOfXGrid; i++) { for (int j = 0; j < numberOfYGrid; j++) { for (int k = 0; k < numberOfZGrid; k++) { tempGridArray[l] = new BoxGrid(new Vector3((startPoint.position.x) + i * BoxGrid.gridSize * Mathf.Sign(endPoint.position.x - startPoint.position.x), (startPoint.position.y) + j * BoxGrid.gridSize * Mathf.Sign(endPoint.position.y - startPoint.position.y), (startPoint.position.z) + k * BoxGrid.gridSize * Mathf.Sign(endPoint.position.z - startPoint.position.z))); l++; } } } generatorIndex = (generatorIndex == tunnelGenarator.GetNumberOfTunnelObjects()) ? -1 : generatorIndex; boxGrid.RemoveRange(0, gridArraySizeForRemovingBoxGridsFromList[generatorIndex + 1]); previousGeneratorIndex = generatorIndex; boxGrid.AddRange(tempGridArray); }
public bool IsValidGridPos() { foreach (Transform child in transform) { Vector2 v = BoxGrid.RoundVec2(child.position); // Not inside Border? if (!BoxGrid.InsideBorder(v)) { return(false); } // Block in grid cell (and not part of same group)? if (BoxGrid.grid[(int)v.x, (int)v.y] != null && BoxGrid.grid[(int)v.x, (int)v.y].parent != transform) { return(false); } } return(true); }
public void UpdateGrid() { // Remove old children from grid for (int y = 0; y < BoxGrid.h; ++y) { for (int x = 0; x < BoxGrid.w; ++x) { if (BoxGrid.grid[x, y] != null) { if (BoxGrid.grid[x, y].parent == transform) { BoxGrid.grid[x, y] = null; } } } } // Add new children to grid foreach (Transform child in transform) { Vector2 v = BoxGrid.RoundVec2(child.position); BoxGrid.grid[(int)v.x, (int)v.y] = child; } }
private void Update() { // Move Left if (Input.GetButtonDown("Left") && UIControl.canDrop == true) { // Modify position transform.position += new Vector3(-1, 0, 0); // See if valid if (IsValidGridPos()) { // Its valid. Update grid. UpdateGrid(); } else { // Its not valid. revert. transform.position += new Vector3(1, 0, 0); } } // Move Right else if (Input.GetButtonDown("Right") && UIControl.canDrop == true) { // Modify position transform.position += new Vector3(1, 0, 0); // See if valid if (IsValidGridPos()) { // It's valid. Update grid. UpdateGrid(); } else { // It's not valid. revert. transform.position += new Vector3(-1, 0, 0); } } // Rotate else if (Input.GetButtonDown("Rotate") && groupName.ToLower() != "o" && UIControl.canDrop == true) { transform.Rotate(0, 0, -90); // See if valid if (IsValidGridPos()) { // It's valid. Update grid. UpdateGrid(); } else { // It's not valid. revert. transform.Rotate(0, 0, 90); } } else if (Input.GetButtonDown("Fall") && UIControl.canDrop == true) { Scoring.score++; // 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 BoxGrid.DeleteFullRows(); // Disable script enabled = false; // Spawn next Group FindObjectOfType <Spawner>().SpawnNext(); } Scoring.UpdateUI(); } // Move Downwards and Fall else if (UIControl.canDrop == true && Time.time - lastFall >= fallTick) { // 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 BoxGrid.DeleteFullRows(); // Disable script enabled = false; // Spawn next Group FindObjectOfType <Spawner>().SpawnNext(); } lastFall = Time.time; } // Move Downwards and Fall else if (Input.GetButton("Hard Drop") || hardDrop == true) { if (UIControl.canDrop == true) { // Modify position transform.position += new Vector3(0, -1, 0); Scoring.score++; // 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 BoxGrid.DeleteFullRows(); // Disable script enabled = false; Scoring.UpdateUI(); // Spawn next Group FindObjectOfType <Spawner>().SpawnNext(); } } } }
public void UIInput(string control) { if (target != null) { // Move Left if (control == "Left" && canDrop == true) { // Modify position target.transform.position += new Vector3(-1, 0, 0); sfxSource.PlayOneShot(move); // See if valid if (target.IsValidGridPos()) { // Its valid. Update grid. target.UpdateGrid(); } else { // Its not valid. revert. target.transform.position += new Vector3(1, 0, 0); } } // Move Right else if (control == "Right" && canDrop == true) { // Modify position target.transform.position += new Vector3(1, 0, 0); sfxSource.PlayOneShot(move); // See if valid if (target.IsValidGridPos()) { // It's valid. Update grid. target.UpdateGrid(); } else { // It's not valid. revert. target.transform.position += new Vector3(-1, 0, 0); } } // Rotate else if (control == "Rotate" && target.groupName.ToLower() != "o" && canDrop == true) { sfxSource.PlayOneShot(rotate); target.transform.Rotate(0, 0, -90); // See if valid if (target.IsValidGridPos()) { // It's valid. Update grid. target.UpdateGrid(); } else { // It's not valid. revert. target.transform.Rotate(0, 0, 90); } } else if (control == "Soft Drop") { if (canDrop == true) { Scoring.score++; // Modify position target.transform.position += new Vector3(0, -1, 0); sfxSource.PlayOneShot(move); // See if valid if (target.IsValidGridPos()) { // It's valid. Update grid. target.UpdateGrid(); } else { // It's not valid. revert. target.transform.position += new Vector3(0, 1, 0); // Clear filled horizontal lines BoxGrid.DeleteFullRows(); // Disable script target.enabled = false; // Spawn next Group FindObjectOfType <Spawner>().SpawnNext(); } Scoring.UpdateUI(); } } else if (control == "Hard Drop" && canDrop == true) { target.hardDrop = true; } } }