Exemple #1
0
    public static MapInfo EmptyMap(int size, float landHeight, TerrainSplat.Enum ground = TerrainSplat.Enum.Grass, TerrainBiome.Enum biome = TerrainBiome.Enum.Temperate)
    {
        MapInfo terrains = new MapInfo();

        int splatRes = Mathf.Clamp(Mathf.NextPowerOfTwo((int)(size * 0.50f)), 512, 2048);

        List <PathData>   paths   = new List <PathData>();
        List <PrefabData> prefabs = new List <PrefabData>();

        terrains.pathData   = paths.ToArray();
        terrains.prefabData = prefabs.ToArray();

        terrains.terrainRes = Mathf.Clamp(Mathf.NextPowerOfTwo(size), 512, 4096) + 1;
        terrains.size       = new Vector3(size, 1000, size);

        terrains.land.heights  = SetValues(new float[terrains.terrainRes, terrains.terrainRes], landHeight / 1000f, new Area(0, terrains.terrainRes, 0, terrains.terrainRes));
        terrains.water.heights = SetValues(new float[terrains.terrainRes, terrains.terrainRes], 500f / 1000f, new Area(0, terrains.terrainRes, 0, terrains.terrainRes));

        terrains.splatRes = splatRes;
        terrains.splatMap = new float[splatRes, splatRes, 8];
        int gndIdx = TerrainSplat.TypeToIndex((int)ground);

        Parallel.For(0, splatRes, i =>
        {
            for (int j = 0; j < splatRes; j++)
            {
                terrains.splatMap[i, j, gndIdx] = 1f;
            }
        });

        terrains.biomeMap = new float[splatRes, splatRes, 4];
        int biomeIdx = TerrainBiome.TypeToIndex((int)biome);

        Parallel.For(0, splatRes, i =>
        {
            for (int j = 0; j < splatRes; j++)
            {
                terrains.biomeMap[i, j, biomeIdx] = 1f;
            }
        });

        terrains.alphaMap = new bool[splatRes, splatRes];
        Parallel.For(0, splatRes, i =>
        {
            for (int j = 0; j < splatRes; j++)
            {
                terrains.alphaMap[i, j] = true;
            }
        });
        terrains.topology = new TerrainMap <int>(new byte[(int)Mathf.Pow(splatRes, 2) * 4 * 1], 1);
        return(terrains);
    }
    public static float WorkoutGroundConditions(Vector3 pos)
    {
        if (WaterLevel.Test(pos))
        {
            return(-1f);
        }
        TerrainSplat.Enum splatMaxType = (TerrainSplat.Enum)TerrainMeta.SplatMap.GetSplatMaxType(pos, -1);
        if (splatMaxType <= 16)
        {
            switch (splatMaxType - 1)
            {
            case 0:
                return(0.5f);

            case 1:
                return(-1f);

            case 2:
                break;

            case 3:
                return(-0.3f);

            default:
                if (splatMaxType == 8)
                {
                    return(-0.7f);
                }
                if (splatMaxType == 16)
                {
                    return(0.5f);
                }
                break;
            }
        }
        else
        {
            if (splatMaxType == 32)
            {
                return(0.4f);
            }
            if (splatMaxType == 64 || splatMaxType == 128)
            {
                return(-0.6f);
            }
        }
        return(0.5f);
    }
    public static float WorkoutGroundConditions(Vector3 pos)
    {
        if (WaterLevel.Test(pos))
        {
            return(-1f);
        }
        TerrainSplat.Enum splatMaxType = (TerrainSplat.Enum)TerrainMeta.SplatMap.GetSplatMaxType(pos, -1);
        if (splatMaxType > TerrainSplat.Enum.Grass)
        {
            if (splatMaxType == TerrainSplat.Enum.Forest)
            {
                return(0.4f);
            }
            if (splatMaxType == TerrainSplat.Enum.Stones)
            {
                return(-0.6f);
            }
            if (splatMaxType == TerrainSplat.Enum.Gravel)
            {
                return(-0.6f);
            }
        }
        else
        {
            switch (splatMaxType)
            {
            case TerrainSplat.Enum.Dirt:
            {
                return(0.5f);
            }

            case TerrainSplat.Enum.Snow:
            {
                return(-1f);
            }

            case TerrainSplat.Enum.Dirt | TerrainSplat.Enum.Snow:
            {
                break;
            }

            case TerrainSplat.Enum.Sand:
            {
                return(-0.3f);
            }

            default:
            {
                if (splatMaxType == TerrainSplat.Enum.Rock)
                {
                    return(-0.7f);
                }
                if (splatMaxType == TerrainSplat.Enum.Grass)
                {
                    return(0.5f);
                }
                break;
            }
            }
        }
        return(0.5f);
    }
Exemple #4
0
 public GroundConditions(TerrainSplat.Enum layer)
 {
     Layer      = layer;
     Weight     = new float[TerrainSplat.COUNT];
     CheckLayer = new bool[TerrainSplat.COUNT];
 }