Beispiel #1
0
        public override PatchnoteReportItem[] CreateReportItems(string name, TankDataFieldBase field, IXQueryable oldItem, IXQueryable newItem)
        {
            var oldValues = oldItem.QueryManyValues(field.XPath);
            var newValues = newItem.QueryManyValues(field.XPath);

            var diffResult = oldValues.Diff(newValues);

            var itemCount = diffResult.Added.Length + diffResult.Removed.Length;

            if (itemCount == 0)
            {
                return(null);
            }

            var children = new List <AddedOrRemovedItemBase>();

            foreach (var added in diffResult.Added)
            {
                children.Add(new AddedItem(added, added));
            }

            foreach (var removed in diffResult.Removed)
            {
                children.Add(new RemovedItem(removed, removed));
            }

            if (children.Count == 1)
            {
                var collectionField = (SimpleCollectionDataField)field;

                children[0].ItemName.AddModifier(new TypeModifier(collectionField.ItemName));
                return(children.ToArray());
            }
            else
            {
                var collection = new Collection(name, false, oldItem);

                foreach (var added in diffResult.Added)
                {
                    collection.Children.Add(new AddedItem(added, added));
                }

                foreach (var removed in diffResult.Removed)
                {
                    collection.Children.Add(new RemovedItem(removed, removed));
                }

                return(new[] { collection });
            }
        }
Beispiel #2
0
        public override PatchnoteReportItem[] CreateReportItems(string name, TankDataFieldBase field, IXQueryable oldItem, IXQueryable newItem)
        {
            var oldValue = oldItem.QueryValue(field.XPath);
            var newValue = newItem.QueryValue(field.XPath);

            var valueField = (ValueDataField)field;

            if (string.Equals(oldValue, newValue))
            {
                return(null);
            }

            var oldValueString = this.FormatValue(oldValue, valueField);
            var newValueString = this.FormatValue(newValue, valueField);

            if (valueField.CompareStrategy == CompareStrategy.NotComparable)
            {
                return(new[] { new ChangedItem(field.Name, ChangeVerb.Changed, oldValueString, newValueString, oldValue) });
            }
            else
            {
                double oldDoubleValue, newDoubleValue;
                if (!double.TryParse(oldValue,
                                     NumberStyles.Float | NumberStyles.AllowThousands,
                                     CultureInfo.InvariantCulture,
                                     out oldDoubleValue)
                    ||
                    !double.TryParse(newValue,
                                     NumberStyles.Float | NumberStyles.AllowThousands,
                                     CultureInfo.InvariantCulture,
                                     out newDoubleValue))
                {
                    this.LogError("uncomparable field detected: field.Name = '{0}', oldValue = '{1}', newValue = '{2}'",
                                  field.Name, oldValue, newValue);
                    return(new[] { new ChangedItem(field.Name, ChangeVerb.Changed, oldValueString, newValueString, oldValue) });
                }

                ChangeVerb verb;
                if (oldDoubleValue > newDoubleValue)
                {
                    if (valueField.CompareStrategy == CompareStrategy.Plain)
                    {
                        verb = ChangeVerb.Decreased;
                    }
                    else if (valueField.CompareStrategy == CompareStrategy.HigherBetter)
                    {
                        verb = ChangeVerb.Nerfed;
                    }
                    else
                    {
                        verb = ChangeVerb.Buffed;
                    }
                }
                else
                {
                    if (valueField.CompareStrategy == CompareStrategy.Plain)
                    {
                        verb = ChangeVerb.Increased;
                    }
                    else if (valueField.CompareStrategy == CompareStrategy.HigherBetter)
                    {
                        verb = ChangeVerb.Buffed;
                    }
                    else
                    {
                        verb = ChangeVerb.Nerfed;
                    }
                }

                return(new[] { new ChangedItem(field.Name, verb, oldValueString, newValueString, oldValue) });
            }
        }
Beispiel #3
0
 public abstract PatchnoteReportItem[] CreateReportItems(string name, TankDataFieldBase field, IXQueryable oldItem, IXQueryable newItem);
Beispiel #4
0
        public override PatchnoteReportItem[] CreateReportItems(string name, TankDataFieldBase field, IXQueryable oldItem, IXQueryable newItem)
        {
            var oldItems = oldItem.QueryMany(field.XPath);
            var newItems = newItem.QueryMany(field.XPath);

            var diffResult = oldItems.Diff(newItems, KeyEqualityComparer <IXQueryable> .Instance);
            var children   = new List <PatchnoteReportItem>();

            foreach (var addedItem in diffResult.Added)
            {
                children.Add(new AddedItem(addedItem["userString"], addedItem));
            }

            foreach (var removedItem in diffResult.Removed)
            {
                children.Add(new RemovedItem(removedItem["userString"], removedItem));
            }

            var isSingleParent = oldItems.Count() == 1;

            foreach (var sharedItem in diffResult.Shared)
            {
                var reportItem = TankDataItemHandler.Instance.CreateReportItem(sharedItem.Source["userString"],
                                                                               sharedItem.Source,
                                                                               sharedItem.Target,
                                                                               true,
                                                                               isSingleParent);

                children.AddIfNotNull(reportItem);
            }

            if (children.Count == 0)
            {
                return(null);
            }

            var collectionField = (ComplexCollectionDataField)field;

            foreach (var singleItemChild in children.OfType <DataItem>())
            {
                if (singleItemChild.ItemName.Modifiers.LastOrDefault() as TypeModifier == null)
                {
                    this.AddTypeModifier(singleItemChild.ItemName, collectionField.ItemName, isSingleParent);
                }
            }

            if (children.Count == 1)
            {
                var changedChild = children[0] as ChangedItem;
                if (changedChild != null)
                {
                    return new[] { changedChild }
                }
                ;

                var addedOrRemovedChild = children[0] as AddedOrRemovedItemBase;
                if (addedOrRemovedChild != null)
                {
                    return new[] { addedOrRemovedChild }
                }
                ;


                var collectionChild = children[0] as Collection;

                if (collectionField.OmitSingleHeader && collectionChild.Children.All(c => c is Collection))
                {
                    return(collectionChild.Children.ToArray());
                }
            }

            return(children.ToArray());
        }