private void InitializeSurfaces() { this.surfaces.Clear(); foreach (FaceOrientation faceOrientation in Util.GetValues <FaceOrientation>()) { TrixelEmplacement firstTrixel = new TrixelEmplacement(FezMath.IsPositive(faceOrientation) ? FezMath.AsVector(faceOrientation) * (this.size * 16f - Vector3.One) : Vector3.Zero); TrixelSurface trixelSurface = new TrixelSurface(faceOrientation, firstTrixel); Vector3 mask1 = FezMath.GetMask(FezMath.AsAxis(FezMath.GetTangent(faceOrientation))); int num1 = (int)Vector3.Dot(this.size, mask1) * 16; Vector3 mask2 = FezMath.GetMask(FezMath.AsAxis(FezMath.GetBitangent(faceOrientation))); int num2 = (int)Vector3.Dot(this.size, mask2) * 16; trixelSurface.RectangularParts.Add(new RectangularTrixelSurfacePart() { Orientation = faceOrientation, TangentSize = num1, BitangentSize = num2, Start = firstTrixel }); for (int index1 = 0; index1 < num1; ++index1) { for (int index2 = 0; index2 < num2; ++index2) { trixelSurface.Trixels.Add(new TrixelEmplacement(firstTrixel + mask1 * (float)index1 + mask2 * (float)index2)); } } this.surfaces.Add(trixelSurface); } }
private void Invalidate(ArtObjectMaterializer.InvalidationContext context) { using (IEnumerator <TrixelEmplacement> enumerator = context.Trixels.GetEnumerator()) { while (enumerator.MoveNext()) { TrixelEmplacement trixel = enumerator.Current; for (int index = 0; index < 6; ++index) { FaceOrientation face = (FaceOrientation)index; TrixelEmplacement traversed = trixel.GetTraversal(face); if (this.IsBorderTrixelFace(traversed)) { if (Enumerable.Any <TrixelSurface>((IEnumerable <TrixelSurface>) this.surfaces, (Func <TrixelSurface, bool>)(x => { if (x.Orientation == face) { return(x.AnyRectangleContains(trixel)); } else { return(false); } }))) { context.Removed.Add(new TrixelFace(trixel, face)); } if (context.TrixelsExist) { context.Added.Add(new TrixelFace(trixel, face)); } } else { FaceOrientation oppositeFace = FezMath.GetOpposite(face); if (Enumerable.Any <TrixelSurface>((IEnumerable <TrixelSurface>) this.surfaces, (Func <TrixelSurface, bool>)(x => { if (x.Orientation == oppositeFace) { return(x.AnyRectangleContains(traversed)); } else { return(false); } }))) { context.Removed.Add(new TrixelFace(traversed, oppositeFace)); } if (!context.TrixelsExist) { context.Added.Add(new TrixelFace(traversed, oppositeFace)); } } } } } }
private bool CanContain(TrixelEmplacement trixel) { if ((double)trixel.X < (double)this.size.X * 16.0 && (double)trixel.Y < (double)this.size.Y * 16.0 && ((double)trixel.Z < (double)this.size.Z * 16.0 && trixel.X >= 0) && trixel.Y >= 0) { return(trixel.Z >= 0); } else { return(false); } }
private bool IsBorderTrixelFace(TrixelEmplacement traversed) { if (this.CanContain(traversed)) { return(!this.TrixelExists(traversed)); } else { return(true); } }
private bool TrixelExists(TrixelEmplacement trixelIdentifier) { if (!this.missingTrixels.Empty) { return(!this.missingTrixels.IsFilled(trixelIdentifier)); } else { return(true); } }