Exemplo n.º 1
0
 public void SetMaterialMaps()
 {
     for (var z = Size.Z - 1; z >= 0; z--)
     {
         for (var y = 0; y < Size.Y; y++)
         {
             for (var x = 0; x < Size.X; x++)
             {
                 byte ID = (byte)ChunkMap[z, y, x];
                 if (ID != 0)
                 {
                     SideParams sp = SideParams.GetSideParamsFromBlock(worldResources, IndexInWorldArray, new Vector3(x, y, z));
                     sp.ID       = ID;
                     sp.Position = new Vector3(Position.x + x, Position.y + z, Position.z + y);
                     if (sp.IsFullDisabled() == false)
                     {
                         MaterialMaps[ID - 1].Map.Add(sp);
                     }
                 }
             }
         }
     }
 }
Exemplo n.º 2
0
    public static SideParams GetSideParamsFromBlock(WorldResources worldRes, Point chunkPosInWorldArray, Vector3 blockPos, bool chunkEdges = true)
    {
        ArrayDimensions CMSize = new ArrayDimensions(worldRes.WorldMap[chunkPosInWorldArray.Y, chunkPosInWorldArray.X].ChunkMap.GetLength(0), worldRes.WorldMap[chunkPosInWorldArray.Y, chunkPosInWorldArray.X].ChunkMap.GetLength(1), worldRes.WorldMap[chunkPosInWorldArray.Y, chunkPosInWorldArray.X].ChunkMap.GetLength(2));

        SideParams sp = new SideParams();

        if (blockPos.x - 1 < 0)
        {
            if (chunkPosInWorldArray.X - 1 < 0)
            {
                sp.Left = chunkEdges;
            }
            else
            {
                if (worldRes.WorldMap[(int)chunkPosInWorldArray.Y, (int)chunkPosInWorldArray.X - 1].ChunkMap[(int)blockPos.z, (int)blockPos.y, (int)CMSize.X - 1] == 0)
                {
                    sp.Left = true;
                }
                else
                {
                    sp.Left = false;
                }
            }
        }
        else
        {
            if (worldRes.WorldMap[chunkPosInWorldArray.Y, chunkPosInWorldArray.X].ChunkMap[(int)blockPos.z, (int)blockPos.y, (int)blockPos.x - 1] == 0)
            {
                sp.Left = true;
            }
        }

        if (blockPos.y - 1 < 0)
        {
            if (chunkPosInWorldArray.Y - 1 < 0)
            {
                sp.Backward = chunkEdges; //false
            }
            else
            {
                if (worldRes.WorldMap[(int)chunkPosInWorldArray.Y - 1, (int)chunkPosInWorldArray.X].ChunkMap[(int)blockPos.z, (int)CMSize.Y - 1, (int)blockPos.x] == 0)
                {
                    sp.Backward = true;
                }
                else
                {
                    sp.Backward = false;
                }
            }
        }
        else
        {
            if (worldRes.WorldMap[chunkPosInWorldArray.Y, chunkPosInWorldArray.X].ChunkMap[(int)blockPos.z, (int)blockPos.y - 1, (int)blockPos.x] == 0)
            {
                sp.Backward = true;
            }
        }

        if (blockPos.z - 1 < 0)
        {
            sp.Down = false;
        }
        else
        {
            if (worldRes.WorldMap[chunkPosInWorldArray.Y, chunkPosInWorldArray.X].ChunkMap[(int)blockPos.z - 1, (int)blockPos.y, (int)blockPos.x] == 0)
            {
                sp.Down = true;
            }
        }

        if (blockPos.x + 1 >= CMSize.X)
        {
            if (chunkPosInWorldArray.X + 1 >= worldRes.WorldMap.GetLength(1))
            {
                sp.Right = chunkEdges; // false
            }
            else
            {
                if (worldRes.WorldMap[(int)chunkPosInWorldArray.Y, (int)chunkPosInWorldArray.X + 1].ChunkMap[(int)blockPos.z, (int)blockPos.y, 0] == 0)
                {
                    sp.Right = true;
                }
                else
                {
                    sp.Right = false;
                }
            }
        }
        else
        {
            if (worldRes.WorldMap[chunkPosInWorldArray.Y, chunkPosInWorldArray.X].ChunkMap[(int)blockPos.z, (int)blockPos.y, (int)blockPos.x + 1] == 0)
            {
                sp.Right = true;
            }
        }

        if (blockPos.y + 1 >= CMSize.Y)
        {
            if (chunkPosInWorldArray.Y + 1 >= worldRes.WorldMap.GetLength(0))
            {
                sp.Forward = chunkEdges; // false
            }
            else
            {
                if (worldRes.WorldMap[(int)chunkPosInWorldArray.Y + 1, (int)chunkPosInWorldArray.X].ChunkMap[(int)blockPos.z, 0, (int)blockPos.x] == 0)
                {
                    sp.Forward = true;
                }
                else
                {
                    sp.Forward = false;
                }
            }
        }
        else
        {
            if (worldRes.WorldMap[chunkPosInWorldArray.Y, chunkPosInWorldArray.X].ChunkMap[(int)blockPos.z, (int)blockPos.y + 1, (int)blockPos.x] == 0)
            {
                sp.Forward = true;
            }
        }

        if (blockPos.z + 1 >= CMSize.Z)
        {
            sp.Up = false;
        }
        else
        {
            if (worldRes.WorldMap[chunkPosInWorldArray.Y, chunkPosInWorldArray.X].ChunkMap[(int)blockPos.z + 1, (int)blockPos.y, (int)blockPos.x] == 0)
            {
                sp.Up = true;
            }
        }
        return(sp);
    }