Exemple #1
0
    public void Initialize(SideEffectExecute see, UnityAction onRefreshText, bool isReadOnly, bool isExecuteSettingTypeChanged)
    {
        Initializing = true;
        foreach (PropertyFormRow cpfr in CardPropertyFormRows)
        {
            cpfr.PoolRecycle();
        }

        CardPropertyFormRows.Clear();

        bool isScriptExecuteSetting = see.M_ExecuteSetting is ScriptExecuteSettingBase;

        PFR_ScriptExecuteSettingType.gameObject.SetActive(isScriptExecuteSetting);
        ScriptExecuteSettingBase sesb = null;

        if (isScriptExecuteSetting)
        {
            sesb = (ScriptExecuteSettingBase)see.M_ExecuteSetting;
            ScriptExecuteSettingTypeDropdown.options.Clear();
            foreach (string option in AllScriptExecuteSettings.ScriptExecuteSettingsNameDict.Keys.ToList())
            {
                ScriptExecuteSettingTypeDropdown.options.Add(new Dropdown.OptionData(option));
            }

            ScriptExecuteSettingTypeDropdown.onValueChanged.RemoveAllListeners();
            SetScriptExecuteSettingType(sesb.Name);
            ScriptExecuteSettingTypeDropdown.onValueChanged.AddListener(delegate(int index)
            {
                string scriptExecuteSettingName  = ScriptExecuteSettingTypeDropdown.options[index].text;
                ScriptExecuteSettingBase newSESB = AllScriptExecuteSettings.GetScriptExecuteSetting(scriptExecuteSettingName);
                if (see != null)
                {
                    see.M_ExecuteSetting = newSESB;
                }

                Initialize(see, onRefreshText, isReadOnly, false);
                onRefreshText();
                StartCoroutine(ClientUtils.UpdateLayout((RectTransform)ExecuteRowContainer));
                StartCoroutine(ClientUtils.UpdateLayout((RectTransform)UIManager.Instance.GetBaseUIForm <CardEditorPanel>().CardPropertiesContainer));
            });

            CardEditorPanel_Params.GenerateParamRows(null, sesb.M_SideEffectParam, onRefreshText, delegate { Initialize(see, onRefreshText, isReadOnly, false); }, ExecuteRowContainer, CardPropertyFormRows, null, delegate
            {
                StartCoroutine(ClientUtils.UpdateLayout((RectTransform)ExecuteRowContainer));
                StartCoroutine(ClientUtils.UpdateLayout((RectTransform)UIManager.Instance.GetBaseUIForm <CardEditorPanel>().CardPropertiesContainer));
            });
        }

        PropertyFormRow            cpfr_TriggerRange     = null;
        UnityAction <string, bool> _setValueTriggerRange = null;
        PropertyFormRow            cpfr_TriggerTime      = PropertyFormRow.BaseInitialize(PropertyFormRow.CardPropertyFormRowType.Dropdown, ExecuteRowContainer, "CardEditorPanel_TriggerTime",
                                                                                          delegate(string value_str)
        {
            SideEffectExecute.TriggerTime value = (SideEffectExecute.TriggerTime)Enum.Parse(typeof(SideEffectExecute.TriggerTime), value_str);
            see.M_ExecuteSetting.TriggerTime    = value;
            List <string> trList = SideEffectExecute.GetTriggerRangeListByTriggerTime(see.M_ExecuteSetting.TriggerTime);
            ((PropertyFormRow_Dropdown)cpfr_TriggerRange).RefreshDropdownOptionList(trList);
            if (!Initializing && (see.ExecuteSettingType == SideEffectExecute.ExecuteSettingTypes.Scripts || see.ExecuteSettingType == SideEffectExecute.ExecuteSettingTypes.Others))
            {
                _setValueTriggerRange(trList[0], true);
            }
            onRefreshText?.Invoke();
        },
                                                                                          out UnityAction <string, bool> _setValueTriggerTime, sesb != null ? ScriptExecuteSettingBase.HashSetTriggerTimeToListString(sesb.ValidTriggerTimes) : triggerTimeTypeList);

        CardPropertyFormRows.Add(cpfr_TriggerTime);
        cpfr_TriggerTime.SetReadOnly(isReadOnly);

        cpfr_TriggerRange = PropertyFormRow.BaseInitialize(PropertyFormRow.CardPropertyFormRowType.Dropdown, ExecuteRowContainer, "CardEditorPanel_TriggerRange",
                                                           delegate(string value_str)
        {
            SideEffectExecute.TriggerRange value = (SideEffectExecute.TriggerRange)Enum.Parse(typeof(SideEffectExecute.TriggerRange), value_str);
            see.M_ExecuteSetting.TriggerRange    = value;
            onRefreshText?.Invoke();
        },
                                                           out _setValueTriggerRange, SideEffectExecute.GetTriggerRangeListByTriggerTime(see.M_ExecuteSetting.TriggerTime));
        CardPropertyFormRows.Add(cpfr_TriggerRange);
        cpfr_TriggerRange.SetReadOnly(isReadOnly);
        ((PropertyFormRow_Dropdown)cpfr_TriggerRange).RefreshDropdownOptionList(SideEffectExecute.GetTriggerRangeListByTriggerTime(see.M_ExecuteSetting.TriggerTime));

        PropertyFormRow cpfr_TriggerTimes = PropertyFormRow.BaseInitialize(PropertyFormRow.CardPropertyFormRowType.InputField, ExecuteRowContainer, "CardEditorPanel_TriggerTimes",
                                                                           delegate(string value_str)
        {
            if (int.TryParse(value_str, out int value))
            {
                see.M_ExecuteSetting.TriggerTimes = value;
                onRefreshText?.Invoke();
            }
        },
                                                                           out UnityAction <string, bool> _setValueTriggerTimes);

        CardPropertyFormRows.Add(cpfr_TriggerTimes);
        cpfr_TriggerTimes.SetReadOnly(sesb != null ? sesb.LockedTriggerTimes != ScriptExecuteSettingBase.UNLOCKED_EXECUTESETTING_TIMES : isReadOnly);

        PropertyFormRow cpfr_TriggerDelayTimes = PropertyFormRow.BaseInitialize(PropertyFormRow.CardPropertyFormRowType.InputField, ExecuteRowContainer, "CardEditorPanel_TriggerDelayTimes",
                                                                                delegate(string value_str)
        {
            if (int.TryParse(value_str, out int value))
            {
                see.M_ExecuteSetting.TriggerDelayTimes = value;
                onRefreshText?.Invoke();
            }
        },
                                                                                out UnityAction <string, bool> _setValueTriggerDelayTimes);

        CardPropertyFormRows.Add(cpfr_TriggerDelayTimes);
        cpfr_TriggerDelayTimes.SetReadOnly(sesb != null ? sesb.LockedTriggerDelayTimes != ScriptExecuteSettingBase.UNLOCKED_EXECUTESETTING_TIMES : isReadOnly);

        PropertyFormRow            cpfr_RemoveTriggerRange     = null;
        UnityAction <string, bool> _setValueRemoveTriggerRange = null;
        PropertyFormRow            cpfr_RemoveTriggerTime      = PropertyFormRow.BaseInitialize(PropertyFormRow.CardPropertyFormRowType.Dropdown, ExecuteRowContainer, "CardEditorPanel_RemoveTriggerTime",
                                                                                                delegate(string value_str)
        {
            SideEffectExecute.TriggerTime value    = (SideEffectExecute.TriggerTime)Enum.Parse(typeof(SideEffectExecute.TriggerTime), value_str);
            see.M_ExecuteSetting.RemoveTriggerTime = value;
            List <string> trList = SideEffectExecute.GetTriggerRangeListByTriggerTime(see.M_ExecuteSetting.RemoveTriggerTime);
            ((PropertyFormRow_Dropdown)cpfr_RemoveTriggerRange).RefreshDropdownOptionList(trList);
            if (!Initializing && (see.ExecuteSettingType == SideEffectExecute.ExecuteSettingTypes.Scripts || see.ExecuteSettingType == SideEffectExecute.ExecuteSettingTypes.Others))
            {
                _setValueRemoveTriggerRange(trList[0], true);
            }
            onRefreshText?.Invoke();
        },
                                                                                                out UnityAction <string, bool> _setValueRemoveTriggerTime, sesb != null ? ScriptExecuteSettingBase.HashSetTriggerTimeToListString(sesb.ValidRemoveTriggerTimes) : triggerTimeTypeList);

        CardPropertyFormRows.Add(cpfr_RemoveTriggerTime);
        cpfr_RemoveTriggerTime.SetReadOnly(isReadOnly);

        cpfr_RemoveTriggerRange = PropertyFormRow.BaseInitialize(PropertyFormRow.CardPropertyFormRowType.Dropdown, ExecuteRowContainer, "CardEditorPanel_RemoveTriggerRange",
                                                                 delegate(string value_str)
        {
            SideEffectExecute.TriggerRange value    = (SideEffectExecute.TriggerRange)Enum.Parse(typeof(SideEffectExecute.TriggerRange), value_str);
            see.M_ExecuteSetting.RemoveTriggerRange = value;
            onRefreshText?.Invoke();
        },
                                                                 out _setValueRemoveTriggerRange, SideEffectExecute.GetTriggerRangeListByTriggerTime(see.M_ExecuteSetting.RemoveTriggerTime));
        CardPropertyFormRows.Add(cpfr_RemoveTriggerRange);
        cpfr_RemoveTriggerRange.SetReadOnly(isReadOnly);
        ((PropertyFormRow_Dropdown)cpfr_RemoveTriggerRange).RefreshDropdownOptionList(SideEffectExecute.GetTriggerRangeListByTriggerTime(see.M_ExecuteSetting.RemoveTriggerTime));

        PropertyFormRow cpfr_RemoveTriggerTimes = PropertyFormRow.BaseInitialize(PropertyFormRow.CardPropertyFormRowType.InputField, ExecuteRowContainer, "CardEditorPanel_RemoveTriggerTimes",
                                                                                 delegate(string value_str)
        {
            if (int.TryParse(value_str, out int value))
            {
                see.M_ExecuteSetting.RemoveTriggerTimes = value;
                onRefreshText?.Invoke();
            }
        },
                                                                                 out UnityAction <string, bool> _setValueRemoveTriggerTimes);

        CardPropertyFormRows.Add(cpfr_RemoveTriggerTimes);
        cpfr_RemoveTriggerTimes.SetReadOnly(sesb != null ? sesb.LockedRemoveTriggerTimes != ScriptExecuteSettingBase.UNLOCKED_EXECUTESETTING_TIMES : isReadOnly);

        PropertyFormRow cpfr_RemoveTriggerDelayTimes = PropertyFormRow.BaseInitialize(PropertyFormRow.CardPropertyFormRowType.InputField, ExecuteRowContainer, "CardEditorPanel_RemoveTriggerDelayTimes",
                                                                                      delegate(string value_str)
        {
            if (int.TryParse(value_str, out int value))
            {
                see.M_ExecuteSetting.RemoveTriggerDelayTimes = value;
                onRefreshText?.Invoke();
            }
        },
                                                                                      out UnityAction <string, bool> _setValueRemoveTriggerDelayTimes);

        CardPropertyFormRows.Add(cpfr_RemoveTriggerDelayTimes);
        cpfr_RemoveTriggerDelayTimes.SetReadOnly(sesb != null ? sesb.LockedRemoveTriggerDelayTimes != ScriptExecuteSettingBase.UNLOCKED_EXECUTESETTING_TIMES : isReadOnly);

        _setValueTriggerTime(sesb != null ? (sesb.ValidTriggerTimes.Count != 0 ? sesb.ValidTriggerTimes.ToList()[0].ToString() : SideEffectExecute.TriggerTime.None.ToString()) : see.M_ExecuteSetting.TriggerTime.ToString(), isExecuteSettingTypeChanged);
        _setValueTriggerRange(see.M_ExecuteSetting.TriggerRange.ToString(), isExecuteSettingTypeChanged);
        _setValueTriggerTimes(sesb != null ? (sesb.LockedTriggerTimes != ScriptExecuteSettingBase.UNLOCKED_EXECUTESETTING_TIMES ? sesb.LockedTriggerTimes.ToString() : see.M_ExecuteSetting.TriggerTimes.ToString()) : see.M_ExecuteSetting.TriggerTimes.ToString(), isExecuteSettingTypeChanged);
        _setValueTriggerDelayTimes(sesb != null ? (sesb.LockedTriggerDelayTimes != ScriptExecuteSettingBase.UNLOCKED_EXECUTESETTING_TIMES ? sesb.LockedTriggerDelayTimes.ToString() : see.M_ExecuteSetting.TriggerDelayTimes.ToString()) : see.M_ExecuteSetting.TriggerDelayTimes.ToString(), isExecuteSettingTypeChanged);
        _setValueRemoveTriggerTime(sesb != null ? (sesb.ValidRemoveTriggerTimes.Count != 0 ? sesb.ValidRemoveTriggerTimes.ToList()[0].ToString() : SideEffectExecute.TriggerTime.None.ToString()) : see.M_ExecuteSetting.RemoveTriggerTime.ToString(), isExecuteSettingTypeChanged);
        _setValueRemoveTriggerRange(see.M_ExecuteSetting.RemoveTriggerRange.ToString(), isExecuteSettingTypeChanged);
        _setValueRemoveTriggerTimes(sesb != null ? (sesb.LockedRemoveTriggerTimes != ScriptExecuteSettingBase.UNLOCKED_EXECUTESETTING_TIMES ? sesb.LockedRemoveTriggerTimes.ToString() : see.M_ExecuteSetting.RemoveTriggerTimes.ToString()) : see.M_ExecuteSetting.RemoveTriggerTimes.ToString(), isExecuteSettingTypeChanged);
        _setValueRemoveTriggerDelayTimes(sesb != null ? (sesb.LockedRemoveTriggerDelayTimes != ScriptExecuteSettingBase.UNLOCKED_EXECUTESETTING_TIMES ? sesb.LockedRemoveTriggerDelayTimes.ToString() : see.M_ExecuteSetting.RemoveTriggerDelayTimes.ToString()) : see.M_ExecuteSetting.RemoveTriggerDelayTimes.ToString(), isExecuteSettingTypeChanged);

        Initializing = false;
    }
    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);
        }
    }