コード例 #1
0
        private void DoClosedTunnels(List <IntVec3> group, Map map)
        {
            Rand.PushState();
            int a = GenMath.RoundRandom((float)group.Count * Rand.Range(0.9f, 1.1f) * 2.5f / 10000f);

            Rand.PopState();
            a = Mathf.Min(a, 1);
            if (a > 0)
            {
                Rand.PushState();
                a = Rand.RangeInclusive(0, a);
                Rand.PopState();
            }
            float num = TunnelsWidthPerRockCount.Evaluate(group.Count);

            for (int i = 0; i < a; i++)
            {
                IntVec3 start = IntVec3.Invalid;
                float   num2  = -1f;
                for (int j = 0; j < 7; j++)
                {
                    IntVec3 intVec     = group.RandomElement();
                    float   distToCave = GetDistToCave(intVec, group, map, 30f, treatOpenSpaceAsCave: true);
                    if (!start.IsValid || distToCave > num2)
                    {
                        start = intVec;
                        num2  = distToCave;
                    }
                }
                Rand.PushState();
                float width = Rand.Range(num * 0.8f, num);
                Dig(start, Rand.Range(0f, 360f), width, group, map, closed: true);
                Rand.PopState();
            }
        }
コード例 #2
0
        private void DoOpenTunnels(List <IntVec3> group, Map map)
        {
            Rand.PushState();
            int a = GenMath.RoundRandom((float)group.Count * Rand.Range(0.9f, 1.1f) * 5.8f / 10000f);

            Rand.PopState();
            a = Mathf.Min(a, 3);
            if (a > 0)
            {
                Rand.PushState();
                a = Rand.RangeInclusive(1, a);
                Rand.PopState();
            }
            float num = TunnelsWidthPerRockCount.Evaluate(group.Count);

            for (int i = 0; i < a; i++)
            {
                IntVec3 start = IntVec3.Invalid;
                float   num2  = -1f;
                float   dir   = -1f;
                float   num3  = -1f;
                for (int j = 0; j < 10; j++)
                {
                    IntVec3 intVec     = FindRandomEdgeCellForTunnel(group, map);
                    float   distToCave = GetDistToCave(intVec, group, map, 40f, treatOpenSpaceAsCave: false);
                    float   dist;
                    float   num4 = FindBestInitialDir(intVec, group, out dist);
                    if (!start.IsValid || distToCave > num2 || (distToCave == num2 && dist > num3))
                    {
                        start = intVec;
                        num2  = distToCave;
                        dir   = num4;
                        num3  = dist;
                    }
                }
                Rand.PushState();
                float width = Rand.Range(num * 0.8f, num);
                Rand.PopState();
                Dig(start, dir, width, group, map, closed: false);
            }
        }