コード例 #1
0
ファイル: AllSideEffects.cs プロジェクト: tuita520/Mech-Storm
 private static void addSideEffect(SideEffectBase sideEffectBase)
 {
     if (!SideEffectsNameDict.ContainsKey(sideEffectBase.Name))
     {
         SideEffectsNameDict.Add(sideEffectBase.Name, sideEffectBase);
     }
 }
コード例 #2
0
    public static SideEffectBase GetNewSideEffect(string SideEffectName)
    {
        Type           type  = mSideEffecMap[SideEffectName];
        SideEffectBase newSE = (SideEffectBase)type.Assembly.CreateInstance(type.ToString());

        return(newSE);
    }
コード例 #3
0
ファイル: AllCards.cs プロジェクト: tuita520/Mech-Storm
 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);
     }
 }
コード例 #4
0
ファイル: AllSideEffects.cs プロジェクト: tuita520/Mech-Storm
    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);
        }
    }
コード例 #5
0
ファイル: AllCards.cs プロジェクト: tuita520/Mech-Storm
 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);
     }
 }
コード例 #6
0
ファイル: AllCards.cs プロジェクト: tuita520/Mech-Storm
    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);
        }
    }
コード例 #7
0
    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);
        }
    }
コード例 #8
0
    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);
                        }