Пример #1
0
        private StatusMetadata Evaluate(
            List <ICraftingStep> craftingSteps,
            StatusMetadata metadata)
        {
            foreach (var craftingStep in craftingSteps)
            {
                if (metadata.CurrentStatus.Completed)
                {
                    return(metadata);
                }

                craftingStep.UpdateStatus(metadata.CurrentStatus);

                ItemStatus previousStatus = null;

                while (craftingStep.ShouldVisitChildren(previousStatus, metadata.CurrentStatus))
                {
                    previousStatus = (ItemStatus)metadata.CurrentStatus.Clone();
                    Evaluate(craftingStep.Children, metadata);
                    metadata.CurrentStatus = ItemStatus.Combine(new List <ItemStatus> {
                        previousStatus, metadata.CurrentStatus
                    });
                }

                metadata = UpdateMetadata(craftingStep, metadata);
            }

            return(metadata);
        }