public Face FindExposedFaces(FindSolidFacesDelegate <T> solidCheck) { Face res = Face.None; foreach (Face face in Face.All) { if (IsFaceExposed(face, solidCheck)) { res |= face; } } return(res); }
public override bool IsFaceSolid(Face face, FindSolidFacesDelegate <T> solidCheck) { switch (face.Index) { case Face.LeftIndex: return (myChildren[0].IsFaceSolid(face, solidCheck) && myChildren[1].IsFaceSolid(face, solidCheck) && myChildren[2].IsFaceSolid(face, solidCheck) && myChildren[3].IsFaceSolid(face, solidCheck)); case Face.RightIndex: return (myChildren[4].IsFaceSolid(face, solidCheck) && myChildren[5].IsFaceSolid(face, solidCheck) && myChildren[6].IsFaceSolid(face, solidCheck) && myChildren[7].IsFaceSolid(face, solidCheck)); case Face.BottomIndex: return (myChildren[0].IsFaceSolid(face, solidCheck) && myChildren[1].IsFaceSolid(face, solidCheck) && myChildren[4].IsFaceSolid(face, solidCheck) && myChildren[5].IsFaceSolid(face, solidCheck)); case Face.TopIndex: return (myChildren[2].IsFaceSolid(face, solidCheck) && myChildren[3].IsFaceSolid(face, solidCheck) && myChildren[6].IsFaceSolid(face, solidCheck) && myChildren[7].IsFaceSolid(face, solidCheck)); case Face.FrontIndex: return (myChildren[0].IsFaceSolid(face, solidCheck) && myChildren[2].IsFaceSolid(face, solidCheck) && myChildren[4].IsFaceSolid(face, solidCheck) && myChildren[6].IsFaceSolid(face, solidCheck)); case Face.BackIndex: return (myChildren[1].IsFaceSolid(face, solidCheck) && myChildren[3].IsFaceSolid(face, solidCheck) && myChildren[5].IsFaceSolid(face, solidCheck) && myChildren[7].IsFaceSolid(face, solidCheck)); } return(false); }
private float[] FindVertices(GeometryShader shader) { List <float> verts = new List <float>(); FindSolidFacesDelegate <UInt16> solidCheck = (x => { var comp = BlockManager.Get(x).GetComponant <VisibilityBComponant>(); if (comp != null) { return(comp.SolidFaces); } return(Face.None); }); foreach (Octree <UInt16> octree in Chunk.Octrees) { var iter = (OctreeEnumerator <UInt16>)octree.GetEnumerator(); while (iter.MoveNext()) { OctreeLeaf <UInt16> leaf = iter.Current; BlockType type = BlockManager.Get(leaf.Value); var vis = type.GetComponant <VisibilityBComponant>(); if (vis == null || !vis.IsVisible) { continue; } var mdl = type.GetComponant <ModelBComponant>(); if (mdl == null) { continue; } int size = iter.Size; Vector3 offset = new Vector3(iter.X, iter.Y, iter.Z); verts.AddRange(mdl.Model.GenerateVertexData(offset, size, leaf.FindExposedFaces(solidCheck))); } } return(verts.ToArray()); }
public virtual bool IsFaceSolid(Face face, FindSolidFacesDelegate <T> solidCheck) { throw new NotImplementedException(); }
public bool IsFaceExposed(Face face, FindSolidFacesDelegate <T> solidCheck) { OctreeNode <T> n = FindNeighbour(face); return(n == null || !n.IsFaceSolid(face.Opposite, solidCheck)); }
public override bool IsFaceSolid(Face face, FindSolidFacesDelegate <T> solidCheck) { return(solidCheck(Value).HasFace(face)); }