public static Level GetLevelFromXML(XmlNode node_levelInfo, out bool needRefresh) { needRefresh = false; string Name_zh = node_levelInfo.Attributes["name_zh"].Value; string Name_en = node_levelInfo.Attributes["name_en"].Value; SortedDictionary <string, string> names = new SortedDictionary <string, string> { { "zh", Name_zh }, { "en", Name_en } }; int picID = int.Parse(node_levelInfo.Attributes["picID"].Value); LevelTypes levelType = (LevelTypes)Enum.Parse(typeof(LevelTypes), node_levelInfo.Attributes["levelType"].Value); int difficultyLevel = int.Parse(node_levelInfo.Attributes["difficultyLevel"].Value); switch (levelType) { case LevelTypes.Enemy: { XmlNode node_EnemyInfo = node_levelInfo.FirstChild; EnemyType enemyType = (EnemyType)Enum.Parse(typeof(EnemyType), node_EnemyInfo.Attributes["enemyType"].Value); BuildInfo bi = BuildInfo.GetBuildInfoFromXML(node_EnemyInfo.FirstChild, out bool _needRefresh_build, BuildCards.DefaultCardLimitNumTypes.BasedOnCardBaseInfoLimitNum); needRefresh |= _needRefresh_build; XmlNode node_BonusGroupInfos = node_EnemyInfo.ChildNodes.Item(1); List <BonusGroup> BonusGroups = new List <BonusGroup>(); for (int i = 0; i < node_BonusGroupInfos.ChildNodes.Count; i++) { XmlNode bonusGroupInfo = node_BonusGroupInfos.ChildNodes.Item(i); BonusGroup bg = BonusGroup.GenerateBonusGroupFromXML(bonusGroupInfo, out bool _needRefresh_bonus); needRefresh |= _needRefresh_bonus; BonusGroups.Add(bg); } XmlNode node_CardPriorityInfos = node_EnemyInfo.ChildNodes.Item(2); CardPriority CardPriority = CardPriority.GenerateCardPriorityFromXML(node_CardPriorityInfos, out bool _needRefresh_priority); XmlNode node_ComboListInfos = node_EnemyInfo.ChildNodes.Item(3); List <CardCombo> ComboList = new List <CardCombo>(); for (int i = 0; i < node_ComboListInfos.ChildNodes.Count; i++) { XmlNode comboInfo = node_ComboListInfos.ChildNodes.Item(i); CardCombo cc = CardCombo.GenerateCardComboFromXML(comboInfo, out bool _needRefresh_combo); needRefresh |= _needRefresh_combo; ComboList.Add(cc); } Enemy enemy = new Enemy(picID, names, difficultyLevel, bi, enemyType, BonusGroups, ComboList, CardPriority); return(enemy); } case LevelTypes.Shop: { XmlNode node_ShopInfo = node_levelInfo.FirstChild; List <ShopItem> shopItems = new List <ShopItem>(); for (int i = 0; i < node_ShopInfo.ChildNodes.Count; i++) { XmlNode node_ShopItem = node_ShopInfo.ChildNodes.Item(i); ShopItem si = ShopItem.GenerateShopItemFromXML(node_ShopItem, out bool _needRefresh_shop); needRefresh |= _needRefresh_shop; if (si != null) { shopItems.Add(si); } } int shopItemCardCount = int.Parse(node_ShopInfo.Attributes["shopItemCardCount"].Value); int shopItemOthersCount = int.Parse(node_ShopInfo.Attributes["shopItemOthersCount"].Value); Shop shop = new Shop(picID, names, difficultyLevel, shopItems, shopItemCardCount, shopItemOthersCount); return(shop); } } return(null); }