Exemplo n.º 1
0
        static void Main(string[] args)
        {
            Serializer   ser             = new Serializer();
            Trait        xmlTrait        = ser.Deserialize <Trait>("trait.xml");
            EffectCity   xmlEffectCity   = ser.Deserialize <EffectCity>("effectCity.xml");
            EffectPlayer xmlEffectPlayer = ser.Deserialize <EffectPlayer>("effectPlayer.xml");
            EffectUnit   xmlEffectUnit   = ser.Deserialize <EffectUnit>("effectUnit.xml");

            // Load Trait.xml, then load other XMLs
            // Look for trait in city, player, unit.
            // If found, add to output obj

            OldWorldXmlParser parser = new OldWorldXmlParser();
            var vals = parser.GetArchtypeMetadata();

            foreach (var key in vals)
            {
                Console.WriteLine(key.Key);
                foreach (var val in key.Value)
                {
                    Console.WriteLine($"{val.Key} + {val.Value}");
                }
            }

            Console.Read();
        }
Exemplo n.º 2
0
        public Dictionary <string, Dictionary <string, object> > GetArchtypeMetadata()
        {
            var          retDict         = new Dictionary <string, Dictionary <string, object> >();
            Serializer   ser             = new Serializer();
            Trait        xmlTrait        = ser.Deserialize <Trait>("trait.xml");
            EffectCity   xmlEffectCity   = ser.Deserialize <EffectCity>("effectCity.xml");
            EffectPlayer xmlEffectPlayer = ser.Deserialize <EffectPlayer>("effectPlayer.xml");
            EffectUnit   xmlEffectUnit   = ser.Deserialize <EffectUnit>("effectUnit.xml");
            var          listOfArchtypes = GetArchtypes(xmlTrait);

            foreach (var archtype in listOfArchtypes)
            {
                var traitEntry    = xmlTrait.Entries.First(a => a.Name.Contains(archtype));
                var archtypeStats = new Dictionary <string, object>();

                // LeaderEffectPlayer - EffectPlayer (applies global)
                // GeneralEffectUnit - EffectUnit (applies bonuses to the unit it is controlling.)
                // LeaderEffectUnit - EffectUnit (not sure)
                // GovernorEffectCity - EffectCity (governor)


                if (traitEntry.LeaderEffectPlayer != null)
                {
                    //var newdict = GetLeaderEffectPlayer(zealotEntry, xmlEffectPlayer);
                    var effPlayerEntry = xmlEffectPlayer.Entries.First(a => a.zType == traitEntry.LeaderEffectPlayer);
                    var newdict        = GetKeyValuesFromXml(effPlayerEntry);
                    archtypeStats = archtypeStats.Concat(newdict).ToDictionary(x => x.Key, x => x.Value);
                }
                if (traitEntry.GeneralEffectUnit != null)
                {
                    var effPlayerEntry = xmlEffectUnit.Entries.First(a => a.zType == traitEntry.GeneralEffectUnit);
                    var newdict        = GetKeyValuesFromXml(effPlayerEntry);
                    archtypeStats = archtypeStats.Concat(newdict).ToDictionary(x => x.Key, x => x.Value);
                }
                if (traitEntry.LeaderEffectUnit != null)
                {
                    var effPlayerEntry = xmlEffectUnit.Entries.First(a => a.zType == traitEntry.LeaderEffectUnit);
                    var newdict        = GetKeyValuesFromXml(effPlayerEntry);
                    archtypeStats = archtypeStats.Concat(newdict).ToDictionary(x => x.Key, x => x.Value);
                }
                if (traitEntry.GovernorEffectCity != null)
                {
                    var effPlayerEntry = xmlEffectCity.Entries.First(a => a.zType == traitEntry.GovernorEffectCity);
                    var newdict        = GetKeyValuesFromXml(effPlayerEntry);
                    archtypeStats = archtypeStats.Concat(newdict).ToDictionary(x => x.Key, x => x.Value);
                }

                List <string> removeProcessedKeys           = new List <string>();
                Dictionary <string, object> postProcessDict = new Dictionary <string, object>();
                // Post process elements.
                foreach (var stat in archtypeStats)
                {
                    if (stat.Key.Contains("EffectCity"))
                    {
                        var entry       = xmlEffectCity.Entries.First(a => a.zType == (string)stat.Value);
                        var childValues = GetKeyValuesFromXml(entry);
                        foreach (var childval in childValues)
                        {
                            postProcessDict[childval.Key] = childval.Value;
                        }
                        removeProcessedKeys.Add("EffectCity");
                    }
                }

                removeProcessedKeys.ForEach(a => archtypeStats.Remove(a));
                archtypeStats = archtypeStats.Concat(postProcessDict).ToDictionary(x => x.Key, x => x.Value);

                retDict[archtype] = archtypeStats;
            }


            return(retDict);
        }