public static Vector3 CaravanCollisionPosOffsetFor(Caravan caravan)
        {
            if (!caravan.Spawned)
            {
                return(Vector3.zero);
            }
            bool  flag = caravan.Spawned && caravan.pather.Moving;
            float d    = (float)(0.15000000596046448 * Find.WorldGrid.averageTileSize);

            if (flag && caravan.pather.nextTile != caravan.pather.Destination)
            {
                if (CaravanTweenerUtility.DrawPosCollides(caravan))
                {
                    Rand.PushState();
                    Rand.Seed = caravan.ID;
                    float f = Rand.Range(0f, 360f);
                    Rand.PopState();
                    Vector2 point = new Vector2(Mathf.Cos(f), Mathf.Sin(f)) * d;
                    return(WorldRendererUtility.ProjectOnQuadTangentialToPlanet(CaravanTweenerUtility.PatherTweenedPosRoot(caravan), point));
                }
                return(Vector3.zero);
            }
            int num         = (!flag) ? caravan.Tile : caravan.pather.nextTile;
            int num2        = 0;
            int vertexIndex = 0;

            CaravanTweenerUtility.GetCaravansStandingAtOrAboutToStandAt(num, out num2, out vertexIndex, caravan);
            if (num2 == 0)
            {
                return(Vector3.zero);
            }
            return(WorldRendererUtility.ProjectOnQuadTangentialToPlanet(Find.WorldGrid.GetTileCenter(num), GenGeo.RegularPolygonVertexPosition(num2, vertexIndex) * d));
        }
        private static bool DrawPosCollides(Caravan caravan)
        {
            Vector3        a        = CaravanTweenerUtility.PatherTweenedPosRoot(caravan);
            float          num      = (float)(Find.WorldGrid.averageTileSize * 0.20000000298023224);
            List <Caravan> caravans = Find.WorldObjects.Caravans;

            for (int i = 0; i < caravans.Count; i++)
            {
                Caravan caravan2 = caravans[i];
                if (caravan2 != caravan && Vector3.Distance(a, CaravanTweenerUtility.PatherTweenedPosRoot(caravan2)) < num)
                {
                    return(true);
                }
            }
            return(false);
        }