private static void BuildFaceLight(OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace face, OpenCog.Map.OCMap map, Vector3i pos, OpenCog.Builder.OCMeshBuilder mesh)
        {
            Vector3i dir = OpenCog.Builder.OCCubeBuilder.directions[(int)face];

            UnityEngine.Color color = OpenCog.Builder.OCBuildUtils.GetBlockLight(map, pos + dir);
            mesh.AddFaceColor(color);
        }
示例#2
0
 private static void BuildFaceLight(OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace face, OpenCog.Map.OCMap map, Vector3i pos, OpenCog.Builder.OCMeshBuilder mesh)
 {
     foreach (Vector3 ver in vertices[(int)face])
     {
         Color color = OpenCog.Builder.OCBuildUtils.GetSmoothVertexLight(map, pos, ver, face);
         mesh.AddColor(color);
     }
 }
示例#3
0
        private static void BuildFace(OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace face, OpenCog.BlockSet.BaseBlockSet.OCCubeBlock cube, OpenCog.Map.OCBlockDirection direction, Vector3 localPos, OpenCog.Builder.OCMeshBuilder mesh)
        {
            int iFace = (int)face;

            mesh.AddFaceIndices(cube.AtlasID);
            mesh.AddVertices(vertices[iFace], localPos);
            mesh.AddNormals(normals[iFace]);
            mesh.AddTexCoords(cube.GetFaceUV(face, direction));
        }
示例#4
0
        private static void BuildFace(OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace face, OpenCog.BlockSet.BaseBlockSet.OCFluidBlock fluid, UnityEngine.Vector3 localPos, OpenCog.Builder.OCMeshBuilder mesh)
        {
            int iFace = (int)face;

            mesh.AddFaceIndices(fluid.AtlasID);
            mesh.AddVertices(OpenCog.Builder.OCCubeBuilder.vertices[iFace], localPos);
            mesh.AddNormals(OpenCog.Builder.OCCubeBuilder.normals[iFace]);
            mesh.AddTexCoords(fluid.GetFaceUV());
        }
示例#5
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());
            }
        }
示例#6
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);
 }
        public Vector2[] GetFaceUV(OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace face)
        {
            switch (face)
            {
            case OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace.Front: return(_sideVectors);

            case OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace.Back: return(_sideVectors);

            case OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace.Right: return(_sideVectors);

            case OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace.Left: return(_sideVectors);

            case OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace.Top: return(_topVectors);

            case OpenCog.BlockSet.BaseBlockSet.OCCubeBlock.CubeFace.Bottom: return(_bottomVectors);
            }
            return(null);
        }
示例#8
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);
            }
        }