public SnakeMovePosition(SnakeMovePosition previousSnakeMovePosition, Vector2Int gridPosition, Direction direction) { this.previousSnakeMovePosition = previousSnakeMovePosition; this.gridPosition = gridPosition; this.direction = direction; }
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); } }
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); }