private void HandleRemovedTanks(IXQueryable[] removedTanks)
        {
            foreach (var tank in removedTanks)
            {
                var item = new RemovedItem(PatchnoteGeneratorDocumenVM.GetTankName(tank), tank);
                item.ItemName.AddModifier(this.GetTankTypeModifier(tank));
                _removedTanks.Add(item);

                ++_processedTankTaskCount;
                this.GenerationProgress = (double)_processedTankTaskCount / _tankTaskCount;
            }
        }
        private IEnumerable <ItemName> AnalyseModuleCollectionCollisionChanges(IXQueryable oldTank, IXQueryable newTank, string xpath, string moduleName)
        {
            var oldModules = oldTank.QueryMany(xpath).Distinct(KeyEqualityComparer <IXQueryable> .Instance);
            var newModules = newTank.QueryMany(xpath).Distinct(KeyEqualityComparer <IXQueryable> .Instance);

            foreach (var sharedItem in oldModules.Diff(newModules, KeyEqualityComparer <IXQueryable> .Instance).Shared)
            {
                if (!this.ModelFileEquals(sharedItem.Source, sharedItem.Target, "hitTester/collisionModel"))
                {
                    var name = new ItemName(PatchnoteGeneratorDocumenVM.GetTankName(sharedItem.Source));
                    name.AddModifier(new TypeModifier(moduleName));
                    yield return(name);
                }
            }
        }
        private void AnalyseCollisionChanges(IXQueryable oldTank, IXQueryable newTank)
        {
            var changedParts = new List <ItemName>();

            if (!this.ModelFileEquals(oldTank, newTank, "hull/hitTester/collisionModel"))
            {
                changedParts.Add(new ItemName("hull", false));
            }

            changedParts.AddRange(this.AnalyseModuleCollectionCollisionChanges(oldTank, newTank, "chassis/chassis", "chassis"));
            changedParts.AddRange(this.AnalyseModuleCollectionCollisionChanges(oldTank, newTank, "turrets/turret", "turret"));
            changedParts.AddRange(this.AnalyseModuleCollectionCollisionChanges(oldTank, newTank, "turrets/turret/guns/gun", "gun"));

            if (changedParts.Count > 0)
            {
                _potentialCollisionChanges.Add(new PotentialModelChangedItem(PatchnoteGeneratorDocumenVM.GetTankName(oldTank), changedParts.ToArray()));
            }
        }
        private void HandleSharedTanks(SharedPair <IXQueryable>[] sharedTanks)
        {
            foreach (var sharedTank in sharedTanks)
            {
                _statChanges.AddIfNotNull(TankDataItemHandler.Instance.CreateReportItem(PatchnoteGeneratorDocumenVM.GetTankName(sharedTank.Source),
                                                                                        sharedTank.Source,
                                                                                        sharedTank.Target,
                                                                                        false,
                                                                                        false,
                                                                                        false));
                if (_checkPotentialCollisionChanges)
                {
                    this.AnalyseCollisionChanges(sharedTank.Source, sharedTank.Target);
                }

                ++_processedTankTaskCount;
                this.GenerationProgress = (double)_processedTankTaskCount / _tankTaskCount;
            }
        }