Esempio n. 1
0
    void go()
    {
        interval++;
        if (interval < speed)
        {
            return;
        }
        interval = 0;

        for (int i = 0; i < snake.Count; i++)
        {
            snake[i].go.transform.localPosition = snake[i].targetPos;
            snake[i].lastPos = snake[i].targetPos;
            snake[i].go.transform.localEulerAngles = snake[i].targetAngle;
            snake[i].lastRotateAngle = snake[i].targetRotateAngle;
        }
        updateCameraParam();

        bool eat = Foods.Instance.Eat(snake[0].targetPos);

        if (eat)
        {
            GameObject body = clone(Config.Instance.PrefabBody, gameObject);
            SnakePart  part = new SnakePart(body);
            part.Clone(snake[snake.Count - 2]);
            snake.Insert(snake.Count - 1, part);
        }

        Vector3   dest     = Vector3.zero;
        PlaneType newPlane = mapPlane[currPlane].Move(snake[0].lastPos, ref newDirect, ref dest);

        snake[0].SetTargetPos(dest);
        Vector3 angle;

        if (currPlane == newPlane)
        {
            angle = mapPlane[currPlane].Rotate(currDirect, newDirect);
        }
        else
        {
            angle = mapPlane[newPlane].Enter(currPlane);
        }
        snake[0].SetRotateAngle(angle);
        currPlane = newPlane;

        int count = eat ? snake.Count - 2 : snake.Count;

        for (int i = 1; i < count; i++)
        {
            snake[i].SetTargetPos(snake[i - 1].lastPos);
            snake[i].targetRotateAngle = snake[i - 1].lastRotateAngle;
            snake[i].targetAngle       = snake[i - 1].go.transform.localEulerAngles;
        }

        lastFixedTime = Time.time;
        currDirect    = newDirect;
    }