Ejemplo n.º 1
0
    public void UpdateChunk(int index)
    {
        BlockTerrain.ChunkStatics statics = Terrain.chunkStats.Get(index);

        if (statics.needsToBeCreated && !statics.needsToBeDestroyed)
        {
            BlockTerrain.Chunk chunk = Terrain.GetChunk(index);
            InstantiateChunk(chunk);
            //if (chunk.XminusOne != null && chunk.XminusOne.Statics(Terrain).IsNormal)
            //{
            //    QuqueChunkUpdate(chunk.XminusOne.index, 3);
            //}
            //if (chunk.XplusOne != null && chunk.XplusOne.Statics(Terrain).IsNormal)
            //{
            //    QuqueChunkUpdate(chunk.XplusOne.index, 3);
            //}
            //if (chunk.YminusOne != null && chunk.YminusOne.Statics(Terrain).IsNormal)
            //{
            //    QuqueChunkUpdate(chunk.YminusOne.index, 3);
            //}
            //if (chunk.YplusOne != null && chunk.YplusOne.Statics(Terrain).IsNormal)
            //{
            //    QuqueChunkUpdate(chunk.YplusOne.index, 3);
            //}
            statics.needsToBeCreated = false;
        }
        else if (statics.needsToBeDestroyed)
        {
            chunkRenderer.RemoveChunk(index);
            //chunkInstanceManager.UnloadChunkInstance(Terrain.chunkInstances[index]);
            statics.needsToBeDestroyed = false;
        }

        ChunkInstance instance;

        switch (statics.state)
        {
        case 3:
            instance = Terrain.chunkInstances[index];
            instance.UpdateMesh(0);
            instance.UpdateMesh(1);
            //chunkInstanceManager.UpdateChunkInstance(instance);
            break;

        case 1:
            instance = Terrain.chunkInstances[index];
            instance.UpdateMesh(0);
            //chunkInstanceManager.UpdateChunkInstance(instance);
            break;

        case 2:
            instance = Terrain.chunkInstances[index];
            instance.UpdateMesh(1);
            //chunkInstanceManager.UpdateChunkInstance(instance);
            break;
        }

        statics.state = 0;
    }
Ejemplo n.º 2
0
    public void ChangeCell(int x, int y, int z, int newValue)
    {
        int index = Terrain.GetChunkIndex(x >> 4, z >> 4);

        BlockTerrain.Chunk        c     = Terrain.GetChunk(index);
        BlockTerrain.ChunkStatics state = Terrain.chunkStats.Get(index);
        if (c != null)
        {
            int cx = x & 15;
            int cz = z & 15;

            int content = c.GetCellContent(cx, y, cz);
            if (content != 0)
            {
                state.state = 3;
            }
            content = BlockTerrain.GetContent(newValue);
            if (content != 0)
            {
                state.state = 3;
            }
            c.SetCellValue(cx, y, cz, newValue);
            c.isEdited = true;
            if (cx == 0 && c.XminusOne != null)
            {
                QuqueChunkUpdate(c.XminusOne.index, 3);
            }
            else if (cx == 15 && c.XplusOne != null)
            {
                QuqueChunkUpdate(c.XplusOne.index, 3);
            }
            if (cz == 0 && c.YminusOne != null)
            {
                QuqueChunkUpdate(c.YminusOne.index, 3);
            }
            else if (cz == 15 && c.YplusOne != null)
            {
                QuqueChunkUpdate(c.YplusOne.index, 3);
            }
            QuqueChunkUpdate(c.index);
        }
    }