public void DamageResource(TetrisPiece.ResourceType resourceType, Vector2 num) { int random = (int)Random.Range(num.x, num.y); for (int i = 0; i < random; i++) { switch (resourceType) { case TetrisPiece.ResourceType.Randomized: TetrisHandler.Instance.TakeDamage((TetrisPiece.ResourceType)Random.Range(1, 4)); break; case TetrisPiece.ResourceType.Air: TetrisHandler.Instance.TakeDamage(resourceType); break; case TetrisPiece.ResourceType.Metal: TetrisHandler.Instance.TakeDamage(resourceType); break; case TetrisPiece.ResourceType.Fuel: TetrisHandler.Instance.TakeDamage(resourceType); break; case TetrisPiece.ResourceType.Flexible: TetrisHandler.Instance.TakeDamage(resourceType); break; } } }
private void Update() { if (resources.Count > 0 && !isPlacing) { isPlacing = true; tetrisObj = resources[0].gameObject; squares = resources[0].squares; for (int i = 0; i < squares.Count; i++) { tetrisObj.transform.GetChild(i).GetComponent <Renderer>().material.SetFloat("_Type", (int)squares[i].resourceType); } } if (isPlacing) { tetrisObj.transform.position = Camera.main.ScreenToWorldPoint(Input.mousePosition); tetrisObj.transform.Translate(new Vector3(0, 0, 189)); //Rotate piece if (Input.GetKeyDown(KeyCode.E)) { tetrisObj.transform.Rotate(new Vector3(0, 0, -90)); } if (Input.GetKeyDown(KeyCode.Q)) { tetrisObj.transform.Rotate(new Vector3(0, 0, 90)); } if (Input.GetMouseButtonDown(0)) { isValidPlacement = false; for (int i = 0; i < tetrisObj.transform.childCount; i++) { TetrisPiece.ResourceType CubeType = squares[i].resourceType; //raycast backwards to see if there is a grid square behind Transform workingTransform = tetrisObj.transform.GetChild(i); if (Physics.Raycast(workingTransform.position, new Vector3(0, 0, 1), out RaycastHit hit)) { if (hit.collider.transform.parent.GetComponent <GridPiece>() && ((hit.collider.transform.gameObject.GetComponent <GridCube>().isDestroyed == false) || (hit.collider.transform.gameObject.GetComponent <GridCube>().isDestroyed == true && tetrisObj.GetComponent <TetrisParent>().isRepair))) { TetrisPiece.ResourceType GridType = hit.collider.transform.parent.GetComponent <GridPiece>().resourceType; //if gridtype == resourcetype, place. //if gridtype != resourcetype, but grid space contains something, destroy both. //if gridtype != resourcetype and grid is empty, destroy cube //if none of the cubes are the right type, do not allow placement. if (GridType == CubeType || CubeType == TetrisPiece.ResourceType.Flexible) { isValidPlacement = true; } } else if (hit.collider.transform.GetComponent <TetrisTag>()) { if (hit.collider.transform.GetComponent <TetrisTag>().ResourceType == CubeType) { isValidPlacement = true; } } } else { isValidPlacement = false; return; } } if (isValidPlacement) { for (int i = 0; i < tetrisObj.transform.childCount; i++) { //raycast backwards to see if there is a grid square behind Transform workingTransform = tetrisObj.transform.GetChild(i); if (Physics.Raycast(workingTransform.position, new Vector3(0, 0, 1), out RaycastHit hit)) { TetrisPiece.ResourceType CubeType = squares[i].resourceType; if (hit.collider.transform.parent.GetComponent <GridPiece>()) { TetrisPiece.ResourceType GridType = hit.collider.transform.parent.GetComponent <GridPiece>().resourceType; //if gridtype == resourcetype, place. if (GridType == CubeType || CubeType == TetrisPiece.ResourceType.Flexible) { if (!hit.collider.transform.parent.GetComponent <GridPiece>()) { Destroy(workingTransform.transform.gameObject); } else { if (tetrisObj.gameObject.GetComponent <TetrisParent>().isRepair) { Destroy(workingTransform.gameObject); Debug.Log("Setting is destroyed false"); hit.collider.transform.gameObject.GetComponent <GridCube>().isDestroyed = false; } else { workingTransform.position = new Vector3(hit.transform.position.x, hit.transform.position.y, hit.transform.position.z - 1f); if (CubeType == TetrisPiece.ResourceType.Flexible) { squares[i].resourceType = GridType; workingTransform.GetComponent <Renderer>().material.SetFloat("_Type", (int)squares[i].resourceType); } if (GridType == TetrisPiece.ResourceType.Air) { airList.Add(workingTransform.gameObject); } else if (GridType == TetrisPiece.ResourceType.Fuel) { fuelList.Add(workingTransform.gameObject); } else if (GridType == TetrisPiece.ResourceType.Metal) { metalList.Add(workingTransform.gameObject); } } } //place it } else { Destroy(workingTransform.gameObject); } } else { Debug.Log("Hit resource for destruction"); Debug.Log(hit.collider.transform); //if gridtype != resourcetype, but grid space contains something, destroy both. if (!hit.collider.transform.parent.GetComponent <GridPiece>()) { Destroy(workingTransform.gameObject); if (hit.collider.GetComponent <TetrisTag>().ResourceType != CubeType) { if (airList.Contains(hit.collider.transform.gameObject)) { airList.Remove(hit.collider.transform.gameObject); } else if (fuelList.Contains(hit.collider.transform.gameObject)) { fuelList.Remove(hit.collider.transform.gameObject); } else if (metalList.Contains(hit.collider.transform.gameObject)) { metalList.Remove(hit.collider.transform.gameObject); } } else // hit somethign with same resource type. { workingTransform.position = new Vector3(hit.transform.position.x, hit.transform.position.y, hit.transform.position.z - 1f); } } //if gridtype != resourcetype and grid is empty, destroy cube else if (hit.collider.transform.parent.GetComponent <GridPiece>()) { Destroy(workingTransform.gameObject); } }; } } isPlacing = false; if (resources.Count > 0) { resources.Remove(resources[0]); } } } } }
public void TakeDamage(TetrisPiece.ResourceType resourceType) { switch (resourceType) { case TetrisPiece.ResourceType.Air: { { if (TetrisHandler.Instance.airList.Count > 0) { int index = Random.Range(0, TetrisHandler.Instance.airList.Count); GameObject temp = TetrisHandler.Instance.airList[index]; TetrisHandler.Instance.airList.RemoveAt(index); Destroy(temp); } else if (TetrisHandler.Instance.airObject.transform.childCount > 0) { List <Transform> childs = TetrisHandler.Instance.airObject.GetComponentsInChildren <Transform>().ToList(); childs.Remove(TetrisHandler.Instance.airObject.transform); List <Transform> truechilds = new List <Transform>(); foreach (Transform child in childs) { if (child.childCount < 1 && child.GetComponent <GridCube>().isDestroyed == false) { truechilds.Add(child); } } if (truechilds.Count < 1) { Debug.Log("YOU LOSE"); return; } GameObject randomObject = (GameObject)((Transform)truechilds[Random.Range(0, truechilds.Count)]).gameObject; randomObject.GetComponent <GridCube>().isDestroyed = true; } } } break; case TetrisPiece.ResourceType.Metal: { { if (TetrisHandler.Instance.metalList.Count > 0) { int index = Random.Range(0, TetrisHandler.Instance.metalList.Count); GameObject temp = TetrisHandler.Instance.metalList[index]; TetrisHandler.Instance.metalList.RemoveAt(index); Destroy(temp); } else if (TetrisHandler.Instance.metalObject.transform.childCount > 0) { List <Transform> childs = TetrisHandler.Instance.metalObject.GetComponentsInChildren <Transform>().ToList(); childs.Remove(TetrisHandler.Instance.metalObject.transform); List <Transform> truechilds = new List <Transform>(); foreach (Transform child in childs) { if (child.childCount < 1 && child.GetComponent <GridCube>().isDestroyed == false) { truechilds.Add(child); } } if (truechilds.Count < 1) { Debug.Log("YOU LOSE"); return; } GameObject randomObject = (GameObject)((Transform)truechilds[Random.Range(0, truechilds.Count)]).gameObject; randomObject.GetComponent <GridCube>().isDestroyed = true; } } } break; case TetrisPiece.ResourceType.Fuel: { { if (TetrisHandler.Instance.fuelList.Count > 0) { int index = Random.Range(0, TetrisHandler.Instance.fuelList.Count); GameObject temp = TetrisHandler.Instance.fuelList[index]; TetrisHandler.Instance.fuelList.RemoveAt(index); Destroy(temp); } else if (TetrisHandler.Instance.fuelObject.transform.childCount > 0) { List <Transform> childs = TetrisHandler.Instance.fuelObject.GetComponentsInChildren <Transform>().ToList(); childs.Remove(TetrisHandler.Instance.fuelObject.transform); List <Transform> truechilds = new List <Transform>(); foreach (Transform child in childs) { if (child.childCount < 1 && child.GetComponent <GridCube>().isDestroyed == false) { truechilds.Add(child); } } if (truechilds.Count < 1) { Debug.Log("YOU LOSE"); return; } GameObject randomObject = (GameObject)((Transform)truechilds[Random.Range(0, truechilds.Count)]).gameObject; randomObject.GetComponent <GridCube>().isDestroyed = true; } } } break; case TetrisPiece.ResourceType.Flexible: break; } }
public GameObject UseResourceCard(TetrisPiece.PieceType pieceType, TetrisPiece.ResourceType resourceType) { List <TetrisPiece.Square> squares = new List <TetrisPiece.Square>(); squares.Clear(); if (pieceType == TetrisPiece.PieceType.RandomNonDot) { return(UseResourceCard((TetrisPiece.PieceType)Random.Range(3, 9), resourceType)); } if (pieceType == TetrisPiece.PieceType.Random) { return(UseResourceCard((TetrisPiece.PieceType)Random.Range(2, 9), resourceType)); } squares = TetrisHandler.Instance.pieceDictionary[pieceType]; switch (resourceType) { case TetrisPiece.ResourceType.Randomized: TetrisPiece.ResourceType primary = (TetrisPiece.ResourceType)Random.Range(1, 4); TetrisPiece.ResourceType secondary = (TetrisPiece.ResourceType)Random.Range(1, 4); for (int i = 0; i < squares.Count; i++) { if (Random.Range(0, 100) < 50) { squares[i].resourceType = primary; } else { squares[i].resourceType = secondary; } } break; case TetrisPiece.ResourceType.Air: for (int i = 0; i < squares.Count; i++) { squares[i].resourceType = TetrisPiece.ResourceType.Air; } break; case TetrisPiece.ResourceType.Metal: for (int i = 0; i < squares.Count; i++) { squares[i].resourceType = TetrisPiece.ResourceType.Metal; } break; case TetrisPiece.ResourceType.Fuel: for (int i = 0; i < squares.Count; i++) { squares[i].resourceType = TetrisPiece.ResourceType.Fuel; } break; case TetrisPiece.ResourceType.Flexible: for (int i = 0; i < squares.Count; i++) { squares[i].resourceType = TetrisPiece.ResourceType.Flexible; } break; } GameObject ParentObject = new GameObject(); ParentObject.transform.position = Vector3.zero; ParentObject.AddComponent <TetrisParent>().squares = squares.Select(square => new TetrisPiece.Square() { xOffset = square.xOffset, yOffset = square.yOffset, resourceType = square.resourceType }).ToList();; ParentObject.GetComponent <TetrisParent>().isRepair = squares.Count == 1; foreach (TetrisPiece.Square square in squares) { GameObject cube = Instantiate <GameObject>(Resources.Load <GameObject>("Prefabs/TetrisCube")); cube.transform.SetParent(ParentObject.transform); cube.transform.localPosition = new Vector3(square.yOffset, square.xOffset); cube.GetComponent <TetrisTag>().ResourceType = square.resourceType; cube.GetComponent <Renderer>().material.SetFloat("_Type", (int)square.resourceType); } return(ParentObject); }
public void DamageShuttle(TetrisPiece.ResourceType resourceType, Vector2 num) { int random = (int)Random.Range(num.x, num.y); for (int i = 0; i < random; i++) { switch (resourceType) { case TetrisPiece.ResourceType.Randomized: DamageShuttle((TetrisPiece.ResourceType)Random.Range(1, 5), num); break; case TetrisPiece.ResourceType.Air: { { if (TetrisHandler.Instance.airObject.transform.childCount > TetrisHandler.Instance.airList.Count) { List <Transform> childs = TetrisHandler.Instance.airObject.GetComponentsInChildren <Transform>().ToList(); childs.Remove(TetrisHandler.Instance.airObject.transform); List <Transform> truechilds = new List <Transform>(); foreach (Transform child in childs) { if (child.childCount < 1 && child.GetComponent <GridCube>().isDestroyed == false) { truechilds.Add(child); } } GameObject randomObject = (GameObject)((Transform)truechilds[Random.Range(0, truechilds.Count)]).gameObject; randomObject.GetComponent <GridCube>().isDestroyed = true; } } } break; case TetrisPiece.ResourceType.Metal: { { if (TetrisHandler.Instance.metalObject.transform.childCount > TetrisHandler.Instance.metalList.Count) { List <Transform> childs = TetrisHandler.Instance.metalObject.GetComponentsInChildren <Transform>().ToList(); childs.Remove(TetrisHandler.Instance.metalObject.transform); List <Transform> truechilds = new List <Transform>(); foreach (Transform child in childs) { if (child.childCount < 1 && child.GetComponent <GridCube>().isDestroyed == false) { truechilds.Add(child); } } GameObject randomObject = (GameObject)((Transform)truechilds[Random.Range(0, truechilds.Count)]).gameObject; randomObject.GetComponent <GridCube>().isDestroyed = true; } } } break; case TetrisPiece.ResourceType.Fuel: { { if (TetrisHandler.Instance.fuelObject.transform.childCount > TetrisHandler.Instance.fuelList.Count) { List <Transform> childs = TetrisHandler.Instance.fuelObject.GetComponentsInChildren <Transform>().ToList(); childs.Remove(TetrisHandler.Instance.fuelObject.transform); List <Transform> truechilds = new List <Transform>(); foreach (Transform child in childs) { if (child.childCount < 1 && child.GetComponent <GridCube>().isDestroyed == false) { truechilds.Add(child); } } GameObject randomObject = (GameObject)((Transform)truechilds[Random.Range(0, truechilds.Count)]).gameObject; randomObject.GetComponent <GridCube>().isDestroyed = true; } } } break; case TetrisPiece.ResourceType.Flexible: break; } } }