public void SetGridPosition(singleGridPos gridPosition) { //Assuming which direction the head and body is //Add the new body to add this.gridPosition = gridPosition; transform.position = new Vector3(gridPosition.GetGridPosition().x, gridPosition.GetGridPosition().y); float angle; switch (gridPosition.GetDirection()) { default: case DIRECTION.up: angle = 0; break; case DIRECTION.down: angle = 180; break; case DIRECTION.left: angle = -90; break; case DIRECTION.right: angle = 90; break; } transform.eulerAngles = new Vector3(0, 0, angle); }
public singleGridPos(singleGridPos previousSnakeMove, Vector2Int GridPos, DIRECTION direction) { this.previousSnakeMove = previousSnakeMove; this.GridPos = GridPos; this.direction = direction; }
private void Update() { if (doa == DOA.Alive) { Inputs(); gridmoveTimer += Time.deltaTime; if (gridmoveTimer >= gridmoveTimerMax) { //reset timer gridmoveTimer = gridmoveTimer - gridmoveTimerMax; //update snake position singleGridPos previousSnakeMove = null; if (snakepositionlist.Count > 0) { previousSnakeMove = snakepositionlist[0]; } singleGridPos snakeMovePosition = new singleGridPos(previousSnakeMove, gridPosition, movedirection); snakepositionlist.Insert(0, snakeMovePosition); Vector2Int gridMoveDirectionVector; //move the snake one spot forward from where it was switch (movedirection) { 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 = gridPosition + gridMoveDirectionVector; gridPosition = levelGrid.validGridPos(gridPosition); //grow the snake after eating bool snakehaseaten = levelGrid.SnakeMoves(gridPosition); if (snakehaseaten) { snakebodysize++; CreateSnakeBodyPart(); } if (snakepositionlist.Count >= snakebodysize + 1) { snakepositionlist.RemoveAt(snakepositionlist.Count - 1); } UpdateSnakeBodyParts(); //Death scenario if snake eats snake foreach (SnakeBodyPart snakebodypart in tranformsnakebody) { Vector2Int snakebodypartgridpos = snakebodypart.GetGridPosition(); if (gridPosition == snakebodypartgridpos) { doa = DOA.Dead; gamehandler.Snakedeath(); } } transform.position = new Vector3(gridPosition.x, gridPosition.y); transform.eulerAngles = new Vector3(0, 0, GetAngleFunction(gridMoveDirectionVector) - 90); } } }