static bool ListDiff <T>(ModelDiffContext context, List <T> lhs, List <T> rhs, Func <ModelDiffContext, T, T, bool> pred, Func <T, int> order = null) { var equals = true; if (lhs.Count != rhs.Count) { equals = false; context.List.Add(new ModelDiff { Context = context.Path, Message = $"{lhs.Count} != {rhs.Count}", }); } var l = order != null?lhs.OrderBy(order).GetEnumerator() : lhs.GetEnumerator(); var r = order != null?rhs.OrderBy(order).GetEnumerator() : rhs.GetEnumerator(); for (int i = 0; i < lhs.Count; ++i) { l.MoveNext(); r.MoveNext(); if (!pred(context.Enter($"{i}"), l.Current, r.Current)) { equals = false; } } return(equals); }
static bool TextureEquals(ModelDiffContext context, Texture lhs, Texture rhs) { if (!context.RequireComapre(lhs, rhs, out bool equals)) { if (!equals) { return(false); } return(true); } equals = true; if (!context.Enter("Name").Push(lhs.Name, rhs.Name, StringEquals)) { equals = false; } if (!context.Enter("MagFilter").Push(lhs.Sampler.MagFilter, rhs.Sampler.MagFilter)) { equals = false; } if (!context.Enter("MinFilter").Push(lhs.Sampler.MinFilter, rhs.Sampler.MinFilter)) { equals = false; } if (!context.Enter("WrapS").Push(lhs.Sampler.WrapS, rhs.Sampler.WrapS)) { equals = false; } if (!context.Enter("WrapT").Push(lhs.Sampler.WrapT, rhs.Sampler.WrapT)) { equals = false; } if (lhs is ImageTexture l && rhs is ImageTexture r) { if (!ImageBytesEquals(context, l.Image, r.Image)) { equals = false; } return(equals); }
static bool TextureInfoEquals(ModelDiffContext context, TextureInfo lhs, TextureInfo rhs) { if (!context.RequireComapre(lhs, rhs, out bool equals)) { return(equals); } if (lhs.Offset != rhs.Offset) { return(false); } if (lhs.Scaling != rhs.Scaling) { return(false); } return(TextureEquals(context.Enter("Texture"), lhs.Texture, rhs.Texture)); }
static void Image(ModelDiffContext context, Image lhs, Image rhs) { context.Enter($"{lhs.Name}:{rhs.Name}").Push(lhs, rhs, ImageBytesEquals); }