void Start()
    {
        _chunkNames = new List <string>();
        Map         = new GameObject();
        Detectors   = GameObject.FindGameObjectsWithTag("Detector");
        var player = GameObject.FindGameObjectWithTag("Player").transform;

        InitializeChunk(ChunkGen.GenerateChunk(), (int)(player.position.x / ChunkGen.ChunkWidth), (int)(player.position.y / ChunkGen.ChunkHeight));
        ClearSpawn();
    }
    /// <summary>
    /// Iterates all chunk coordinates in the region.
    /// Checks if <see cref="PreGeneratedChunks"/> contains one of these chunks.
    /// If it does, we set the chunk based on the settlement chunk.
    /// If not, we generate the chunk via <see cref="ChunkGenerator.GenerateChunk(int, int)"/>
    /// </summary>
    /// <param name="rx"></param>
    /// <param name="rz"></param>
    /// <returns></returns>
    public ChunkRegion GenerateRegion(int rx, int rz)
    {
        //Define array for all chunks
        ChunkData[,] regionChunks = new ChunkData[World.RegionSize, World.RegionSize];
        //Iterate all chunks in region
        for (int cx = 0; cx < World.RegionSize; cx++)
        {
            for (int cz = 0; cz < World.RegionSize; cz++)
            {
                //Define chunk coordinate
                Vec2i chunkCoord = new Vec2i(rx * World.RegionSize + cx, rz * World.RegionSize + cz);

                //Check if this chunk is a settlement chunk, if it is, set it as such
                if (PreGeneratedChunks.ContainsKey(chunkCoord))
                {
                    regionChunks[cx, cz] = PreGeneratedChunks[chunkCoord];
                }
                else
                {
                    //otherwise, generate the chunk via
                    regionChunks[cx, cz] = ChunkGenerator.GenerateChunk(rx * World.RegionSize + cx, rz * World.RegionSize + cz);
                }
            }
        }
        return(new ChunkRegion(rx, rz, regionChunks));
    }
示例#3
0
 void GenerateWorld()
 {
     for (int y = 0; y < ServerConstants.TerrainGeneration.WORLD_SIZE; y++)
     {
         for (int x = 0; x < ServerConstants.TerrainGeneration.WORLD_SIZE; x++)
         {
             _chunks.Add(new Vector2DInt(x, y), chunkGenerator.GenerateChunk(new Vector2DInt(x, y)));
         }
     }
 }
 public void OnUpdate()
 {
     if (IsChunkToSpawn())
     {
         chunkGenerator.GenerateChunk(setOfChunks, visibleChunks, player.currentChunk, player.transform.position, camer.rangeCamera);
     }
     if (biomeGridGenerator.IsIncreaseGrid(Vector2.Distance(player.transform.position, Vector3.zero)))
     {
         biomeGridGenerator.GenerateGridEdges();
     }
 }
示例#5
0
    private void Test()
    {
        Noise.Seed = ++Noise.Seed;

        for (int x = 0; x < 6; x++)
        {
            for (int z = 0; z < 6; z++)
            {
                Generator.GenerateChunk(new Vector2(x, z));
            }
        }
    }
示例#6
0
    // Creates a chunk for the first time on it's position
    private IEnumerator CreateChunk(Vector3 chunkPos)
    {
        ChunkGenerator newChunk = Instantiate(chunkGeneratorPrefab, chunkPos, Quaternion.identity, transform);

        newChunk.UpdateName();
        if (!chunkTable.ContainsKey(chunkPos))
        {
            chunkTable.Add(chunkPos, newChunk);
            newChunk.SetChunkSetup();
            newChunk.SetBoxCollider();
            yield return(newChunk.GenerateChunk(GetPerlinOffset(newChunk.transform.position)));
        }
    }
    /* Base */
    void Start()
    {
        _chunkGenerator = new ChunkGenerator(this);

        int chunkSize = worldGenData.chunkSize;

        for (int i = 0; i < 9; i++)
        {
            Chunk newChunk = _chunkGenerator.GenerateChunk();

            switch (i)
            {
            case 0:
                newChunk.gameObject.transform.position = new Vector3(-chunkSize, chunkSize, 0);
                break;

            case 1:
                newChunk.gameObject.transform.position = new Vector3(0, chunkSize, 0);
                break;

            case 2:
                newChunk.gameObject.transform.position = new Vector3(chunkSize, chunkSize, 0);
                break;

            case 3:
                newChunk.gameObject.transform.position = new Vector3(-chunkSize, 0, 0);
                break;

            case 4:
                newChunk.gameObject.transform.position = new Vector3(0, 0, 0);
                break;

            case 5:
                newChunk.gameObject.transform.position = new Vector3(chunkSize, 0, 0);
                break;

            case 6:
                newChunk.gameObject.transform.position = new Vector3(-chunkSize, -chunkSize, 0);
                break;

            case 7:
                newChunk.gameObject.transform.position = new Vector3(0, -chunkSize, 0);
                break;

            case 8:
                newChunk.gameObject.transform.position = new Vector3(chunkSize, -chunkSize, 0);
                break;
            }
        }
    }
示例#8
0
    IEnumerator GenerateChunks()
    {
        _isGeneratingChunks = true;

        while (_chunksToGenerate.Count > 0)
        {
            Vector2 newChunkCoord = _chunksToGenerate[0];

            _worldChunks.Add(newChunkCoord, _chunkGenerator.GenerateChunk(newChunkCoord, material));

            _chunksToGenerate.RemoveAt(0);
        }

        _isGeneratingChunks = false;
        yield return(null);
    }
示例#9
0
        /// <summary>
        /// Creates a chunk at the given position.
        /// </summary>
        /// <param name="position">The world coordinates.</param>
        public void CreateChunk(WorldPosition position)
        {
            var newChunkObject = UnityEngine.Object.Instantiate(
                World.chunkPrefab,
                new Vector3(position.X, position.Y, position.Z),
                Quaternion.Euler(Vector3.zero)) as GameObject;
            var newChunk = newChunkObject.GetComponent <Chunk>();

            newChunk.Position = position;
            newChunk.World    = this;
            this.Chunks.Add(position, newChunk);
            var terrainGenerator = new ChunkGenerator();

            terrainGenerator.GenerateChunk(newChunk);
            newChunk.SetBlocksUnmodified();
            WorldRepository.LoadChunk(newChunk);
        }
示例#10
0
    /* Internal methods */
    private IEnumerator GenerateChunks()
    {
        _isGeneratingChunks = true;


        while (_chunksToGenerateCoordsQueue.Count > 0)
        {
            _worldChunks.Add(_chunksToGenerateCoordsQueue[0], _chunkGenerator.GenerateChunk(_chunksToGenerateCoordsQueue[0]));

            _chunksToGenerateCoordsQueue.RemoveAt(0);

            yield return(null);
        }

        yield return(null);

        _isGeneratingChunks = false;
    }
示例#11
0
        public void ManualUpdate()
        {
            while (_chunksToDelete.Count > 0)
            {
                Destroy(_chunks[_chunksToDelete[0]].viewGO);

                _chunks.Remove(_chunksToDelete[0]);

                _chunksToDelete.RemoveAt(0);
            }

            while (_chunksToGenerate.Count > 0)
            {
                Vector2DInt newChunkPosition = _chunksToGenerate[0];

                _chunks.Add(newChunkPosition, chunkGenerator.GenerateChunk(newChunkPosition));

                _chunksToGenerate.RemoveAt(0);
            }
        }
示例#12
0
    // Networking
    public void UnpackFrom(NetIncomingMessage inMsg)
    {
        // Get the world data from the server
        uint inChunkSize = inMsg.ReadVariableUInt32();   // Chunk size

        uint numParameters = inMsg.ReadVariableUInt32(); // Number of parameters

        _data.parameters = new Noise.Parameters[numParameters];

        for (int i = 0; i < numParameters; i++)          // Parameters
        {
            _data.parameters[i].UnpackFrom(inMsg);
        }


        // Create the chunkgenerator now that the world variables have been recieved
        chunkGenerator = new ChunkGenerator(inChunkSize, _data.parameters, this);

        // DEBUG Generate a chunk in the middle as a test
        _worldChunks.Add(new Vector2DI(0, 0), chunkGenerator.GenerateChunk(new Vector2DI(0, 0)));
    }
示例#13
0
    private void GenerateMap()
    {
        for (int i = 0; i < mapSizeInChunks; i++)
        {
            for (int j = 0; j < mapSizeInChunks; j++)
            {
                int            chunkSize      = ChunkGenerator.chunkSize;
                Vector3        chunkPosition  = new Vector3(i * chunkSize, 0, j * chunkSize);
                ChunkGenerator chunkGenerator = Instantiate(
                    chunkPrefab,
                    chunkPosition,
                    Quaternion.identity)
                                                .GetComponent <ChunkGenerator>();

                chunkGenerator.frequencyScale   = this.frequencyScale;
                chunkGenerator.heightMultiplier = this.heightMultiplier;
                chunkGenerator.numberOfOctaves  = this.numberOfOctaves;
                chunkGenerator.lacunarity       = this.lacunarity;
                chunkGenerator.persistence      = this.persistence;
                chunkGenerator.GenerateChunk(new Vector2(chunkPosition.x, chunkPosition.z));
                chunkGOs.Add(chunkGenerator.gameObject);
            }
        }
    }