/// <summary> /// If cards, buffs, equipments are removed from battle, just call this method to UnRegister all sideeffects of them /// </summary> /// <param name="sideEffects"></param> public void UnRegisterEvent(SideEffectBundle sideEffects) { foreach (SideEffectExecute see in sideEffects.SideEffectExecutes) { UnRegisterEvent(see); } }
/// <summary> /// Cards, equipments, buffs register their sideeffects /// </summary> /// <param name="sideEffectBundle"></param> public void RegisterEvent(SideEffectBundle sideEffectBundle) { foreach (SideEffectExecute see in sideEffectBundle.SideEffectExecutes) { RegisterEvent(see); } }
public CardInfo_Spell(int cardID, BaseInfo baseInfo, UpgradeInfo upgradeInfo, SideEffectBundle sideEffectBundle, SideEffectBundle sideEffectBundle_BattleGroundAura) : base(cardID: cardID, baseInfo: baseInfo, upgradeInfo: upgradeInfo, sideEffectBundle: sideEffectBundle, sideEffectBundle_BattleGroundAura: sideEffectBundle_BattleGroundAura) { Pro_Initialize(); }
protected CardInfo_Base(int cardID, BaseInfo baseInfo, UpgradeInfo upgradeInfo, SideEffectBundle sideEffectBundle, SideEffectBundle sideEffectBundle_BattleGroundAura) { CardID = cardID; BaseInfo = baseInfo; UpgradeInfo = upgradeInfo; SideEffectBundle = sideEffectBundle; SideEffectBundle_BattleGroundAura = sideEffectBundle_BattleGroundAura; TargetInfo.Initialize(this); Pro_Initialize(); }
public override CardInfo_Base Clone() { CardInfo_Spell cs = new CardInfo_Spell( cardID: CardID, baseInfo: BaseInfo, upgradeInfo: UpgradeInfo, sideEffectBundle: SideEffectBundle.Clone(), sideEffectBundle_BattleGroundAura: SideEffectBundle_BattleGroundAura.Clone()); return(cs); }
public override CardInfo_Base Clone() { CardInfo_Mech cb = new CardInfo_Mech( cardID: CardID, baseInfo: BaseInfo, upgradeInfo: UpgradeInfo, lifeInfo: LifeInfo, battleInfo: BattleInfo, mechInfo: MechInfo, sideEffectBundle: SideEffectBundle.Clone(), sideEffectBundle_BattleGroundAura: SideEffectBundle_BattleGroundAura.Clone()); return(cb); }
public override CardInfo_Base Clone() { CardInfo_Equip cb = new CardInfo_Equip( cardID: CardID, baseInfo: BaseInfo, upgradeInfo: UpgradeInfo, equipInfo: EquipInfo, weaponInfo: WeaponInfo, shieldInfo: ShieldInfo, packInfo: PackInfo, maInfo: MAInfo, sideEffectBundle: SideEffectBundle.Clone(), sideEffectBundle_BattleGroundAura: SideEffectBundle_BattleGroundAura.Clone() ); return(cb); }
private void FindTargetInSideEffectBundle(SideEffectBundle seb, CardInfo_Base CardInfo) { foreach (SideEffectExecute see in seb.GetSideEffectExecutes(SideEffectExecute.TriggerTime.OnPlayCard, SideEffectExecute.TriggerRange.Self)) { if (FindTarget(see)) { break; } } foreach (SideEffectExecute see in seb.GetSideEffectExecutes(SideEffectExecute.TriggerTime.OnMechSummon, SideEffectExecute.TriggerRange.Self)) { if (FindTarget(see)) { break; } } }
public CardInfo_Equip(int cardID, BaseInfo baseInfo, UpgradeInfo upgradeInfo, EquipInfo equipInfo, WeaponInfo weaponInfo, ShieldInfo shieldInfo, PackInfo packInfo, MAInfo maInfo, SideEffectBundle sideEffectBundle, SideEffectBundle sideEffectBundle_BattleGroundAura) : base(cardID: cardID, baseInfo: baseInfo, upgradeInfo: upgradeInfo, sideEffectBundle: sideEffectBundle, sideEffectBundle_BattleGroundAura: sideEffectBundle_BattleGroundAura) { switch (equipInfo.SlotType) { case SlotTypes.Weapon: { WeaponInfo = weaponInfo; break; } case SlotTypes.Shield: { ShieldInfo = shieldInfo; break; } case SlotTypes.Pack: { PackInfo = packInfo; break; } case SlotTypes.MA: { MAInfo = maInfo; break; } } EquipInfo = equipInfo; Pro_Initialize(); }
public CardInfo_Mech(int cardID, BaseInfo baseInfo, UpgradeInfo upgradeInfo, LifeInfo lifeInfo, BattleInfo battleInfo, MechInfo mechInfo, SideEffectBundle sideEffectBundle, SideEffectBundle sideEffectBundle_BattleGroundAura) : base(cardID: cardID, upgradeInfo: upgradeInfo, baseInfo: baseInfo, sideEffectBundle: sideEffectBundle, sideEffectBundle_BattleGroundAura: sideEffectBundle_BattleGroundAura) { LifeInfo = lifeInfo; BattleInfo = battleInfo; MechInfo = mechInfo; Pro_Initialize(); }
public void Initialize(CardInfo_Base cardInfo, SideEffectBundle seb, UnityAction onRefreshText) { foreach (CardPropertyForm_SideEffectExecute cpfsee in CardPropertyForm_SideEffectExecuteRows) { cpfsee.PoolRecycle(); } CardPropertyForm_SideEffectExecuteRows.Clear(); if (cardInfo != null) { if (seb == cardInfo.SideEffectBundle) { LanguageManager.Instance.RegisterTextKey(SideEffectBundleText, "CardEditorPanel_SideEffectBundleText"); } else { LanguageManager.Instance.RegisterTextKey(SideEffectBundleText, "CardEditorPanel_SideEffectBundleAuraText"); } AddSideEffectExecuteButton.onClick.RemoveAllListeners(); AddSideEffectExecuteButton.onClick.AddListener(delegate { SideEffectExecute.SideEffectFrom sef = SideEffectExecute.SideEffectFrom.Unknown; SideEffectExecute.ExecuteSetting executeSetting = SideEffectExecute.ExecuteSetting_Presets[SideEffectExecute.ExecuteSettingTypes.PlayOutEffect].Clone(); switch (cardInfo.BaseInfo.CardType) { case CardTypes.Mech: sef = SideEffectExecute.SideEffectFrom.MechSideEffect; executeSetting = SideEffectExecute.ExecuteSetting_Presets[SideEffectExecute.ExecuteSettingTypes.BattleCry]; break; case CardTypes.Equip: sef = SideEffectExecute.SideEffectFrom.EquipSideEffect; executeSetting = SideEffectExecute.ExecuteSetting_Presets[SideEffectExecute.ExecuteSettingTypes.EquipBattleCry]; break; case CardTypes.Spell: sef = SideEffectExecute.SideEffectFrom.SpellCard; executeSetting = SideEffectExecute.ExecuteSetting_Presets[SideEffectExecute.ExecuteSettingTypes.PlayOutEffect]; break; case CardTypes.Energy: sef = SideEffectExecute.SideEffectFrom.EnergyCard; executeSetting = SideEffectExecute.ExecuteSetting_Presets[SideEffectExecute.ExecuteSettingTypes.PlayOutEffect]; break; //todo from buff } SideEffectExecute newSEE = new SideEffectExecute(sef, new List <SideEffectBase> { AllSideEffects.GetSideEffect("Damage").Clone() }, executeSetting); seb.AddSideEffectExecute(newSEE); seb.RefreshSideEffectExecutesDict(); Initialize(cardInfo, seb, onRefreshText); onRefreshText(); StartCoroutine(ClientUtils.UpdateLayout((RectTransform)UIManager.Instance.GetBaseUIForm <CardEditorPanel>().CardPropertiesContainer)); }); RefreshSideEffectBundleTransformButton.onClick.RemoveAllListeners(); RefreshSideEffectBundleTransformButton.onClick.AddListener(delegate { StartCoroutine(ClientUtils.UpdateLayout((RectTransform)UIManager.Instance.GetBaseUIForm <CardEditorPanel>().CardPropertiesContainer)); } ); foreach (SideEffectExecute see in seb.SideEffectExecutes) { CardPropertyForm_SideEffectExecute cpfsee = GameObjectPoolManager.Instance.PoolDict[GameObjectPoolManager.PrefabNames.CardPropertyForm_SideEffectExecute].AllocateGameObject <CardPropertyForm_SideEffectExecute>(SideEffectExecuteRowContainer); cpfsee.Initialize(SideEffectExecute.GetSideEffectFromByCardType(cardInfo.BaseInfo.CardType), see, onRefreshText, delegate { seb.RemoveSideEffectExecute(see); Initialize(cardInfo, seb, onRefreshText); onRefreshText(); StartCoroutine(ClientUtils.UpdateLayout((RectTransform)SideEffectExecuteRowContainer)); }); CardPropertyForm_SideEffectExecuteRows.Add(cpfsee); } } }
private static void GetAffixTypeFromSideEffectBundle(HashSet <AffixType> affixTypes, SideEffectBundle seb) { foreach (SideEffectExecute see in seb.GetSideEffectExecutes(SideEffectExecute.TriggerTime.OnPlayCard, SideEffectExecute.TriggerRange.Self)) { foreach (SideEffectBase se in see.SideEffectBases) { if (se is Exile_Base) { affixTypes.Add(AffixType.Disposable); } } } if (seb.GetSideEffectExecutes(SideEffectExecute.TriggerTime.OnMechDie, SideEffectExecute.TriggerRange.Self).Count != 0) { affixTypes.Add(AffixType.Die); } if (seb.GetSideEffectExecutes(SideEffectExecute.TriggerTime.OnMechSummon, SideEffectExecute.TriggerRange.Self).Count != 0) { affixTypes.Add(AffixType.BattleCry); } }
private static void ExtractSideEffectBundle(CardTypes cardType, XmlNode node_CardInfo, SideEffectBundle seb) { SideEffectExecute.SideEffectFrom sideEffectFrom = SideEffectExecute.SideEffectFrom.Unknown; switch (cardType) { case CardTypes.Mech: sideEffectFrom = SideEffectExecute.SideEffectFrom.MechSideEffect; break; case CardTypes.Equip: sideEffectFrom = SideEffectExecute.SideEffectFrom.EquipSideEffect; break; case CardTypes.Spell: sideEffectFrom = SideEffectExecute.SideEffectFrom.SpellCard; break; case CardTypes.Energy: sideEffectFrom = SideEffectExecute.SideEffectFrom.EnergyCard; break; } for (int k = 0; k < node_CardInfo.ChildNodes.Count; k++) { XmlNode node_SideEffectExecute = node_CardInfo.ChildNodes.Item(k); SideEffectExecute.ExecuteSetting es = SideEffectExecute.ExecuteSetting.GenerateFromXMLNode(node_SideEffectExecute); List <SideEffectBase> ses = new List <SideEffectBase>(); for (int m = 0; m < node_SideEffectExecute.ChildNodes.Count; m++) { XmlNode node_SideEffect = node_SideEffectExecute.ChildNodes.Item(m); SideEffectBase sideEffect = AllSideEffects.SideEffectsNameDict[node_SideEffect.Attributes["name"].Value].Clone(); GetInfoForSideEffect(node_SideEffect, sideEffect); ses.Add(sideEffect); } SideEffectExecute see = new SideEffectExecute(sideEffectFrom, ses, es); seb.AddSideEffectExecute(see); } }
public static void AddAllCards() { Reset(); SortedDictionary <string, string> cardNameKeyDict = new SortedDictionary <string, string>(); foreach (int v in Enum.GetValues(typeof(LanguageShorts))) { string strName = Enum.GetName(typeof(LanguageShorts), v); cardNameKeyDict[strName] = "cardName_" + strName; } string text; using (StreamReader sr = new StreamReader(CardsXMLFile)) { text = sr.ReadToEnd(); } XmlDocument doc = new XmlDocument(); doc.LoadXml(text); XmlElement node_AllCards = doc.DocumentElement; for (int i = 0; i < node_AllCards.ChildNodes.Count; i++) { XmlNode node_Card = node_AllCards.ChildNodes.Item(i); int cardID = int.Parse(node_Card.Attributes["id"].Value); CardDict.Add(cardID, new CardInfo_Base()); } for (int i = 0; i < node_AllCards.ChildNodes.Count; i++) { XmlNode node_Card = node_AllCards.ChildNodes.Item(i); int cardID = int.Parse(node_Card.Attributes["id"].Value); BaseInfo baseInfo = new BaseInfo(); UpgradeInfo upgradeInfo = new UpgradeInfo(); LifeInfo lifeInfo = new LifeInfo(); BattleInfo battleInfo = new BattleInfo(); MechInfo mechInfo = new MechInfo(); EquipInfo equipInfo = new EquipInfo(); WeaponInfo weaponInfo = new WeaponInfo(); ShieldInfo shieldInfo = new ShieldInfo(); PackInfo packInfo = new PackInfo(); MAInfo maInfo = new MAInfo(); SideEffectBundle sideEffectBundle = new SideEffectBundle(); SideEffectBundle sideEffectBundle_BattleGroundAura = new SideEffectBundle(); for (int j = 0; j < node_Card.ChildNodes.Count; j++) { XmlNode node_CardInfo = node_Card.ChildNodes[j]; switch (node_CardInfo.Attributes["name"].Value) { case "baseInfo": SortedDictionary <string, string> cardNameDict = new SortedDictionary <string, string>(); foreach (KeyValuePair <string, string> kv in cardNameKeyDict) { string cardName = node_CardInfo.Attributes[kv.Value].Value; cardNameDict[kv.Key] = cardName; } baseInfo = new BaseInfo( pictureID: int.Parse(node_CardInfo.Attributes["pictureID"].Value), cardNames: cardNameDict, isTemp: node_CardInfo.Attributes["isTemp"].Value == "True", isHide: node_CardInfo.Attributes["isHide"].Value == "True", metal: int.Parse(node_CardInfo.Attributes["metal"].Value), energy: int.Parse(node_CardInfo.Attributes["energy"].Value), coin: int.Parse(node_CardInfo.Attributes["coin"].Value), effectFactor: 1, limitNum: int.Parse(node_CardInfo.Attributes["limitNum"].Value), cardRareLevel: int.Parse(node_CardInfo.Attributes["cardRareLevel"].Value), shopPrice: int.Parse(node_CardInfo.Attributes["shopPrice"].Value), cardType: (CardTypes)Enum.Parse(typeof(CardTypes), node_CardInfo.Attributes["cardType"].Value)); break; case "upgradeInfo": int u_id = int.Parse(node_CardInfo.Attributes["upgradeCardID"].Value); int d_id = int.Parse(node_CardInfo.Attributes["degradeCardID"].Value); upgradeInfo = new UpgradeInfo( upgradeCardID: u_id, degradeCardID: d_id, cardLevel: 1, cardLevelMax: 1); break; case "lifeInfo": lifeInfo = new LifeInfo( life: int.Parse(node_CardInfo.Attributes["life"].Value), totalLife: int.Parse(node_CardInfo.Attributes["totalLife"].Value)); break; case "battleInfo": battleInfo = new BattleInfo( basicAttack: int.Parse(node_CardInfo.Attributes["basicAttack"].Value), basicArmor: int.Parse(node_CardInfo.Attributes["basicArmor"].Value), basicShield: int.Parse(node_CardInfo.Attributes["basicShield"].Value)); break; case "mechInfo": mechInfo = new MechInfo( isSoldier: node_CardInfo.Attributes["isSoldier"].Value == "True", isDefense: node_CardInfo.Attributes["isDefense"].Value == "True", isSniper: node_CardInfo.Attributes["isSniper"].Value == "True", isCharger: node_CardInfo.Attributes["isCharger"].Value == "True", isFrenzy: node_CardInfo.Attributes["isFrenzy"].Value == "True", isSentry: node_CardInfo.Attributes["isSentry"].Value == "True", slot1: (SlotTypes)Enum.Parse(typeof(SlotTypes), node_CardInfo.Attributes["slot1"].Value), slot2: (SlotTypes)Enum.Parse(typeof(SlotTypes), node_CardInfo.Attributes["slot2"].Value), slot3: (SlotTypes)Enum.Parse(typeof(SlotTypes), node_CardInfo.Attributes["slot3"].Value), slot4: (SlotTypes)Enum.Parse(typeof(SlotTypes), node_CardInfo.Attributes["slot4"].Value)); break; case "weaponInfo": weaponInfo = new WeaponInfo( energy: int.Parse(node_CardInfo.Attributes["energy"].Value), energyMax: int.Parse(node_CardInfo.Attributes["energyMax"].Value), attack: int.Parse(node_CardInfo.Attributes["attack"].Value), weaponType: (WeaponTypes)Enum.Parse(typeof(WeaponTypes), node_CardInfo.Attributes["weaponType"].Value), isSentry: node_CardInfo.Attributes["isSentry"].Value == "True", isFrenzy: node_CardInfo.Attributes["isFrenzy"].Value == "True"); equipInfo = new EquipInfo(SlotTypes.Weapon); break; case "shieldInfo": shieldInfo = new ShieldInfo( armor: int.Parse(node_CardInfo.Attributes["armor"].Value), shield: int.Parse(node_CardInfo.Attributes["shield"].Value), shieldType: (ShieldTypes)Enum.Parse(typeof(ShieldTypes), node_CardInfo.Attributes["shieldType"].Value), isDefense: node_CardInfo.Attributes["isDefense"].Value == "True"); equipInfo = new EquipInfo(SlotTypes.Shield); break; case "packInfo": packInfo = new PackInfo( isFrenzy: node_CardInfo.Attributes["isFrenzy"].Value == "True", isDefense: node_CardInfo.Attributes["isDefense"].Value == "True", isSniper: node_CardInfo.Attributes["isSniper"].Value == "True" ); equipInfo = new EquipInfo(SlotTypes.Pack); break; case "maInfo": maInfo = new MAInfo( isFrenzy: node_CardInfo.Attributes["isFrenzy"].Value == "True", isDefense: node_CardInfo.Attributes["isDefense"].Value == "True", isSniper: node_CardInfo.Attributes["isSniper"].Value == "True" ); equipInfo = new EquipInfo(SlotTypes.MA); break; case "sideEffectsBundle": { ExtractSideEffectBundle(baseInfo.CardType, node_CardInfo, sideEffectBundle); break; } case "sideEffectsBundle_Aura": { ExtractSideEffectBundle(baseInfo.CardType, node_CardInfo, sideEffectBundle_BattleGroundAura); break; } } } switch (baseInfo.CardType) { case CardTypes.Mech: addCard(new CardInfo_Mech( cardID: cardID, baseInfo: baseInfo, upgradeInfo: upgradeInfo, lifeInfo: lifeInfo, battleInfo: battleInfo, mechInfo: mechInfo, sideEffectBundle: sideEffectBundle, sideEffectBundle_BattleGroundAura: sideEffectBundle_BattleGroundAura)); break; case CardTypes.Equip: addCard(new CardInfo_Equip( cardID: cardID, baseInfo: baseInfo, upgradeInfo: upgradeInfo, equipInfo: equipInfo, weaponInfo: weaponInfo, shieldInfo: shieldInfo, packInfo: packInfo, maInfo: maInfo, sideEffectBundle: sideEffectBundle, sideEffectBundle_BattleGroundAura: sideEffectBundle_BattleGroundAura)); break; case CardTypes.Spell: addCard(new CardInfo_Spell( cardID: cardID, baseInfo: baseInfo, upgradeInfo: upgradeInfo, sideEffectBundle: sideEffectBundle, sideEffectBundle_BattleGroundAura: sideEffectBundle_BattleGroundAura)); break; case CardTypes.Energy: addCard(new CardInfo_Spell( cardID: cardID, baseInfo: baseInfo, upgradeInfo: upgradeInfo, sideEffectBundle: sideEffectBundle, sideEffectBundle_BattleGroundAura: sideEffectBundle_BattleGroundAura)); break; } } // Check all upgradeID and degradeID valid in library foreach (KeyValuePair <int, CardInfo_Base> kv in CardDict) { int uid = kv.Value.UpgradeInfo.UpgradeCardID; int did = kv.Value.UpgradeInfo.DegradeCardID; if (uid != -1) { if (!CardDict.ContainsKey(uid)) { kv.Value.UpgradeInfo.UpgradeCardID = -1; NeedReload = true; } } if (did != -1) { if (!CardDict.ContainsKey(did)) { kv.Value.UpgradeInfo.DegradeCardID = -1; NeedReload = true; } } } //TODO Check all id in SE // Make all upgradeID and degradeID linked foreach (KeyValuePair <int, CardInfo_Base> kv in CardDict) { int uid = kv.Value.UpgradeInfo.UpgradeCardID; int did = kv.Value.UpgradeInfo.DegradeCardID; if (uid != -1) { CardInfo_Base uCard = CardDict[uid]; if (uCard.UpgradeInfo.DegradeCardID != kv.Key) { if (uCard.UpgradeInfo.DegradeCardID == -1) { uCard.UpgradeInfo.DegradeCardID = kv.Key; } else { CardInfo_Base uCard_ori_dCard = CardDict[uCard.UpgradeInfo.DegradeCardID]; if (uCard_ori_dCard.UpgradeInfo.UpgradeCardID == uCard.CardID) { kv.Value.UpgradeInfo.UpgradeCardID = -1; } else { uCard.UpgradeInfo.DegradeCardID = kv.Key; } } NeedReload = true; } } if (did != -1) { CardInfo_Base dCard = CardDict[did]; if (dCard.UpgradeInfo.UpgradeCardID != kv.Key) { if (dCard.UpgradeInfo.UpgradeCardID == -1) { dCard.UpgradeInfo.UpgradeCardID = kv.Key; } else { CardInfo_Base dCard_ori_uCard = CardDict[dCard.UpgradeInfo.UpgradeCardID]; if (dCard_ori_uCard.UpgradeInfo.DegradeCardID == dCard.CardID) { kv.Value.UpgradeInfo.DegradeCardID = -1; } else { dCard.UpgradeInfo.UpgradeCardID = kv.Key; } } NeedReload = true; } } } // Check Series valid, no cycle foreach (KeyValuePair <int, CardInfo_Base> kv in CardDict) { List <int> cardSeries = GetCardSeries(kv.Key); int cardLevelMax = cardSeries.Count; kv.Value.UpgradeInfo.CardLevelMax = cardLevelMax; int cardLevel = 0; foreach (int cardID in cardSeries) { cardLevel++; if (cardID == kv.Key) { break; } } kv.Value.UpgradeInfo.CardLevel = cardLevel; } //If any problem, refresh XML and reload if (NeedReload) { NeedReload = false; RefreshAllCardXML(); ReloadCardXML(); } }