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); } }