示例#1
0
    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);
        }
    }
示例#2
0
    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);
    }
示例#3
0
    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);
    }