public ChunkLod(TerrainChunkData data) { _chunkDataProcessor = new TerrainChunkDataProcessor(data); _chunkX = Mathf.FloorToInt(data.Position.x / Consts.UnitSize); _chunkZ = Mathf.FloorToInt(data.Position.z / Consts.UnitSize); _currentNeighbors = new int [] { -1, -1, -1, -1 }; }
public TerrainChunk(TerrainChunkData data, Transform parent) { data.IsSeaBed = data.HeigthData.IsSeaBed(); _terrainVisualizer = (new GameObject(string.Format("TC_{0}_{1}", data.Origin.X, data.Origin.Z))).AddComponent <TerrainVisualizer>(); _terrainVisualizer.transform.SetParent(parent); _terrainVisualizer.transform.position = data.Position; }
private void CreateAndUpdateChunk(int i, int j, TerrainChunkData data) { _terrainChunks[i][j] = new TerrainChunk(data, transform); _chunksLods[i][j] = new ChunkLod(data); _chunksLods[i][j].IsThereNewData(0, 0); _chunkMeshDatas[i][j] = _chunksLods[i][j].GetNewData(); _terrainChunks[i][j].UpdateChunk(_chunkMeshDatas[i][j]); }
public TerrainChunkData GetData() { TerrainChunkData d = new TerrainChunkData(); d.height = terrainData.GetHeight(); d.position = StaticMaths.ThreeDTo2D(center, StaticMaths.EPlane.E_XZ); d.smoothness = terrainData.GetSmoothness(); return(d); }
IEnumerator BuilWorldMesh() { var w = ServiceLocator.I.TerrainData.GetMapSize() - 1; var u = (Consts.UnitDataSize - 1); var unitsNumber = Mathf.CeilToInt((float)w / u) + 1; var bounds = Mathf.FloorToInt((u * unitsNumber - w) / 2.0f); var middle = (unitsNumber * Consts.UnitSize) / 2.0f; _chunksLods = new ChunkLod[unitsNumber][]; _terrainChunks = new TerrainChunk[unitsNumber][]; _chunkMeshDatas = new TerrainChunkMeshData[unitsNumber][]; for (int i = 0; i < unitsNumber; i++) { _chunksLods[i] = new ChunkLod[unitsNumber]; _terrainChunks[i] = new TerrainChunk[unitsNumber]; _chunkMeshDatas[i] = new TerrainChunkMeshData[unitsNumber]; for (int j = 0; j < unitsNumber; j++) { var data = new TerrainChunkData() { HeigthData = ServiceLocator.I.TerrainData.GetBaseData(i, j, Consts.UnitDataSize, bounds), Origin = new Int2(i * (Consts.UnitDataSize - 1) - bounds, j * (Consts.UnitDataSize - 1) - bounds), MaxHeight = Consts.MaxHight, UnitSize = Consts.UnitSize, Position = new Vector3(((i - 1) * Consts.UnitSize) - middle, 0, ((j - 1) * Consts.UnitSize) - middle) }; CreateAndUpdateChunk(i, j, data); } yield return(null); } ServiceLocator.I.EventsHolder.CameraPositionChangedEvent += OnCameraPositionChangedEvent; _isUpdateTaskActive = true; var t = new Thread(UpdateTask) { Priority = ThreadPriority.Normal }; t.Start(); }
public TerrainChunkDataProcessor(TerrainChunkData data) { _chunkData = data; _сhunkSize = Consts.UnitSize; _maxDataLod = (int)Mathf.Log(HeigthData.GetLength(0) - 1, 2.0f); }