示例#1
0
        private void PlaceClusters(DesertBiome.ClusterGroup clusters, Point start, Vector2 scale)
        {
            int     num1 = (int)(scale.X * (double)clusters.Width);
            int     num2 = (int)(scale.Y * (double)clusters.Height);
            Vector2 vector2_1;

            // ISSUE: explicit reference operation
            ((Vector2)@vector2_1).\u002Ector((float)num1, (float)num2);
            Vector2 vector2_2;

            // ISSUE: explicit reference operation
            ((Vector2)@vector2_2).\u002Ector((float)clusters.Width, (float)clusters.Height);
            for (int index1 = -20; index1 < num1 + 20; ++index1)
            {
                for (int index2 = -20; index2 < num2 + 20; ++index2)
                {
                    float   num3      = 0.0f;
                    int     num4      = -1;
                    float   num5      = 0.0f;
                    int     x         = index1 + start.X;
                    int     y         = index2 + start.Y;
                    Vector2 vector2_3 = Vector2.op_Multiply(Vector2.op_Division(new Vector2((float)index1, (float)index2), vector2_1), vector2_2);
                    Vector2 vector2_4 = Vector2.op_Subtraction(Vector2.op_Multiply(Vector2.op_Division(new Vector2((float)index1, (float)index2), vector2_1), 2f), Vector2.get_One());
                    // ISSUE: explicit reference operation
                    float num6 = ((Vector2)@vector2_4).Length();
                    for (int index3 = 0; index3 < clusters.Count; ++index3)
                    {
                        DesertBiome.Cluster cluster = clusters[index3];
                        if ((double)Math.Abs((float)(cluster[0].Position.X - vector2_3.X)) <= 10.0 && (double)Math.Abs((float)(cluster[0].Position.Y - vector2_3.Y)) <= 10.0)
                        {
                            float num7 = 0.0f;
                            foreach (DesertBiome.Hub hub in (List <DesertBiome.Hub>)cluster)
                            {
                                num7 += 1f / Vector2.DistanceSquared(hub.Position, vector2_3);
                            }
                            if ((double)num7 > (double)num3)
                            {
                                if ((double)num3 > (double)num5)
                                {
                                    num5 = num3;
                                }
                                num3 = num7;
                                num4 = index3;
                            }
                            else if ((double)num7 > (double)num5)
                            {
                                num5 = num7;
                            }
                        }
                    }
                    float num8 = num3 + num5;
                    Tile  tile = GenBase._tiles[x, y];
                    bool  flag = (double)num6 >= 0.800000011920929;
                    if ((double)num8 > 3.5)
                    {
                        tile.ClearEverything();
                        tile.wall   = (byte)187;
                        tile.liquid = (byte)0;
                        if (num4 % 15 == 2)
                        {
                            tile.ResetToType((ushort)404);
                            tile.wall = (byte)187;
                            tile.active(true);
                        }
                        Tile.SmoothSlope(x, y, true);
                    }
                    else if ((double)num8 > 1.79999995231628)
                    {
                        tile.wall = (byte)187;
                        if (!flag || tile.active())
                        {
                            tile.ResetToType((ushort)396);
                            tile.wall = (byte)187;
                            tile.active(true);
                            Tile.SmoothSlope(x, y, true);
                        }
                        tile.liquid = (byte)0;
                    }
                    else if ((double)num8 > 0.699999988079071 || !flag)
                    {
                        if (!flag || tile.active())
                        {
                            tile.ResetToType((ushort)397);
                            tile.active(true);
                            Tile.SmoothSlope(x, y, true);
                        }
                        tile.liquid = (byte)0;
                        tile.wall   = (byte)216;
                    }
                    else if ((double)num8 > 0.25 && (double)GenBase._random.NextFloat() < ((double)num8 - 0.25) / 0.449999988079071)
                    {
                        if (tile.active())
                        {
                            tile.ResetToType((ushort)397);
                            tile.active(true);
                            Tile.SmoothSlope(x, y, true);
                            tile.wall = (byte)216;
                        }
                        tile.liquid = (byte)0;
                        tile.wall   = (byte)187;
                    }
                }
            }
        }
示例#2
0
        private void PlaceClusters(DesertBiome.ClusterGroup clusters, Point start, Vector2 scale)
        {
            int     x        = (int)(scale.X * (float)clusters.Width);
            int     y        = (int)(scale.Y * (float)clusters.Height);
            Vector2 vector2  = new Vector2((float)x, (float)y);
            Vector2 vector21 = new Vector2((float)clusters.Width, (float)clusters.Height);

            for (int i = -20; i < x + 20; i++)
            {
                for (int j = -20; j < y + 20; j++)
                {
                    float   single   = 0f;
                    int     num      = -1;
                    float   single1  = 0f;
                    int     x1       = i + start.X;
                    int     y1       = j + start.Y;
                    Vector2 vector22 = (new Vector2((float)i, (float)j) / vector2) * vector21;
                    Vector2 vector23 = ((new Vector2((float)i, (float)j) / vector2) * 2f) - Vector2.One;
                    float   single2  = vector23.Length();
                    for (int k = 0; k < clusters.Count; k++)
                    {
                        DesertBiome.Cluster item = clusters[k];
                        if (Math.Abs(item[0].Position.X - vector22.X) <= 10f && Math.Abs(item[0].Position.Y - vector22.Y) <= 10f)
                        {
                            float single3 = 0f;
                            foreach (DesertBiome.Hub hub in item)
                            {
                                single3 = single3 + 1f / Vector2.DistanceSquared(hub.Position, vector22);
                            }
                            if (single3 > single)
                            {
                                if (single > single1)
                                {
                                    single1 = single;
                                }
                                single = single3;
                                num    = k;
                            }
                            else if (single3 > single1)
                            {
                                single1 = single3;
                            }
                        }
                    }
                    float single4 = single + single1;
                    Tile  tile    = GenBase._tiles[x1, y1];
                    bool  flag    = single2 >= 0.8f;
                    if (single4 > 3.5f)
                    {
                        tile.ClearEverything();
                        tile.wall   = 187;
                        tile.liquid = 0;
                        if (num % 15 == 2)
                        {
                            tile.ResetToType(404);
                            tile.wall = 187;
                            tile.active(true);
                        }
                        Tile.SmoothSlope(x1, y1, true);
                    }
                    else if (single4 > 1.8f)
                    {
                        tile.wall = 187;
                        if (!flag || tile.active())
                        {
                            tile.ResetToType(396);
                            tile.wall = 187;
                            tile.active(true);
                            Tile.SmoothSlope(x1, y1, true);
                        }
                        tile.liquid = 0;
                    }
                    else if (single4 > 0.7f || !flag)
                    {
                        if (!flag || tile.active())
                        {
                            tile.ResetToType(397);
                            tile.active(true);
                            Tile.SmoothSlope(x1, y1, true);
                        }
                        tile.liquid = 0;
                        tile.wall   = 216;
                    }
                    else if (single4 > 0.25f)
                    {
                        float single5 = (single4 - 0.25f) / 0.45f;
                        if (GenBase._random.NextFloat() < single5)
                        {
                            if (tile.active())
                            {
                                tile.ResetToType(397);
                                tile.active(true);
                                Tile.SmoothSlope(x1, y1, true);
                                tile.wall = 216;
                            }
                            tile.liquid = 0;
                            tile.wall   = 187;
                        }
                    }
                }
            }
        }
示例#3
0
        // Token: 0x06000FC9 RID: 4041 RVA: 0x003FAC60 File Offset: 0x003F8E60
        private void PlaceClusters(DesertBiome.ClusterGroup clusters, Point start, Vector2 scale)
        {
            int     num    = (int)(scale.X * (float)clusters.Width);
            int     num2   = (int)(scale.Y * (float)clusters.Height);
            Vector2 value  = new Vector2((float)num, (float)num2);
            Vector2 value2 = new Vector2((float)clusters.Width, (float)clusters.Height);

            for (int i = -20; i < num + 20; i++)
            {
                for (int j = -20; j < num2 + 20; j++)
                {
                    float   num3   = 0f;
                    int     num4   = -1;
                    float   num5   = 0f;
                    int     num6   = i + start.X;
                    int     num7   = j + start.Y;
                    Vector2 vector = new Vector2((float)i, (float)j) / value * value2;
                    float   num8   = (new Vector2((float)i, (float)j) / value * 2f - Vector2.One).Length();
                    for (int k = 0; k < clusters.Count; k++)
                    {
                        DesertBiome.Cluster cluster = clusters[k];
                        if (Math.Abs(cluster[0].Position.X - vector.X) <= 10f && Math.Abs(cluster[0].Position.Y - vector.Y) <= 10f)
                        {
                            float num9 = 0f;
                            foreach (DesertBiome.Hub current in cluster)
                            {
                                num9 += 1f / Vector2.DistanceSquared(current.Position, vector);
                            }
                            if (num9 > num3)
                            {
                                if (num3 > num5)
                                {
                                    num5 = num3;
                                }
                                num3 = num9;
                                num4 = k;
                            }
                            else if (num9 > num5)
                            {
                                num5 = num9;
                            }
                        }
                    }
                    float num10 = num3 + num5;
                    Tile  tile  = GenBase._tiles[num6, num7];
                    bool  flag  = num8 >= 0.8f;
                    if (num10 > 3.5f)
                    {
                        tile.ClearEverything();
                        tile.wall   = 187;
                        tile.liquid = 0;
                        if (num4 % 15 == 2)
                        {
                            tile.ResetToType(404);
                            tile.wall = 187;
                            tile.active(true);
                        }
                        Tile.SmoothSlope(num6, num7, true);
                    }
                    else if (num10 > 1.8f)
                    {
                        tile.wall = 187;
                        if (!flag || tile.active())
                        {
                            tile.ResetToType(396);
                            tile.wall = 187;
                            tile.active(true);
                            Tile.SmoothSlope(num6, num7, true);
                        }
                        tile.liquid = 0;
                    }
                    else if (num10 > 0.7f || !flag)
                    {
                        if (!flag || tile.active())
                        {
                            tile.ResetToType(397);
                            tile.active(true);
                            Tile.SmoothSlope(num6, num7, true);
                        }
                        tile.liquid = 0;
                        tile.wall   = 216;
                    }
                    else if (num10 > 0.25f)
                    {
                        float num11 = (num10 - 0.25f) / 0.45f;
                        if (GenBase._random.NextFloat() < num11)
                        {
                            if (tile.active())
                            {
                                tile.ResetToType(397);
                                tile.active(true);
                                Tile.SmoothSlope(num6, num7, true);
                                tile.wall = 216;
                            }
                            tile.liquid = 0;
                            tile.wall   = 187;
                        }
                    }
                }
            }
        }