Пример #1
0
    public override void Process(uint seed)
    {
        TerrainHeightMap heightMap = TerrainMeta.HeightMap;
        Vector3          position1 = TerrainMeta.Position;
        Vector3          size      = TerrainMeta.Size;
        float            x1        = (float)position1.x;
        float            z1        = (float)position1.z;
        float            num1      = (float)(position1.x + size.x);
        float            num2      = (float)(position1.z + size.z);

        PlaceMonument.SpawnInfo spawnInfo1 = new PlaceMonument.SpawnInfo();
        int num3 = int.MinValue;
        Prefab <MonumentInfo> prefab1 = Prefab.Load <MonumentInfo>(this.Monument.resourceID, (GameManager)null, (PrefabAttribute.Library)null);

        for (int index = 0; index < 10000; ++index)
        {
            float  x2     = SeedRandom.Range(ref seed, x1, num1);
            float  z2     = SeedRandom.Range(ref seed, z1, num2);
            float  normX  = TerrainMeta.NormalizeX(x2);
            float  normZ  = TerrainMeta.NormalizeZ(z2);
            float  num4   = SeedRandom.Value(ref seed);
            double factor = (double)this.Filter.GetFactor(normX, normZ);
            if (factor * factor >= (double)num4)
            {
                float   height = heightMap.GetHeight(normX, normZ);
                Vector3 pos;
                ((Vector3) ref pos).\u002Ector(x2, height, z2);
                Quaternion localRotation = prefab1.Object.get_transform().get_localRotation();
                Vector3    localScale    = prefab1.Object.get_transform().get_localScale();
                prefab1.ApplyDecorComponents(ref pos, ref localRotation, ref localScale);
                if ((!Object.op_Implicit((Object)prefab1.Component) || prefab1.Component.CheckPlacement(pos, localRotation, localScale)) && (prefab1.ApplyTerrainAnchors(ref pos, localRotation, localScale, this.Filter) && prefab1.ApplyTerrainChecks(pos, localRotation, localScale, this.Filter)) && (prefab1.ApplyTerrainFilters(pos, localRotation, localScale, (SpawnFilter)null) && prefab1.ApplyWaterChecks(pos, localRotation, localScale) && !prefab1.CheckEnvironmentVolumes(pos, localRotation, localScale, EnvironmentType.Underground)))
                {
                    PlaceMonument.SpawnInfo spawnInfo2 = new PlaceMonument.SpawnInfo();
                    spawnInfo2.prefab   = (Prefab)prefab1;
                    spawnInfo2.position = pos;
                    spawnInfo2.rotation = localRotation;
                    spawnInfo2.scale    = localScale;
                    int num5 = -Mathf.RoundToInt(Vector3Ex.Magnitude2D(pos));
                    if (num5 > num3)
                    {
                        num3       = num5;
                        spawnInfo1 = spawnInfo2;
                    }
                }
            }
        }
        if (num3 == int.MinValue)
        {
            return;
        }
        Prefab     prefab2   = spawnInfo1.prefab;
        Vector3    position2 = spawnInfo1.position;
        Quaternion rotation  = spawnInfo1.rotation;
        Vector3    scale     = spawnInfo1.scale;

        prefab2.ApplyTerrainPlacements(position2, rotation, scale);
        prefab2.ApplyTerrainModifiers(position2, rotation, scale);
        World.AddPrefab("Monument", prefab2.ID, position2, rotation, scale);
    }
Пример #2
0
    public override void Process(uint seed)
    {
        TerrainHeightMap heightMap = TerrainMeta.HeightMap;
        Vector3          position  = TerrainMeta.Position;
        Vector3          size      = TerrainMeta.Size;
        float            single    = position.x;
        float            single1   = position.z;
        float            single2   = position.x + size.x;
        float            single3   = position.z + size.z;

        PlaceMonument.SpawnInfo spawnInfo = new PlaceMonument.SpawnInfo();
        int num = -2147483648;
        Prefab <MonumentInfo> prefab = Prefab.Load <MonumentInfo>(this.Monument.resourceID, null, null);

        for (int i = 0; i < 10000; i++)
        {
            float single4 = SeedRandom.Range(ref seed, single, single2);
            float single5 = SeedRandom.Range(ref seed, single1, single3);
            float single6 = TerrainMeta.NormalizeX(single4);
            float single7 = TerrainMeta.NormalizeZ(single5);
            float single8 = SeedRandom.Value(ref seed);
            float factor  = this.Filter.GetFactor(single6, single7);
            if (factor * factor >= single8)
            {
                float      height  = heightMap.GetHeight(single6, single7);
                Vector3    vector3 = new Vector3(single4, height, single5);
                Quaternion obj     = prefab.Object.transform.localRotation;
                Vector3    obj1    = prefab.Object.transform.localScale;
                prefab.ApplyDecorComponents(ref vector3, ref obj, ref obj1);
                if ((!prefab.Component || prefab.Component.CheckPlacement(vector3, obj, obj1)) && prefab.ApplyTerrainAnchors(ref vector3, obj, obj1, this.Filter) && prefab.ApplyTerrainChecks(vector3, obj, obj1, this.Filter) && prefab.ApplyTerrainFilters(vector3, obj, obj1, null) && prefab.ApplyWaterChecks(vector3, obj, obj1) && !prefab.CheckEnvironmentVolumes(vector3, obj, obj1, EnvironmentType.Underground))
                {
                    PlaceMonument.SpawnInfo spawnInfo1 = new PlaceMonument.SpawnInfo()
                    {
                        prefab   = prefab,
                        position = vector3,
                        rotation = obj,
                        scale    = obj1
                    };
                    int num1 = -Mathf.RoundToInt(vector3.Magnitude2D());
                    if (num1 > num)
                    {
                        num       = num1;
                        spawnInfo = spawnInfo1;
                    }
                }
            }
        }
        if (num != -2147483648)
        {
            Prefab     prefab1    = spawnInfo.prefab;
            Vector3    vector31   = spawnInfo.position;
            Quaternion quaternion = spawnInfo.rotation;
            Vector3    vector32   = spawnInfo.scale;
            prefab1.ApplyTerrainPlacements(vector31, quaternion, vector32);
            prefab1.ApplyTerrainModifiers(vector31, quaternion, vector32);
            World.AddPrefab("Monument", prefab1.ID, vector31, quaternion, vector32);
        }
    }