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