Пример #1
0
 private void ApplyDistanceField(DistanceElement[,] distance, Map map, TerrainDef rockDef, RoadDef roadDef, RoadPathingDef pathingDef)
 {
     for (int i = 0; i < map.Size.x; i++)
     {
         for (int j = 0; j < map.Size.z; j++)
         {
             DistanceElement distanceElement = distance[i, j];
             if (!distanceElement.touched)
             {
                 continue;
             }
             float b = Mathf.Abs(distanceElement.fromRoad + Rand.Value - 0.5f);
             for (int k = 0; k < roadDef.roadGenSteps.Count; k++)
             {
                 RoadDefGenStep roadDefGenStep = roadDef.roadGenSteps[k];
                 float          x   = Mathf.LerpUnclamped(distanceElement.fromRoad, b, roadDefGenStep.antialiasingMultiplier);
                 float          num = roadDefGenStep.chancePerPositionCurve.Evaluate(x);
                 if (!(num <= 0f) && (roadDefGenStep.periodicSpacing == 0 || !(distanceElement.alongPath / (float)roadDefGenStep.periodicSpacing % 1f * (float)roadDefGenStep.periodicSpacing >= 1f)))
                 {
                     IntVec3 position = new IntVec3(i, 0, j);
                     if (Rand.Value < num)
                     {
                         roadDefGenStep.Place(map, position, rockDef, distanceElement.origin, distance);
                     }
                 }
             }
         }
     }
 }
Пример #2
0
        private void ApplyDistanceField(DistanceElement[,] distance, Map map, TerrainDef rockDef, RoadDef roadDef, RoadPathingDef pathingDef)
        {
            int num = 0;

            while (true)
            {
                int     num2 = num;
                IntVec3 size = map.Size;
                if (num2 < size.x)
                {
                    int num3 = 0;
                    while (true)
                    {
                        int     num4  = num3;
                        IntVec3 size2 = map.Size;
                        if (num4 < size2.z)
                        {
                            DistanceElement distanceElement = distance[num, num3];
                            if (distanceElement.touched)
                            {
                                float b = Mathf.Abs((float)(distanceElement.fromRoad + Rand.Value - 0.5));
                                for (int i = 0; i < roadDef.roadGenSteps.Count; i++)
                                {
                                    RoadDefGenStep roadDefGenStep = roadDef.roadGenSteps[i];
                                    float          x    = Mathf.LerpUnclamped(distanceElement.fromRoad, b, roadDefGenStep.antialiasingMultiplier);
                                    float          num5 = roadDefGenStep.chancePerPositionCurve.Evaluate(x);
                                    if (!(num5 <= 0.0) && (roadDefGenStep.periodicSpacing == 0 || !(distanceElement.alongPath / (float)roadDefGenStep.periodicSpacing % 1.0 * (float)roadDefGenStep.periodicSpacing >= 1.0)))
                                    {
                                        IntVec3 position = new IntVec3(num, 0, num3);
                                        if (Rand.Value < num5)
                                        {
                                            roadDefGenStep.Place(map, position, rockDef);
                                        }
                                    }
                                }
                            }
                            num3++;
                            continue;
                        }
                        break;
                    }
                    num++;
                    continue;
                }
                break;
            }
        }