/// <summary> /// Grows up the snake. /// </summary> /// <param name="food">The food.</param> public void Eat(IFoodComponent food) { //put the new body part on the tail's place var newBodyPart = _bodyFactory.Create(null, GameComponentType.Body, Direction, Step, Step); newBodyPart.CurPosition = Tail.CurPosition; newBodyPart.PrevPosition = Tail.PrevPosition; //step back tail Tail.CurPosition = Tail.PrevPosition; Tail.Direction = GetDirestion(newBodyPart.CurPosition, Tail.CurPosition); //set direction for new food newBodyPart.Direction = Direction; //grow the snake SnakeBodyWithHead.Insert(SnakeBodyWithHead.Count - 1, newBodyPart); _body = null; // it will cause to recreate Field.PutOn(newBodyPart); OnEat?.Invoke(food); }