Ejemplo n.º 1
0
    void Update()
    {
        Vector2Int objectPosition = VectorTransformer.Vector3ToVector2Int(transform.position);
        Vector2Int downPosition   = VectorTransformer.Vector2IntDown(objectPosition);

        if (!_fallControl)
        {
            _fallControl = true;
            StartCoroutine(WaitFall(objectPosition, downPosition));
        }

        if (!_gridController.CellIsEmptyWithoutCharacter(downPosition))
        {
            _startFallFrom = objectPosition;
        }

        //Se o objeto abaixo deste é Slider e na posição do lado e lado baixo estão vazias a pedra escorrega
        if (_gridController.HasGridObjectAt(downPosition))
        {
            Transform downObject = _gridController.GetObject(downPosition);
            if (downObject.CompareTag("SlideObject") || downObject.CompareTag("Rock"))//verifica se o de baixo é slider
            {
                if (!_gridController.HasNextFreeSpace(objectPosition, Direction.Down))
                {
                    Vector2Int leftPosition = VectorTransformer.Vector2IntLeft(objectPosition);
                    if (_gridController.CellIsEmpty(leftPosition))                                       //Verifica lado esquerdo
                    {
                        if (_gridController.CellIsEmpty(VectorTransformer.Vector2IntDown(leftPosition))) //Verifica esquerdo baixo
                        {
                            //Desliza
                            StartCoroutine(WaitSlide(objectPosition, leftPosition));
                            return;
                        }
                    }
                    Vector2Int rightPosition = VectorTransformer.Vector2IntRight(objectPosition); //Verifica lado direito
                    if (_gridController.CellIsEmpty(rightPosition))
                    {
                        if (_gridController.CellIsEmpty(VectorTransformer.Vector2IntDown(rightPosition))) //Verifica direita baixo
                        {
                            //Desliza
                            StartCoroutine(WaitSlide(objectPosition, rightPosition));
                            return;
                        }
                    }
                }
            }
        }
        if (_gridController.characterPosition.Equals(downPosition))
        {
            if (!_startFallFrom.Equals(VectorTransformer.NullPoint) & _startFallFrom.y > _gridController.characterPosition.y + 1)
            {
                _gridController.character.GetComponent <Lose>().StageLose();
            }
        }
    }
Ejemplo n.º 2
0
    private bool CanBePushed(Vector2Int positionDirection, Direction direction)
    {
        Vector2Int vectorDirection = (direction == Direction.Right) ? Vector2Int.right : Vector2Int.left;

        if (_gridController.HasGridObjectAt(positionDirection)
            & _gridController.CellIsEmpty(positionDirection + vectorDirection)
            & !_gridController.CellIsEmpty(positionDirection + Vector2Int.down))

        {
            if (_gridController.GetObject(positionDirection).CompareTag("Rock"))
            {
                return(true);
            }
        }

        return(false);
    }
Ejemplo n.º 3
0
    IEnumerator DestroyStar(GameObject star, GameObject background, Vector3 position)
    {
        yield return(new WaitForSeconds(0.4f));

        Destroy(star);
        Destroy(background);
        if (_gridController.CellIsEmpty(VectorTransformer.Vector3ToVector2Int(position)))
        {
            GameObject diamond = Instantiate(prefabDiamond, position, Quaternion.identity);
            _gridController.AddObjectToGrid(diamond.transform);
        }
    }
Ejemplo n.º 4
0
    IEnumerator Walk()
    {
        Vector2Int position = VectorTransformer.Vector3ToVector2Int(transform.position);

        //Direction newLeft = TurnLeft(_direction);
        newLeft = TurnLeft(_direction);
        Vector2Int leftPosition  = VectorTransformer.DirectionToVector2Int(position, newLeft);
        Vector2Int frontPosition = VectorTransformer.DirectionToVector2Int(position, _direction);

        Debug.Log("Iniciou: " + _direction + '-' + newLeft);
        //Verificar se pode ir para esquerda. Se sim vira e anda
        if (_gridController.CellIsEmpty(leftPosition))
        {
            _direction = newLeft;
            _gridController.MoveObject(position, leftPosition);
            transform.position = VectorTransformer.Vector2IntToVector3Int(leftPosition);
            Debug.Log("Go Left: " + _direction + "-" + newLeft);
        }
        //Se não anda para frente
        else if (_gridController.CellIsEmpty(frontPosition))
        {
            _gridController.MoveObject(position, frontPosition);
            transform.position = VectorTransformer.Vector2IntToVector3Int(frontPosition);
            Debug.Log("Go Ahead: " + _direction + "-" + newLeft);
        }
        //Senão puder andar para esquerda nem para frente apenas vira a direita
        else
        {
            _direction = TurnRight(_direction);
            Debug.Log("Turn Right: " + _direction + "-" + newLeft);
        }


        yield return(new WaitForSeconds(0.5f));

        _coroutineControl = true;
    }
Ejemplo n.º 5
0
    // Update is called once per frame
    void Update()
    {
        Vector2Int objectPosition = VectorTransformer.Vector3ToVector2Int(transform.position);

        Debug.Log(objectPosition + "-" + Time.frameCount);
        Vector2Int downPosition = VectorTransformer.Vector2IntDown(objectPosition);

        if (_gridController.CellIsEmpty(downPosition))
        {
            if (!_isFalling & _downReallyFree)
            {
                if (!AlreadyFallTo(downPosition))
                {
                    _isFalling = true;
                    Debug.Log("Fall" + "-" + Time.frameCount);
                    //Debug.Log(transform.name + ": " + "_isFalling: " + _isFalling);
                    StartCoroutine(WaitFall(objectPosition, downPosition));
                    //Debug.Log(_gridController.HasGridObjectAt(downPosition));
                    //Debug.Log("Fall" + "-" + Time.frameCount);
                    _startFallFrom = objectPosition;
                }
            }
        }
        //Se o objeto abaixo deste é Slider e na posição do lado e lado baixo estão vazias a pedra escorrega
        else if (_gridController.HasGridObjectAt(downPosition))
        {
            //verifica se o de baixo é slider
            Transform downObject = _gridController.GetObject(downPosition);
            if (downObject.tag.Equals("SlideObject"))
            {
                if (_gridController.CellIsEmpty(VectorTransformer.Vector2IntDown(downPosition)))
                {
                    _downReallyFree = false;
                    StartCoroutine(WaitHalfSecond());
                    return;
                }

                //Verifica lado esquerdo
                Vector2Int leftPosition = VectorTransformer.Vector2IntLeft(objectPosition);
                if (_gridController.CellIsEmpty(leftPosition))
                {
                    //Verifica esquerdo baixo
                    if (_gridController.CellIsEmpty(VectorTransformer.Vector2IntDown(leftPosition)))
                    {
                        //Desliza
                        StartCoroutine(WaitSlide(objectPosition, leftPosition));
                        return;
                    }
                }
                //Verifica lado direito
                Vector2Int rightPosition = VectorTransformer.Vector2IntRight(objectPosition);
                if (_gridController.CellIsEmpty(rightPosition))
                {
                    //Verifica direita baixo
                    if (_gridController.CellIsEmpty(VectorTransformer.Vector2IntDown(rightPosition)))
                    {
                        //Desliza
                        StartCoroutine(WaitSlide(objectPosition, rightPosition));
                        return;
                    }
                }
            }
        }
    }