Example #1
0
    TerrainChunkObject LoadChunk(ChunkPos cp, bool instant)
    {
        if (chunks.ContainsKey(cp))
        {
            return(chunks[cp]);
        }

        TerrainChunk chunk = TerrainChunkGenerator.request(cp, instant);

        if (chunk == null)
        {
            return(null);
        }

        int                xPos        = cp.x;
        int                zPos        = cp.z;
        GameObject         chunkGO     = Instantiate(terrainChunkPrefab, new Vector3(xPos, 0, zPos), Quaternion.identity);
        TerrainChunkObject chunkObject = chunkGO.GetComponent <TerrainChunkObject>();

        chunkObject.transform.parent = transform;
        chunkObject.name             = "Chunk:" + cp;

        chunkObject.BuildMesh(chunk);

        WaterChunk wat = chunkObject.transform.GetComponentInChildren <WaterChunk>();

        wat.SetLocs(chunk.blocks, chunkObject.Chunk);

        wat.BuildMesh();

        chunks.Add(cp, chunkObject);

        return(chunkObject);
    }
Example #2
0
    public void GenerateBlock(Vector3 position)
    {
        TerrainChunkGenerator currentGenerator = currentChunk.GetComponent <TerrainChunkGenerator>();
        Vector3 adjustedPosition = new Vector3(position.x - currentGenerator.startX,
                                               position.y,
                                               position.z - currentGenerator.startZ);

        currentGenerator.GenerateBlock(adjustedPosition);
    }
Example #3
0
    void LoadChunks(int chunkDist, bool instant = false)
    {
        Vector3 offset = AntiFloatPointOrigin.Instance.offset;
        //the current chunk the player is in
        int curChunkPosX = Mathf.FloorToInt((player.position.x + offset.x) / 16) * 16;
        int curChunkPosZ = Mathf.FloorToInt((player.position.z + offset.z) / 16) * 16;

        Camera camera = player.GetComponentInChildren <Camera>();

        List <ChunkPos> highPri = new List <ChunkPos>();
        List <ChunkPos> lowPri  = new List <ChunkPos>();

        for (int i = curChunkPosX - 16 * chunkDist; i <= curChunkPosX + 16 * chunkDist; i += 16)
        {
            for (int j = curChunkPosZ - 16 * chunkDist; j <= curChunkPosZ + 16 * chunkDist; j += 16)
            {
                ChunkPos cp = new ChunkPos(i, j);
                if (chunks.ContainsKey(cp))
                {
                    continue;
                }

                if (camera != null)
                {
                    var point = camera.WorldToViewportPoint(new Vector3(cp.x, 32, cp.z)) + offset;
                    if (point.z > 0 && point.x >= 0 && point.x <= 1 && point.y >= 0 && point.y <= 1)
                    {
                        highPri.Add(cp);
                    }
                    else
                    {
                        lowPri.Add(cp);
                    }
                }
                else
                {
                    highPri.Add(cp);
                }
            }
        }

        foreach (var cp in highPri)
        {
            if (TerrainChunkGenerator.getRequestSize() < 5 || instant)
            {
                LoadChunk(cp, instant);
            }
        }
        foreach (var cp in lowPri)
        {
            if (TerrainChunkGenerator.getRequestSize() < 5 || instant)
            {
                LoadChunk(cp, instant);
            }
        }
    }
Example #4
0
    public override void OnInspectorGUI()
    {
        TerrainChunkGenerator chunkGenerator = (TerrainChunkGenerator)target;

        base.OnInspectorGUI();

        if (chunkGenerator.animateCubeMarching)
        {
            GUILayout.BeginHorizontal();

            // If the terrain generator is not current generating terrain, show the start button.
            if (!chunkGenerator.generatingTerrain)
            {
                if (GUILayout.Button("Start"))
                {
                    chunkGenerator.StartMarchingCubes();
                }
            }
            else
            {
                if (chunkGenerator.pauseGeneration)
                {
                    if (GUILayout.Button("Resume"))
                    {
                        chunkGenerator.ToggleMarchingCubesPaused(false);
                    }

                    if (GUILayout.Button("Step Forward"))
                    {
                        chunkGenerator.StepMarchingCubes(true);
                    }

                    if (GUILayout.Button("Step Backward"))
                    {
                        chunkGenerator.StepMarchingCubes(false);
                    }
                }
                else
                {
                    if (GUILayout.Button("Pause"))
                    {
                        chunkGenerator.ToggleMarchingCubesPaused(true);
                    }
                }

                if (GUILayout.Button("Reset"))
                {
                    chunkGenerator.ResetMarchingCubes();
                }
            }

            GUILayout.EndHorizontal();
        }
    }
Example #5
0
    // Use this for initialization
    void Start()
    {
        TerrainChunkGenerator chunkGenerator = chunkPrefab.GetComponent <TerrainChunkGenerator>();

        width  = chunkGenerator.width;
        length = chunkGenerator.length;
        rnd    = new System.Random();
        int i = rnd.Next(30, 33);
        int j = rnd.Next(30, 33);

        chest_chunck   = new Vector2();
        chest_chunck.x = i;
        chest_chunck.y = j;
        updateChunks();
    }
 /// <summary>
 /// Initializes a new instance of the TerrainChunkLoader class.
 /// </summary>
 public TerrainChunkLoader()
 {
     this.serializer = new TerrainChunkSerializer();
     this.generator = new TerrainChunkGenerator();
 }
Example #7
0
 // Start is called before the first frame update
 void Start()
 {
     TerrainChunkGenerator.Start();
     LoadChunks(1, true);
 }
Example #8
0
 // Start is called before the first frame update
 private void OnEnable()
 {
     TerrainChunkGenerator.Start();
     LoadChunks(1, true);
 }
 /// <summary>
 /// Initializes a new instance of the TerrainChunkLoader class.
 /// </summary>
 public TerrainChunkLoader()
 {
     this.serializer = new TerrainChunkSerializer();
     this.generator  = new TerrainChunkGenerator();
 }