Esempio n. 1
0
 public SnakeMovePosition(SnakeMovePosition previousSnakeMovePosition, Vector2Int gridPosition, Direction direction)
 {
     this.previousSnakeMovePosition = previousSnakeMovePosition;
     this.gridPosition = gridPosition;
     this.direction    = direction;
 }
Esempio n. 2
0
    private void HandleGridMovement()
    {
        gridMoveTimer += Time.deltaTime;
        if (gridMoveTimer >= gridMoveTimerMax)
        {
            gridMoveTimer -= gridMoveTimerMax;

            SnakeMovePosition previousSnakeMovePosition = null;
            if (snakeMovePositionList.Count > 0)
            {
                previousSnakeMovePosition = snakeMovePositionList[0];
            }

            SnakeMovePosition snakeMovePosition = new SnakeMovePosition(previousSnakeMovePosition, gridPosition, gridMoveDirection);
            snakeMovePositionList.Insert(0, snakeMovePosition);

            Vector2Int gridMoveDirectionVector;
            switch (gridMoveDirection)
            {
            default:
            case Direction.Right: gridMoveDirectionVector = new Vector2Int(1, 0); break;

            case Direction.Left: gridMoveDirectionVector = new Vector2Int(-1, 0); break;

            case Direction.Up: gridMoveDirectionVector = new Vector2Int(0, 1); break;

            case Direction.Down: gridMoveDirectionVector = new Vector2Int(0, -1); break;
            }

            gridPosition += gridMoveDirectionVector;

            gridPosition = levelGrid.ValidateGridPosition(gridPosition);

            bool snakeAteFood = levelGrid.TrySnakeEatFood(gridPosition);

            if (snakeAteFood)
            {
                snakeBodySize++;
                CreateSnakeBody();
            }

            if (snakeMovePositionList.Count >= snakeBodySize + 1)
            {
                snakeMovePositionList.RemoveAt(snakeMovePositionList.Count - 1);
            }

            UpdateSnakeBodyParts();

            foreach (SnakeBodyPart snakeBodyPart in snakeBodyPartList)
            {
                Vector2Int snakeBodyPartGridPosition = snakeBodyPart.GetGridPosition();
                if (gridPosition == snakeBodyPartGridPosition)
                {
                    //Game Over!!!
                    state = State.Dead;
                }
            }

            transform.position    = new Vector3(gridPosition.x, gridPosition.y);
            transform.eulerAngles = new Vector3(0, 0, GetAngleFromVector(gridMoveDirectionVector) - 90);
        }
    }
Esempio n. 3
0
        public void SetSnakeMovePosition(SnakeMovePosition snakeMovePosition)
        {
            this.snakeMovePosition = snakeMovePosition;
            transform.position     = new Vector3(snakeMovePosition.GetGridPosition().x, snakeMovePosition.GetGridPosition().y);

            float angle;

            switch (snakeMovePosition.GetDirection())
            {
            default:
            case Direction.Up:
                switch (snakeMovePosition.GetPreviousDirection())
                {
                default:
                    angle = 0;
                    break;

                case Direction.Left:
                    angle = 45;
                    transform.position = new Vector3(transform.position.x + .2f, transform.position.y + .2f);
                    break;

                case Direction.Right:
                    angle = -45;
                    transform.position = new Vector3(transform.position.x - .2f, transform.position.y + .2f);
                    break;
                }
                break;

            case Direction.Down:
                switch (snakeMovePosition.GetPreviousDirection())
                {
                default:
                    angle = 180;
                    break;

                case Direction.Left:
                    angle = -45;
                    transform.position = new Vector3(transform.position.x + .2f, transform.position.y - .2f);
                    break;

                case Direction.Right:
                    angle = 45;
                    transform.position = new Vector3(transform.position.x - .2f, transform.position.y - .2f);
                    break;
                }
                break;

            case Direction.Left:
                switch (snakeMovePosition.GetPreviousDirection())
                {
                default:
                    angle = -90;
                    break;

                case Direction.Down:
                    angle = -45;
                    transform.position = new Vector3(transform.position.x - .2f, transform.position.y + .2f);
                    break;

                case Direction.Up:
                    angle = 45;
                    transform.position = new Vector3(transform.position.x - .2f, transform.position.y - .2f);
                    break;
                }
                break;

            case Direction.Right:
                switch (snakeMovePosition.GetPreviousDirection())
                {
                default:
                    angle = 90;
                    break;

                case Direction.Down:
                    angle = 45;
                    transform.position = new Vector3(transform.position.x + .2f, transform.position.y + .2f);
                    break;

                case Direction.Up:
                    angle = -45;
                    transform.position = new Vector3(transform.position.x + .2f, transform.position.y - .1f);
                    break;
                }
                break;
            }

            transform.eulerAngles = new Vector3(0, 0, angle);
        }