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); }
public GroundConditions(TerrainSplat.Enum layer) { Layer = layer; Weight = new float[TerrainSplat.COUNT]; CheckLayer = new bool[TerrainSplat.COUNT]; }