Example #1
0
    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;
            }
        }
    }
Example #2
0
    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]);
                    }
                }
            }
        }
    }
Example #3
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;
        }
    }
Example #4
0
    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);
    }
Example #5
0
    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;
            }
        }
    }