Beispiel #1
0
    private void TerrainDataCalculateThread(Action <float[, , ]> callback)
    {
        float[,] heightmap   = GenerateHeightMap();
        float[,,] densitymap = GenerateDensityMap(heightmap);

        TerrainThreadInfo threadInfo = new TerrainThreadInfo(callback, densitymap);

        lock (ChunkManager.Instance.terrainThreadInfoQueue)
        {
            ChunkManager.Instance.terrainThreadInfoQueue.Enqueue(threadInfo);
        }
    }
    private void Update()
    {
        if (terrainThreadInfoQueue.Count > 0)
        {
            for (int i = 0; i < terrainThreadInfoQueue.Count; i++)
            {
                TerrainThreadInfo threadInfo = terrainThreadInfoQueue.Dequeue();
                threadInfo.callback(threadInfo.calculatedInfo);
            }
        }

        currentPos = GetChunkAtPosition(GameManager.PlayerPosition);
        if (!currentPos.Equals(prevPos))
        {
            prevPos = currentPos;
            UpdateTerrain(currentPos, renderDistance);
        }
    }
    void Update()
    {
        if (terrainThreadInfoQueue.Count > 0)
        {
            for (int i = 0; i < terrainThreadInfoQueue.Count; i++)
            {
                TerrainThreadInfo <Terrain> threadInfo = terrainThreadInfoQueue.Dequeue();
                threadInfo.callback.Invoke(threadInfo.parameter);
            }
        }

        if (meshDataThreadInfoQueue.Count > 0)
        {
            for (int i = 0; i < meshDataThreadInfoQueue.Count; i++)
            {
                TerrainThreadInfo <MeshData> threadInfo = meshDataThreadInfoQueue.Dequeue();
                threadInfo.callback.Invoke(threadInfo.parameter);
            }
        }
    }