public static Feat Parse(WikiPage page, WikiExport export, ILog log = null)
 {
     var feat = new Feat();
     var parser = new FeatParser(feat, page, export);
     parser.Execute(log);
     return feat;
 }
 public static bool TryParse(WikiPage page, WikiExport export, out Feat feat, ILog log = null)
 {
     feat = null;
     try
     {
         feat = Parse(page, export, log);
         return true;
     }
     catch (ParseException e)
     {
         log.Error("{0}: {1}", page.Title, e.Message);
         return false;
     }
 }
Example #3
0
        public void Should_Serialize_Prerequisites()
        {
            var feat = new Feat
            {
                Name        = "Sample Feat",
                Benefit     = "Sample Benefit",
                Description = "Sample Description",
                Id          = "sample-feat",
                Normal      = "Normal",
                Source      = new ElementSource
                {
                    Id         = "sample-source",
                    References = new List <ElementReference>
                    {
                        new ElementReference {
                            HrefString = "http://example.com", Name = "Example"
                        },
                        new ElementReference {
                            HrefString = "http://example.com", Name = "Example"
                        }
                    }
                },
                Special       = "Special",
                Summary       = "Summary",
                Types         = new[] { FeatType.General, FeatType.Combat },
                Prerequisites = new object[]
                {
                    new FeatPrerequisite(),
                    new FeatPrerequisiteChoice
                    {
                        Items = new[] { new FeatPrerequisite() }
                    }
                }
            };

            using (var writer = new StringWriter())
            {
                serializer.Serialize(writer, feat);


                var xmlDoc = new XmlDocument();
                xmlDoc.LoadXml(writer.ToString());
            }
        }
        public void Should_Serialize_Prerequisites()
        {
            var feat = new Feat
            {
                Name = "Sample Feat",
                Benefit = "Sample Benefit",
                Description = "Sample Description",
                Id = "sample-feat",
                Normal = "Normal",
                Source = new ElementSource
                {
                    Id = "sample-source",
                    References = new List<ElementReference>
                    {
                        new ElementReference { HrefString = "http://example.com", Name = "Example" },
                        new ElementReference { HrefString = "http://example.com", Name = "Example" }
                    }
                },
                Special = "Special",
                Summary = "Summary",
                Types = new[] { FeatType.General, FeatType.Combat },
                Prerequisites = new object[]
                {
                    new FeatPrerequisite(),
                    new FeatPrerequisiteChoice
                    {
                        Items = new[] { new FeatPrerequisite() }
                    }
                }
            };

            using (var writer = new StringWriter())
            {
                serializer.Serialize(writer, feat);


                var xmlDoc = new XmlDocument();
                xmlDoc.LoadXml(writer.ToString());
            }
        }
 public FeatParser(Feat feat, WikiPage wikiPage, WikiExport export)
 {
     this.feat = feat;
     this.wikiPage = wikiPage;
     this.export = export;
 }
            public bool RunOn(Feat feat)
            {
                if (feat.Prerequisites == null || feat.Prerequisites.Length == 0)
                {
                    return true;
                }

                foreach (var item in feat.Prerequisites)
                {
                    var prereq = item as FeatPrerequisite;
                    if (prereq != null)
                    {
                        if (!this.ValidatePrereq(prereq))
                        {
                            // Si au moins un des prerequis n'est pas satisfait c'est une erreur
                            return false;
                        }
                    }
                    else
                    {
                        var choice = item as FeatPrerequisiteChoice;
                        if (choice != null)
                        {
                            var validated = false;
                            foreach (var subPrereq in choice.Items)
                            {
                                if (this.ValidatePrereq(subPrereq))
                                {
                                    // On a satisfait au moins un prerequis, on s'arrête
                                    validated = true;
                                    break;
                                }
                            }

                            if (!validated)
                            {
                                // Ca n'est pas satisfait si aucun des prerequis optionel n'est satisfait
                                return false;
                            }
                        }
                    }
                }

                return true;
            }
 public FeatWrapper(Feat feat)
 {
     this.feat = feat;
 }