//--------------------------------------------------------------------------- #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()); } }
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); } }
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); } }
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()); }
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); }
//--------------------------------------------------------------------------- #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); } } }
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); } } }
//--------------------------------------------------------------------------- #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()); }