/** * Generate map terrain */ public void GenerateTerrain(LatLngObject mapMiddleMapPoint, Transform cameraTransform) { Vector3 mapMiddlePoint; //todo refactorovat tuhle podminku obecne u vsech middle pointu if (mapMiddleMapPoint.Equals(new LatLngObject())) { mapMiddlePoint = Vector3.zero; UiUtils.SetDefaultCameraPos(mapMiddlePoint, cameraTransform); } else { mapMiddlePoint = Converter.ConvertLatLngToXyz(mapMiddleMapPoint); } //create underground CreateUnderground(mapMiddlePoint); //create terrain var terrainGameObject = new GameObject("TerrainObj"); terrainGameObject.AddComponent <Terrain>(); terrainGameObject.AddComponent <TerrainCollider>(); Terrain = terrainGameObject.GetComponent <Terrain>(); var terrainData = new TerrainData { heightmapResolution = TerrainUtils.MapWidth, size = new Vector3(TerrainUtils.MapWidth, TerrainUtils.MapTopValue, TerrainUtils.MapHeight) }; //load default or elevationAPI terrain float[,] heightsData = Main.Settings.TerrainToggle ? ConvertHeights() : GenerateHeightDemo(); terrainData.SetHeights(0, 0, heightsData); Terrain.terrainData = terrainData; //odkomentovat jen, pokud je vyska terenu vetsi nez 0 // terrainGameObject.GetComponent<TerrainCollider>().terrainData = terrainData; Terrain.materialType = Terrain.MaterialType.BuiltInLegacyDiffuse; AddTexture(Terrain.terrainData, Resources.Load <Texture2D>("Textures/grass_texture")); mapMiddlePoint.x -= TerrainUtils.MapWidth / 2; mapMiddlePoint.y = -0.01f; mapMiddlePoint.z -= TerrainUtils.MapHeight / 2; terrainGameObject.transform.position = mapMiddlePoint; }
/** * Create trees on the terrain */ public void GenerateTrees(LatLngObject middleMapPoint, List <TreeObject> trees) { Vector3 middleMapXyz; ConiferousTree = Resources.Load("3DObjects/Trees/Prefabs/Fir_Tree", typeof(GameObject)) as GameObject; LeafyTree = Resources.Load("3DObjects/Trees/Prefabs/Poplar_Tree", typeof(GameObject)) as GameObject; //default position, if map does not contain any building or road if (middleMapPoint.Equals(new LatLngObject())) { middleMapXyz = Vector3.zero; } else { middleMapXyz = Converter.ConvertLatLngToXyz(middleMapPoint); } var treeCount = Main.Settings.NumberOfTrees; const float treeScale = 0.06f; var terrain = TerrainRender.Get().Terrain; var random = new Random(); //GENERATE RANDOM TREE POSITIONS if (trees.Count == 0) { for (var i = 0; i < treeCount; i++) { var decimalRandomPartX = random.NextDouble(); var decimalRandomPartZ = random.NextDouble(); const int limitX = (TerrainUtils.MapWidth / 2) - 2; const int limitZ = (TerrainUtils.MapHeight / 2) - 2; var randomX = random.Next((int)(middleMapXyz.x - limitX), (int)(middleMapXyz.x + limitX)); // + 2 a + 1 kvuli korekcim umisteni na hranice terenu var randomZ = random.Next((int)(middleMapXyz.z - limitZ + 2), (int)(middleMapXyz.z + limitZ + 1)); var randomDecX = (float)(randomX + decimalRandomPartX); var randomDecZ = (float)(randomZ + decimalRandomPartZ); var randomPos = new Vector3(randomDecX, 0, randomDecZ); var terrainY = terrain.SampleHeight(randomPos); randomPos.y = terrainY; var randNumberTree = random.Next(0, 2); if (!IsPointInCollision(randomPos)) { GameObject tree; switch (randNumberTree) { case 0: tree = Instantiate(LeafyTree); break; default: tree = Instantiate(ConiferousTree); break; } var treeTransform = tree.transform; treeTransform.position = randomPos; treeTransform.localScale = new Vector3(treeScale, treeScale, treeScale); } else { --i; } } } //CUSTOM TREE POSITIONS else { foreach (var currentTree in trees) { var treePos = Converter.ConvertLatLngToXyz(currentTree.LatLngCoordinate); //if tree is outside the map if (TerrainUtils.IsObjectOutsideMap(treePos, middleMapXyz)) { continue; } //set y position from terrain var terrainY = terrain.SampleHeight(treePos); treePos.y = terrainY; var randNumberTree = random.Next(0, 2); GameObject tree; switch (randNumberTree) { case 0: tree = Instantiate(LeafyTree); break; default: tree = Instantiate(ConiferousTree); break; } var treeTransform = tree.transform; treeTransform.position = treePos; treeTransform.localScale = new Vector3(treeScale, treeScale, treeScale); } } }