Exemplo n.º 1
0
        public static bool Prefix(ref WorldGenerator __instance, ref List <WorldGenerator.River> __result)
        {
            UnityEngine.Random.State state = UnityEngine.Random.state;
            UnityEngine.Random.InitState(__instance.m_riverSeed);
            DateTime now = DateTime.Now;
            List <WorldGenerator.River> list  = new List <WorldGenerator.River>();
            List <UnityEngine.Vector2>  list2 = new List <UnityEngine.Vector2>(__instance.m_lakes);

            while (list2.Count > 1)
            {
                UnityEngine.Vector2 vector = list2[0];
                int num = __instance.FindRandomRiverEnd(list, __instance.m_lakes, vector, WorldGenOptions.GenOptions.usingData.riverMultipleMaxDistance, 0.4f, 128f);
                if (num == -1 && !__instance.HaveRiver(list, vector))
                {
                    num = __instance.FindRandomRiverEnd(list, __instance.m_lakes, vector, 5000f, 0.4f, 128f);
                }
                if (num != -1)
                {
                    WorldGenerator.River river = new WorldGenerator.River();
                    river.p0       = vector;
                    river.p1       = __instance.m_lakes[num];
                    river.center   = (river.p0 + river.p1) * 0.5f;
                    river.widthMax = UnityEngine.Random.Range(WorldGenOptions.GenOptions.usingData.riverWidthMaxLowerRange, WorldGenOptions.GenOptions.usingData.riverWidthMaxUpperRange);
                    river.widthMin = UnityEngine.Random.Range(WorldGenOptions.GenOptions.usingData.riverWidthMinLowerRange, river.widthMax);
                    float num2 = UnityEngine.Vector2.Distance(river.p0, river.p1);
                    river.curveWidth      = num2 / WorldGenOptions.GenOptions.usingData.riverCurveWidth;
                    river.curveWavelength = num2 / WorldGenOptions.GenOptions.usingData.riverWavelength;
                    list.Add(river);
                }
                else
                {
                    list2.RemoveAt(0);
                }
            }
            ZLog.Log("Rivers:" + list.Count);
            __instance.RenderRivers(list);
            ZLog.Log("River Calc time " + (DateTime.Now - now).TotalMilliseconds + " ms");
            UnityEngine.Random.state = state;
            __result = list;
            return(false);
        }
Exemplo n.º 2
0
    // Token: 0x06001053 RID: 4179 RVA: 0x000730D0 File Offset: 0x000712D0
    private List <WorldGenerator.River> PlaceRivers()
    {
        UnityEngine.Random.State state = UnityEngine.Random.state;
        UnityEngine.Random.InitState(this.m_riverSeed);
        DateTime now = DateTime.Now;
        List <WorldGenerator.River> list = new List <WorldGenerator.River>();
        List <Vector2> list2             = new List <Vector2>(this.m_lakes);

        while (list2.Count > 1)
        {
            Vector2 vector = list2[0];
            int     num    = this.FindRandomRiverEnd(list, this.m_lakes, vector, 2000f, 0.4f, 128f);
            if (num == -1 && !this.HaveRiver(list, vector))
            {
                num = this.FindRandomRiverEnd(list, this.m_lakes, vector, 5000f, 0.4f, 128f);
            }
            if (num != -1)
            {
                WorldGenerator.River river = new WorldGenerator.River();
                river.p0       = vector;
                river.p1       = this.m_lakes[num];
                river.center   = (river.p0 + river.p1) * 0.5f;
                river.widthMax = UnityEngine.Random.Range(60f, 100f);
                river.widthMin = UnityEngine.Random.Range(60f, river.widthMax);
                float num2 = Vector2.Distance(river.p0, river.p1);
                river.curveWidth      = num2 / 15f;
                river.curveWavelength = num2 / 20f;
                list.Add(river);
            }
            else
            {
                list2.RemoveAt(0);
            }
        }
        this.RenderRivers(list);
        DateTime.Now - now;
        UnityEngine.Random.state = state;
        return(list);
    }
Exemplo n.º 3
0
    // Token: 0x06001050 RID: 4176 RVA: 0x00072E6C File Offset: 0x0007106C
    private List <WorldGenerator.River> PlaceStreams()
    {
        UnityEngine.Random.State state = UnityEngine.Random.state;
        UnityEngine.Random.InitState(this.m_streamSeed);
        List <WorldGenerator.River> list = new List <WorldGenerator.River>();
        int      num = 0;
        DateTime now = DateTime.Now;

        for (int i = 0; i < 3000; i++)
        {
            Vector2 vector;
            float   num2;
            Vector2 vector2;
            if (this.FindStreamStartPoint(100, 26f, 31f, out vector, out num2) && this.FindStreamEndPoint(100, 36f, 44f, vector, 80f, 200f, out vector2))
            {
                Vector2 vector3 = (vector + vector2) * 0.5f;
                float   height  = this.GetHeight(vector3.x, vector3.y);
                if (height >= 26f && height <= 44f)
                {
                    WorldGenerator.River river = new WorldGenerator.River();
                    river.p0       = vector;
                    river.p1       = vector2;
                    river.center   = vector3;
                    river.widthMax = 20f;
                    river.widthMin = 20f;
                    float num3 = Vector2.Distance(river.p0, river.p1);
                    river.curveWidth      = num3 / 15f;
                    river.curveWavelength = num3 / 20f;
                    list.Add(river);
                    num++;
                }
            }
        }
        this.RenderRivers(list);
        UnityEngine.Random.state = state;
        DateTime.Now - now;
        return(list);
    }
Exemplo n.º 4
0
    // Token: 0x0600105B RID: 4187 RVA: 0x0007374C File Offset: 0x0007194C
    private void AddRiverPoint(Dictionary <Vector2i, List <WorldGenerator.RiverPoint> > riverPoints, Vector2i grid, Vector2 p, float r, WorldGenerator.River river)
    {
        List <WorldGenerator.RiverPoint> list;

        if (riverPoints.TryGetValue(grid, out list))
        {
            list.Add(new WorldGenerator.RiverPoint(p, r));
            return;
        }
        list = new List <WorldGenerator.RiverPoint>();
        list.Add(new WorldGenerator.RiverPoint(p, r));
        riverPoints.Add(grid, list);
    }
Exemplo n.º 5
0
    // Token: 0x0600105A RID: 4186 RVA: 0x000736C8 File Offset: 0x000718C8
    private void AddRiverPoint(Dictionary <Vector2i, List <WorldGenerator.RiverPoint> > riverPoints, Vector2 p, float r, WorldGenerator.River river)
    {
        Vector2i riverGrid = this.GetRiverGrid(p.x, p.y);
        int      num       = Mathf.CeilToInt(r / 64f);

        for (int i = riverGrid.y - num; i <= riverGrid.y + num; i++)
        {
            for (int j = riverGrid.x - num; j <= riverGrid.x + num; j++)
            {
                Vector2i grid = new Vector2i(j, i);
                if (this.InsideRiverGrid(grid, p, r))
                {
                    this.AddRiverPoint(riverPoints, grid, p, r, river);
                }
            }
        }
    }