Exemple #1
0
 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;
 }
Exemple #3
0
 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);
    }
Exemple #5
0
        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();
        }
Exemple #6
0
 public TerrainChunkDataProcessor(TerrainChunkData data)
 {
     _chunkData  = data;
     _сhunkSize  = Consts.UnitSize;
     _maxDataLod = (int)Mathf.Log(HeigthData.GetLength(0) - 1, 2.0f);
 }