Ejemplo n.º 1
0
    public List <GameObject> SetBlock(Vector3 Pnt, BlockClass B)
    {
        var Affected = new List <GameObject>();
        var PS       = BlockProperties.GetPosition(Pnt);
        var BlockPos = PS.BlockInChunk;

        //Test that block is contained in Block
        if ((BlockPos.x >= 0) & (BlockPos.y >= 0) & (BlockPos.z >= 0) & (BlockPos.x < BlockProperties.ChunkSize) &
            (BlockPos.y < BlockProperties.ChunkSize) &
            (BlockPos.z < BlockProperties.ChunkSize))
        {
            GameObject tempChunk;
            if (Chunks.TryGetValue(PS.ChunkInWorld, out tempChunk))
            {
                tempChunk.GetComponent <ChunkObject>().Blocks[BlockPos.x + 1][BlockPos.y + 1][BlockPos.z + 1] = B;
                Affected.Add(tempChunk);
                var ChunkOffset = new Vector3Int();
                if (BlockPos.x == 0)
                {
                    ChunkOffset.x--;
                }
                if (BlockPos.y == 0)
                {
                    ChunkOffset.y--;
                }
                if (BlockPos.z == 0)
                {
                    ChunkOffset.z--;
                }
                if (BlockPos.x == BlockProperties.ChunkSize - 1)
                {
                    ChunkOffset.x++;
                }
                if (BlockPos.y == BlockProperties.ChunkSize - 1)
                {
                    ChunkOffset.y++;
                }
                if (BlockPos.z == BlockProperties.ChunkSize - 1)
                {
                    ChunkOffset.z++;
                }
                if (ChunkOffset.x != 0)
                {
                    if (Chunks.TryGetValue(PS.ChunkInWorld + new Vector3Int(ChunkOffset.x * 16, 0, 0), out tempChunk))
                    {
                        tempChunk.GetComponent <ChunkObject>()
                        .Blocks[BlockPos.x + 1 - ChunkOffset.x * BlockProperties.ChunkSize][
                            BlockPos.y + 1][BlockPos.z + 1] = B;
                        Affected.Add(tempChunk);
                    }
                }

                if (ChunkOffset.y != 0)
                {
                    if (Chunks.TryGetValue(PS.ChunkInWorld + new Vector3Int(0, ChunkOffset.y * 16, 0), out tempChunk))
                    {
                        tempChunk.GetComponent <ChunkObject>().Blocks[BlockPos.x + 1][
                            BlockPos.y + 1 - ChunkOffset.y * BlockProperties.ChunkSize][BlockPos.z + 1] = B;
                        Affected.Add(tempChunk);
                    }
                }

                if (ChunkOffset.z != 0)
                {
                    if (Chunks.TryGetValue(PS.ChunkInWorld + new Vector3Int(0, 0, ChunkOffset.z * 16), out tempChunk))
                    {
                        tempChunk.GetComponent <ChunkObject>().Blocks[BlockPos.x + 1][BlockPos.y + 1][
                            BlockPos.z + 1 - ChunkOffset.z * BlockProperties.ChunkSize] = B;
                        Affected.Add(tempChunk);
                    }
                }

                if ((ChunkOffset.x != 0) & (ChunkOffset.y != 0))
                {
                    if (Chunks.TryGetValue(PS.ChunkInWorld + new Vector3Int(ChunkOffset.x * 16, ChunkOffset.y * 16, 0),
                                           out tempChunk))
                    {
                        tempChunk.GetComponent <ChunkObject>()
                        .Blocks[BlockPos.x + 1 - ChunkOffset.x * BlockProperties.ChunkSize][
                            BlockPos.y + 1 - ChunkOffset.y * BlockProperties.ChunkSize][BlockPos.z + 1] = B;
                        Affected.Add(tempChunk);
                    }
                }

                if ((ChunkOffset.x != 0) & (ChunkOffset.z != 0))
                {
                    if (Chunks.TryGetValue(PS.ChunkInWorld + new Vector3Int(ChunkOffset.x * 16, 0, ChunkOffset.z * 16),
                                           out tempChunk))
                    {
                        tempChunk.GetComponent <ChunkObject>()
                        .Blocks[BlockPos.x + 1 - ChunkOffset.x * BlockProperties.ChunkSize]
                        [BlockPos.y + 1][BlockPos.z + 1 - ChunkOffset.z * BlockProperties.ChunkSize] = B;
                        Affected.Add(tempChunk);
                    }
                }

                if ((ChunkOffset.y != 0) & (ChunkOffset.z != 0))
                {
                    if (Chunks.TryGetValue(PS.ChunkInWorld + new Vector3Int(0, ChunkOffset.y * 16, ChunkOffset.z * 16),
                                           out tempChunk))
                    {
                        tempChunk.GetComponent <ChunkObject>().Blocks[BlockPos.x + 1][
                            BlockPos.y + 1 - ChunkOffset.y * BlockProperties.ChunkSize][
                            BlockPos.z + 1 - ChunkOffset.z * BlockProperties.ChunkSize]
                            = B;
                        Affected.Add(tempChunk);
                    }
                }

                if ((ChunkOffset.x != 0) & (ChunkOffset.y != 0) & (ChunkOffset.z != 0))
                {
                    if (Chunks.TryGetValue(
                            PS.ChunkInWorld + new Vector3Int(ChunkOffset.x * 16, ChunkOffset.y * 16, ChunkOffset.z * 16),
                            out tempChunk))
                    {
                        tempChunk.GetComponent <ChunkObject>()
                        .Blocks[BlockPos.x + 1 - ChunkOffset.x * BlockProperties.ChunkSize][
                            BlockPos.y + 1 - ChunkOffset.y * BlockProperties.ChunkSize][
                            BlockPos.z + 1 - ChunkOffset.z * BlockProperties.ChunkSize]
                            = B;
                        Affected.Add(tempChunk);
                    }
                }
            }
        }

        return(Affected);
    }