Esempio n. 1
0
    public void GenerateChunk(Vector2i _generateKey)
    {
        //Debug.Log("" + " Start in Thread " + _generateKey);
        if (GeneratedChunksMap.Count > 0 && !HasNighbour(_generateKey))
        {
            //Debug.Log("Chunk isn´t at startpoint and has no neighbours" + _generateKey);
            // Que this thread again
            Thread t = new Thread(() => GenerateChunk(_generateKey));
            t.IsBackground = true;
            threads.Add(t);
            t.Name         = _generateKey + "Thread";
            isThreadActive = false;
            return;
        }
        BezierChunk existTest;

        GeneratedChunksMap.TryGetValue(_generateKey, out existTest);
        if (existTest != null)
        {
            existTest.RebuildChunk();
        }
        else
        {
            // create new empty chunk
            BezierChunk toGenerate = new BezierChunk();
            toGenerate.Resolution = Resolution;
            toGenerate.Seed       = StartSeed + _generateKey.GetHashCode();
            //Debug.Log(toGenerate.Seed);
            toGenerate.Steepness     = Steepness;
            toGenerate.MaxOverhang   = MaxOverhang;
            toGenerate.OverhangRatio = OverhangRatio;
            toGenerate.PatchAmount   = Patchamount;
            toGenerate.Positionkey   = _generateKey;
            toGenerate.GenRef        = GenRef;
            // link neighbours
            BezierChunk tempLeft;
            BezierChunk tempRight;
            BezierChunk tempTop;
            BezierChunk tempBot;
            GeneratedChunksMap.TryGetValue(GetNeighbourKeyLeft(_generateKey), out tempLeft);
            GeneratedChunksMap.TryGetValue(GetNeighbourKeyRight(_generateKey), out tempRight);
            GeneratedChunksMap.TryGetValue(GetNeighbourKeyTop(_generateKey), out tempTop);
            GeneratedChunksMap.TryGetValue(GetNeighbourKeyBot(_generateKey), out tempBot);
            toGenerate.Left  = tempLeft;
            toGenerate.Right = tempRight;
            toGenerate.Up    = tempTop;
            toGenerate.Down  = tempBot;
            // Assign the noise and generates it
            toGenerate.AssignNoise();
            toGenerate.AverageMidPoint = toGenerate.ChunkNoise.AverageMidPoint;
            // let the chunk actually calculate
            toGenerate.AssignPatches();
            // give this chunk free to make the mesh from the noise
            //Thread.Sleep(5000);
            ChunkMeshToGeneration.Add(toGenerate);
            //Debug.Log("Thread finished with generation of " + _generateKey);
        }
    }
Esempio n. 2
0
 public void GenerateMeshs(int ChunkGenerationDistance)
 {
     for (int i = ChunkMeshToGeneration.Count - 1; i >= 0; i--)
     {
         BezierChunk toGenerate = ChunkMeshToGeneration[i];
         Vector2i    _genKey    = toGenerate.Positionkey;
         toGenerate.CalculateMetaMesh();
         // Instantiate the Chunk in Unity
         toGenerate.InstantiateThisChunk();
         // add the chunk to the map
         GeneratedChunksMap.Add(_genKey, toGenerate);
         // update the noise of the chunkneighbours
         UpdateNeighbours(_genKey);
         // delete the created chunk out of the list of chunks which are in creation
         ChunkMeshToGeneration.RemoveAt(i);
         ChunksInGeneration.Remove(_genKey);
         //Debug.Log(_genKey + " generated");
         isThreadActive = false;
     }
     if (ChunkMeshToGeneration.Count == 0)
     {
         UpdateChunksToGenerate(ChunkGenerationDistance);
     }
 }