public override List <CompareResult> GetDifferingProps(XScanClass scandata, List <CompareResult> diffs)
        {
            XModels.XScanPlanet pscan = scandata.Planet;
            base.GetDifferingProps(scandata, diffs);
            CompareResult.AddIfUnequal(diffs, this, "PlanetClassId", this.PlanetClassId, pscan.PlanetClassId);
            CompareResult.AddIfUnequal(diffs, this, "MassEM", this.MassEM, pscan.MassEM);
            CompareResult.AddIfUnequal(diffs, this, "SurfaceGravity", this.SurfaceGravity, pscan.SurfaceGravity);
            if (this.HasComposition && pscan.HasComposition)
            {
                CompareResult.AddIfUnequal(diffs, this, "CompositionMetal", this.CompositionMetal, pscan.CompositionMetal);
                CompareResult.AddIfUnequal(diffs, this, "CompositionRock", this.CompositionRock, pscan.CompositionRock);
                CompareResult.AddIfUnequal(diffs, this, "CompositionIce", this.CompositionIce, pscan.CompositionIce);
            }
            if (this.VolcanismId != null && pscan.VolcanismId != 0)
            {
                CompareResult.AddIfUnequal(diffs, this, "VolcanismId", this.VolcanismId, pscan.VolcanismId);
                CompareResult.AddIfUnequal(diffs, this, "VolcanismMajor", this.VolcanismMajor, pscan.VolcanismMajor);
                CompareResult.AddIfUnequal(diffs, this, "VolcanismMinor", this.VolcanismMinor, pscan.VolcanismMinor);
            }
            CompareResult.AddIfUnequal(diffs, this, "IsLandable", this.IsLandable, pscan.HasLandable ? (bool?)pscan.IsLandable : null);
            if (this.Atmosphere != null && pscan.HasAtmosphere)
            {
                this.Atmosphere.GetDifferingProps(scandata.Atmosphere, diffs, this);
            }
            if (this.Materials != null && pscan.HasMaterials)
            {
                this.Materials.GetDifferingProps(scandata.Materials, diffs, this);
            }

            return(diffs);
        }
 public override bool Equals(XModels.XScanClass scan, bool ignoremats = false)
 {
     XModels.XScanPlanet pscan = scan.Planet;
     return(base.Equals(scan) &&
            this.PlanetClassId == pscan.PlanetClassId &&
            this.MassEM == pscan.MassEM &&
            this.SurfaceGravity == pscan.SurfaceGravity &&
            (!this.HasComposition || !pscan.HasComposition || (
                 this.CompositionMetal == pscan.CompositionMetal &&
                 this.CompositionRock == pscan.CompositionRock &&
                 this.CompositionIce == pscan.CompositionIce
                 )) &&
            (this.VolcanismId == null || pscan.VolcanismId == 0 || (
                 this.VolcanismId == pscan.VolcanismId &&
                 this.VolcanismMajor == pscan.VolcanismMajor &&
                 this.VolcanismMinor == pscan.VolcanismMinor
                 )) &&
            (this.IsLandable == null || !pscan.HasLandable || this.IsLandable == pscan.IsLandable) &&
            (this.Atmosphere == null || !pscan.HasAtmosphere || this.Atmosphere.Equals(scan.Atmosphere)) &&
            (ignoremats || this.Materials == null || !pscan.HasMaterials || this.Materials.Equals(scan.Materials)));
 }