Ejemplo n.º 1
0
        //---------------------------------------------------------------------------

        #endregion

        //---------------------------------------------------------------------------

        #region Private Member Functions

        //---------------------------------------------------------------------------

        private static bool IsFaceVisible(OpenCog.Map.OCMap map, Vector3i nearPos, OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace face)
        {
            if (face == OCCubeBlock.CubeFace.Top)
            {
                OpenCog.Map.OCBlockData block = map.GetBlock(nearPos);
                return(block.IsEmpty() || !block.IsFluid());
            }
            else
            {
                return(map.GetBlock(nearPos).IsEmpty());
            }
        }
Ejemplo n.º 2
0
        public static UnityEngine.Color GetSmoothVertexLight(OpenCog.Map.OCMap map, Vector3i pos, UnityEngine.Vector3 vertex, OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace face)
        {
            // pos - позиция блока
            // vertex позиция вершины относительно блока т.е. от -0.5 до 0.5
            int dx = (int)Mathf.Sign(vertex.x);
            int dy = (int)Mathf.Sign(vertex.y);
            int dz = (int)Mathf.Sign(vertex.z);

            Vector3i a, b, c, d;

            if (face == OCCubeBlock.CubeFace.Left || face == OCCubeBlock.CubeFace.Right)      // X
            {
                a = pos + new Vector3i(dx, 0, 0);
                b = pos + new Vector3i(dx, dy, 0);
                c = pos + new Vector3i(dx, 0, dz);
                d = pos + new Vector3i(dx, dy, dz);
            }
            else
            if (face == OCCubeBlock.CubeFace.Bottom || face == OCCubeBlock.CubeFace.Top)      // Y
            {
                a = pos + new Vector3i(0, dy, 0);
                b = pos + new Vector3i(dx, dy, 0);
                c = pos + new Vector3i(0, dy, dz);
                d = pos + new Vector3i(dx, dy, dz);
            }
            else         // Z
            {
                a = pos + new Vector3i(0, 0, dz);
                b = pos + new Vector3i(dx, 0, dz);
                c = pos + new Vector3i(0, dy, dz);
                d = pos + new Vector3i(dx, dy, dz);
            }

            if (map.GetBlock(b).IsAlpha() || map.GetBlock(c).IsAlpha())
            {
                Color c1 = GetBlockLight(map, a);
                Color c2 = GetBlockLight(map, b);
                Color c3 = GetBlockLight(map, c);
                Color c4 = GetBlockLight(map, d);
                return((c1 + c2 + c3 + c4) / 4f);
            }
            else
            {
                Color c1 = GetBlockLight(map, a);
                Color c2 = GetBlockLight(map, b);
                Color c3 = GetBlockLight(map, c);
                return((c1 + c2 + c3) / 3f);
            }
        }
Ejemplo n.º 3
0
 private static UnityEngine.Color ComputeSmoothLight(OpenCog.Map.OCMap map, Vector3i a, Vector3i b, Vector3i c, Vector3i d)
 {
     if (map.GetBlock(b).IsAlpha() || map.GetBlock(c).IsAlpha())
     {
         UnityEngine.Color c1 = GetBlockLight(map, a);
         UnityEngine.Color c2 = GetBlockLight(map, b);
         UnityEngine.Color c3 = GetBlockLight(map, c);
         UnityEngine.Color c4 = GetBlockLight(map, d);
         return((c1 + c2 + c3 + c4) / 4f);
     }
     else
     {
         UnityEngine.Color c1 = GetBlockLight(map, a);
         UnityEngine.Color c2 = GetBlockLight(map, b);
         UnityEngine.Color c3 = GetBlockLight(map, c);
         return((c1 + c2 + c3) / 3f);
     }
 }
Ejemplo n.º 4
0
        private static void BuildCross(Vector3 localPos, Vector3i worldPos, OpenCog.Map.OCMap map, OpenCog.Builder.OCMeshBuilder mesh)
        {
            OCCrossBlock cross = (OCCrossBlock)map.GetBlock(worldPos).block;

            mesh.AddIndices(cross.AtlasID, indices);
            mesh.AddVertices(vertices, localPos);
            mesh.AddNormals(normals);
            mesh.AddTexCoords(cross.GetFaceUV());
            mesh.AddTexCoords(cross.GetFaceUV());
            mesh.AddTexCoords(cross.GetFaceUV());
            mesh.AddTexCoords(cross.GetFaceUV());
        }
Ejemplo n.º 5
0
 private static bool IsFaceVisible(OpenCog.Map.OCMap map, OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace face, Vector3i nearPos)
 {
     if (face == OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace.Bottom || face == OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace.Top)
     {
         OCBlock block = map.GetBlock(nearPos).block;
         if (block is OCCubeBlock && !block.IsAlpha())
         {
             return(false);
         }
         if (block is OCCactusBlock)
         {
             return(false);
         }
     }
     return(true);
 }
Ejemplo n.º 6
0
        //---------------------------------------------------------------------------

        #region Private Member Data

        //---------------------------------------------------------------------------



        //---------------------------------------------------------------------------

        #endregion

        //---------------------------------------------------------------------------

        #region Accessors and Mutators

        //---------------------------------------------------------------------------



        //---------------------------------------------------------------------------

        #endregion

        //---------------------------------------------------------------------------

        #region Public Member Functions

        //---------------------------------------------------------------------------

        public static void Build(Vector3i localPos, Vector3i worldPos, OpenCog.Map.OCMap map, OpenCog.Builder.OCMeshBuilder mesh, bool onlyLight)
        {
            OCFluidBlock fluid = (OCFluidBlock)map.GetBlock(worldPos).block;

            for (int i = 0; i < 6; i++)
            {
                OCCubeBlock.CubeFace face    = OpenCog.Builder.OCCubeBuilder.faces[i];
                Vector3i             dir     = OpenCog.Builder.OCCubeBuilder.directions[i];
                Vector3i             nearPos = worldPos + dir;
                if (IsFaceVisible(map, nearPos, face))
                {
                    if (!onlyLight)
                    {
                        BuildFace(face, fluid, (UnityEngine.Vector3)localPos, mesh);
                    }
                    BuildFaceLight(face, map, worldPos, mesh);
                }
            }
        }
Ejemplo n.º 7
0
        public static void Build(Vector3i localPos, Vector3i worldPos, OpenCog.Map.OCMap map, OpenCog.Builder.OCMeshBuilder mesh, bool onlyLight)
        {
            OpenCog.Map.OCBlockData block = map.GetBlock(worldPos);
            OCCubeBlock             cube  = (OCCubeBlock)block.block;

            OpenCog.Map.OCBlockDirection direction = block.GetDirection();

            for (int i = 0; i < 6; i++)
            {
                OCCubeBlock.CubeFace face    = faces[i];
                Vector3i             dir     = directions[i];
                Vector3i             nearPos = worldPos + dir;
                if (IsFaceVisible(map, nearPos))
                {
                    if (!onlyLight)
                    {
                        BuildFace(face, cube, direction, localPos, mesh);
                    }
                    BuildFaceLight(face, map, worldPos, mesh);
                }
            }
        }
Ejemplo n.º 8
0
        //---------------------------------------------------------------------------

        #endregion

        //---------------------------------------------------------------------------

        #region Private Member Functions

        //---------------------------------------------------------------------------

        private static bool IsFaceVisible(OpenCog.Map.OCMap map, Vector3i nearPos)
        {
            OCBlock block = map.GetBlock(nearPos).block;

            return(!(block is OCCubeBlock) || block.IsAlpha());
        }