private static void addSideEffect(SideEffectBase sideEffectBase) { if (!SideEffectsNameDict.ContainsKey(sideEffectBase.Name)) { SideEffectsNameDict.Add(sideEffectBase.Name, sideEffectBase); } }
public static SideEffectBase GetNewSideEffect(string SideEffectName) { Type type = mSideEffecMap[SideEffectName]; SideEffectBase newSE = (SideEffectBase)type.Assembly.CreateInstance(type.ToString()); return(newSE); }
public static void GetInfoForSideEffect(XmlNode node_SideEffect, SideEffectBase sideEffect) { sideEffect.M_SideEffectParam.GetParamsFromXMLNode(node_SideEffect); if (sideEffect is AddPlayerBuff_Base se) { se.BuffName = node_SideEffect.Attributes["BuffName"].Value; XmlNode node_Buff = node_SideEffect.FirstChild; GetInfoForBuff(node_Buff, se); } }
public static void AddAllSideEffects() { Reset(); SortedDictionary <string, string> descKeyDict = new SortedDictionary <string, string>(); foreach (int v in Enum.GetValues(typeof(LanguageShorts))) { string strName = Enum.GetName(typeof(LanguageShorts), v); descKeyDict[strName] = "desc_" + strName; } string text; using (StreamReader sr = new StreamReader(SideEffectsXMLFile)) { text = sr.ReadToEnd(); } XmlDocument doc = new XmlDocument(); doc.LoadXml(text); XmlElement node_AllSideEffects = doc.DocumentElement; for (int i = 0; i < node_AllSideEffects.ChildNodes.Count; i++) { XmlNode node_SideEffect = node_AllSideEffects.ChildNodes.Item(i); string name = node_SideEffect.Attributes["name"].Value; SideEffectBase se = (SideEffectBase)CurrentAssembly.CreateInstance("SideEffects." + name); if (se == null) { Utils.DebugLog("SideEffects: " + name + " does not exist"); continue; } se.Name = node_SideEffect.Attributes["name"].Value; se.DescRaws = new SortedDictionary <string, string>(); foreach (KeyValuePair <string, string> kv in descKeyDict) { se.DescRaws[kv.Key] = node_SideEffect.Attributes[kv.Value].Value; } if (se is TargetSideEffect t_se) { t_se.M_SideEffectParam.GetParam("TargetSelect").SetValue(t_se.ValidTargetSelects[0].ToString()); Dictionary <TargetSelect, List <TargetRange> > validTargetRangeDict = TargetSelector.TargetSelectorPresets[t_se.TargetSelectorType]; TargetRange validTargetRange = validTargetRangeDict[t_se.ValidTargetSelects[0]][0]; t_se.M_SideEffectParam.GetParam("TargetRange").SetValue(validTargetRange.ToString()); } addSideEffect(se); } }
public static void GetInfoForBuff(XmlNode node_Buff, AddPlayerBuff_Base parentSE) { parentSE.AttachedBuffSEE.M_ExecuteSetting = SideEffectExecute.ExecuteSetting.GenerateFromXMLNode(node_Buff); GetInfoForSideEffect(node_Buff, parentSE.AttachedBuffSEE.SideEffectBases[0]); for (int i = 0; i < node_Buff.ChildNodes.Count; i++) { XmlNode node_Buff_Sub_SideEffect = node_Buff.ChildNodes.Item(i); SideEffectBase sub_SideEffect = AllSideEffects.SideEffectsNameDict[node_Buff_Sub_SideEffect.Attributes["name"].Value].Clone(); GetInfoForSideEffect(node_Buff_Sub_SideEffect, sub_SideEffect); parentSE.AttachedBuffSEE.SideEffectBases[0].Sub_SideEffect.Add(sub_SideEffect); } }
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); } }
private List <CardPropertyForm_SideEffect> CardPropertyForm_SubSideEffectBaseRows = new List <CardPropertyForm_SideEffect>(); //Buff SE的Sub_SideEffect /// <summary> /// Initialize /// </summary> /// <param name="see">Parent see</param> /// <param name="ses">Parent Sub_SideEffectBases of a SideEffectBase</param> /// <param name="se">Self info</param> /// <param name="onRefreshText"></param> /// <param name="onDeleteButtonClick"></param> public void Initialize(SideEffectExecute see, List <SideEffectBase> ses, SideEffectBase se, UnityAction onRefreshText, UnityAction onDeleteButtonClick) { SideEffectTypeDropdown.options.Clear(); if (se is PlayerBuffSideEffects) { foreach (string option in AllBuffs.BuffDict.Keys.ToList()) { SideEffectTypeDropdown.options.Add(new Dropdown.OptionData(option)); } } else { foreach (string option in AllSideEffects.SideEffectsNameDict.Keys.ToList()) { SideEffectTypeDropdown.options.Add(new Dropdown.OptionData(option)); } } SideEffectTypeDropdown.onValueChanged.RemoveAllListeners(); SetValue(se.Name); SideEffectTypeDropdown.onValueChanged.AddListener(delegate(int index) { string sideEffectName = SideEffectTypeDropdown.options[index].text; SideEffectBase newSE = AllSideEffects.GetSideEffect(sideEffectName); if (see != null) { see.SideEffectBases.Remove(se); see.SideEffectBases.Add(newSE); } if (ses != null) { ses.Remove(se); ses.Add(newSE); } Initialize(see, ses, newSE, onRefreshText, onDeleteButtonClick); onRefreshText(); StartCoroutine(ClientUtils.UpdateLayout((RectTransform)ParamRowContainer)); StartCoroutine(ClientUtils.UpdateLayout((RectTransform)UIManager.Instance.GetBaseUIForm <CardEditorPanel>().CardPropertiesContainer)); }); DeleteButton.onClick.RemoveAllListeners(); DeleteButton.onClick.AddListener( delegate { if (se is PlayerBuffSideEffects) { return; } onDeleteButtonClick(); StartCoroutine(ClientUtils.UpdateLayout((RectTransform)ParamRowContainer)); StartCoroutine(ClientUtils.UpdateLayout((RectTransform)UIManager.Instance.GetBaseUIForm <CardEditorPanel>().CardPropertiesContainer)); }); DeleteButton.gameObject.SetActive(!(se is PlayerBuffSideEffects)); AddButton.gameObject.SetActive(se is PlayerBuffSideEffects); if (se is PlayerBuffSideEffects buff_SE) { AddButton.onClick.RemoveAllListeners(); AddButton.onClick.AddListener( delegate { buff_SE.Sub_SideEffect.Add(AllSideEffects.GetSideEffect("Damage")); Initialize(see, ses, se, onRefreshText, onDeleteButtonClick); StartCoroutine(ClientUtils.UpdateLayout((RectTransform)ParamRowContainer)); StartCoroutine(ClientUtils.UpdateLayout((RectTransform)UIManager.Instance.GetBaseUIForm <CardEditorPanel>().CardPropertiesContainer)); }); } SideEffectTypeDropdown.interactable = !(se is PlayerBuffSideEffects); foreach (PropertyFormRow cpfr in CardPropertyFormRows) { cpfr.PoolRecycle(); } CardPropertyFormRows.Clear(); foreach (CardPropertyForm_SideEffectExecute cpfsee in CardPropertyForm_SideEffectExecuteRows) { cpfsee.PoolRecycle(); } CardPropertyForm_SideEffectExecuteRows.Clear(); CardEditorPanel_Params.GenerateParamRows(se, se.M_SideEffectParam, onRefreshText, delegate { Initialize(see, ses, se, onRefreshText, onDeleteButtonClick); }, ParamRowContainer, CardPropertyFormRows, CardPropertyForm_SideEffectExecuteRows, delegate { StartCoroutine(ClientUtils.UpdateLayout((RectTransform)ParamRowContainer)); StartCoroutine(ClientUtils.UpdateLayout((RectTransform)UIManager.Instance.GetBaseUIForm <CardEditorPanel>().CardPropertiesContainer)); }); foreach (CardPropertyForm_SideEffect cpfse in CardPropertyForm_SubSideEffectBaseRows) { cpfse.PoolRecycle(); } CardPropertyForm_SubSideEffectBaseRows.Clear(); foreach (SideEffectBase sub_se in se.Sub_SideEffect) { CardPropertyForm_SideEffect sub_se_row = GameObjectPoolManager.Instance.PoolDict[GameObjectPoolManager.PrefabNames.CardPropertyForm_SideEffect].AllocateGameObject <CardPropertyForm_SideEffect>(ParamRowContainer); sub_se_row.Initialize( see: null, ses: se.Sub_SideEffect, se: sub_se, onRefreshText: onRefreshText, onDeleteButtonClick: delegate { se.Sub_SideEffect.Remove(sub_se); Initialize(see, ses, se, onRefreshText, onDeleteButtonClick); }); CardPropertyForm_SubSideEffectBaseRows.Add(sub_se_row); } }
public static void GenerateParamRows(SideEffectBase se, SideEffectParam sep, UnityAction onRefreshText, UnityAction reInitialize, Transform parentContainer, List <PropertyFormRow> pfr_List, List <CardPropertyForm_SideEffectExecute> pfr_List_SEE, UnityAction refreshContainer) { foreach (SideEffectValue sev in sep.SideEffectValues) { string sev_Prefix = "SideEffectValueNames_"; switch (sev.ValueType) { case SideEffectValue.ValueTypes.ConstInt: { SideEffectValue_ConstInt s = (SideEffectValue_ConstInt)sev; if (s.EnumType == null) { bool showInputField = true; if (s.Name == "ChoiceCount") { if (se is TargetSideEffect t_se) { if (t_se.TargetSelect != TargetSelect.Multiple && t_se.TargetSelect != TargetSelect.MultipleRandom) { showInputField = false; } } } if (showInputField) { PropertyFormRow row = PropertyFormRow.BaseInitialize( type : PropertyFormRow.CardPropertyFormRowType.InputField, parent : parentContainer, labelStrKey : sev_Prefix + sev.Name, onValueChangeAction : delegate(string value_str) { if (int.TryParse(value_str, out int res)) { s.Value = res; } onRefreshText?.Invoke(); }, setValue: out UnityAction <string, bool> setValue); setValue(s.Value.ToString(), false); pfr_List.Add(row); } } else { if (s.EnumType == typeof(CardDeck)) { PropertyFormRow row = PropertyFormRow.BaseInitialize( type : PropertyFormRow.CardPropertyFormRowType.InputField, parent : parentContainer, labelStrKey : sev_Prefix + sev.Name, onValueChangeAction : delegate(string value_str) { if (int.TryParse(value_str, out int res)) { bool hasCard = AllCards.CardDict.ContainsKey(res); if (hasCard) { s.Value = res; onRefreshText?.Invoke(); } } }, setValue: out UnityAction <string, bool> setValue, dropdownOptionList: null, onButtonClick: delegate { UIManager.Instance.GetBaseUIForm <CardEditorPanel>().ChangeCard(s.Value); } ); setValue(s.Value.ToString(), false); pfr_List.Add(row); } else { List <string> enumList = new List <string>(); if (se is TargetSideEffect t_se1 && s.EnumType == typeof(TargetSelect)) { foreach (TargetSelect targetRange in t_se1.ValidTargetSelects) { enumList.Add(targetRange.ToString()); } PropertyFormRow row = PropertyFormRow.BaseInitialize( type : PropertyFormRow.CardPropertyFormRowType.Dropdown, parent : parentContainer, labelStrKey : sev_Prefix + sev.Name, onValueChangeAction : delegate(string value_str) { s.Value = (int)Enum.Parse(s.EnumType, value_str); PropertyFormRow targetRangeRow = null; foreach (PropertyFormRow cardPropertyFormRow in pfr_List) { if (cardPropertyFormRow.LabelStrKey.Equals(sev_Prefix + "TargetRange")) { targetRangeRow = cardPropertyFormRow; break; } } if (targetRangeRow) { int siblingIndex = targetRangeRow.transform.GetSiblingIndex(); targetRangeRow.PoolRecycle(); pfr_List.Remove(targetRangeRow); Dictionary <TargetSelect, List <TargetRange> > dict = TargetSelector.TargetSelectorPresets[t_se1.TargetSelectorType]; List <string> enumList_TargetRange = new List <string>(); List <TargetRange> nlist = dict[t_se1.TargetSelect]; foreach (TargetRange targetRange in nlist) { enumList_TargetRange.Add(targetRange.ToString()); } SideEffectValue_ConstInt targetRangeSEV = (SideEffectValue_ConstInt)se.M_SideEffectParam.GetParam("TargetRange"); if (targetRangeSEV != null) { PropertyFormRow new_TargetRangeRow = PropertyFormRow.BaseInitialize( PropertyFormRow.CardPropertyFormRowType.Dropdown, parentContainer, sev_Prefix + targetRangeSEV.Name, delegate(string v_str) { targetRangeSEV.Value = (int)Enum.Parse(targetRangeSEV.EnumType, v_str); onRefreshText?.Invoke(); }, out UnityAction <string, bool> _setValue, enumList_TargetRange); targetRangeSEV.SetValue(enumList_TargetRange[0]); _setValue(Enum.GetName(targetRangeSEV.EnumType, targetRangeSEV.Value), false); onRefreshText?.Invoke(); pfr_List.Add(new_TargetRangeRow); new_TargetRangeRow.transform.SetSiblingIndex(siblingIndex); } } if (s.Value == (int)TargetSelect.Multiple || s.Value == (int)TargetSelect.MultipleRandom) { PropertyFormRow choiceCountRow = null; foreach (PropertyFormRow cardPropertyFormRow in pfr_List) { if (cardPropertyFormRow.LabelStrKey.Equals(sev_Prefix + "ChoiceCount")) { choiceCountRow = cardPropertyFormRow; break; } } if (!choiceCountRow) { SideEffectValue_ConstInt choiceCountSEV = (SideEffectValue_ConstInt)se.M_SideEffectParam.GetParam("ChoiceCount"); if (choiceCountSEV != null) { PropertyFormRow new_ChoiceCountRow = PropertyFormRow.BaseInitialize( PropertyFormRow.CardPropertyFormRowType.InputField, parentContainer, sev_Prefix + choiceCountSEV.Name, delegate(string v_str) { if (int.TryParse(v_str, out int res)) { choiceCountSEV.Value = res; } onRefreshText?.Invoke(); }, out UnityAction <string, bool> _setValue); _setValue(choiceCountSEV.Value.ToString(), false); onRefreshText?.Invoke(); pfr_List.Add(new_ChoiceCountRow); refreshContainer(); } } } else { PropertyFormRow choiceCountRow = null; foreach (PropertyFormRow cardPropertyFormRow in pfr_List) { if (cardPropertyFormRow.LabelStrKey.Equals(sev_Prefix + "ChoiceCount")) { choiceCountRow = cardPropertyFormRow; break; } } if (choiceCountRow) { choiceCountRow.PoolRecycle(); pfr_List.Remove(choiceCountRow); refreshContainer(); } } onRefreshText?.Invoke(); }, setValue: out UnityAction <string, bool> setValue, dropdownOptionList: enumList); setValue(Enum.GetName(s.EnumType, s.Value), false); onRefreshText?.Invoke(); pfr_List.Add(row); }