IEnumerator TickCoroutine() { GridCell newSnakeBlockPosition = null; while (true) { if (CanMove) { float snakeMovementsPerSec = _snakeEater.GetSnakeCurrentSpeed(); yield return(new WaitForSeconds(snakeMovementsPerSec)); bool willGrow = _snakeEater.HasFoodInTheLastPosition(); if (willGrow) { newSnakeBlockPosition = ThisSnake.Last().currentGridCell; } _snakeMover.Tick(); if (willGrow) { Grow(newSnakeBlockPosition); } } yield return(null); } }
public void Grow(GridCell newBlockPosition) { GameObject tailPrefab = _snakeSettings.SnakePrefabsData.TailBlockPrefab; GameObject newTailGO = Instantiate(tailPrefab, transform); SnakeBlock newTail = newTailGO.GetComponent <SnakeBlock>(); newTail.BlockType = _snakeEater.NextTailPartsPop(); newTail.GetComponent <SpriteRenderer>().color = SnakeColor; SnakeBlock lastSnakePart = ThisSnake.Last(); lastSnakePart.HasFood = false; newTail.currentGridCell = newBlockPosition; ThisSnake.Add(newTail); }
internal void CutInThisBlock(SnakeBlock entityOcupating) { int indexToRemove = 0; int i = 0; foreach (SnakeBlock snakeBlock in ThisSnake) { if (snakeBlock == entityOcupating) { indexToRemove = i; } if (indexToRemove != 0) { Destroy(snakeBlock.gameObject); } i++; } ThisSnake.RemoveRange(indexToRemove, ThisSnake.Count - indexToRemove); }