bool FindTarget(SideEffectExecute see) { foreach (SideEffectBase se in see.SideEffectBases) { if (se is TargetSideEffect tse && tse.IsNeedChoice) { if (tse is TargetSideEffectEquip && ((TargetSideEffectEquip)tse).IsNeedChoice) { HasTargetEquip = true; targetEquipRange = ((TargetSideEffectEquip)tse).TargetRange; } else { TargetRange temp = tse.TargetRange; if ((temp & TargetRange.Ships) != TargetRange.None || (temp & TargetRange.Decks) != TargetRange.None) { HasTargetShip = true; targetShipRange = temp; } if ((temp & TargetRange.Mechs) != TargetRange.None) { HasTargetMech = true; targetMechRange = temp; } } } } return(HasTarget); }
private static void PileBuff(SideEffectExecute see, SideEffectExecute newSee) { PlayerBuffSideEffects buff = (PlayerBuffSideEffects)newSee.SideEffectBases[0]; if (buff.M_SideEffectParam.GetParam_Bool("CanPiled")) //可以堆叠 { if ((PlayerBuffSideEffects.BuffPiledBy)buff.M_SideEffectParam.GetParam_ConstInt("PiledBy") == PlayerBuffSideEffects.BuffPiledBy.RemoveTriggerTimes) { see.M_ExecuteSetting.RemoveTriggerDelayTimes += newSee.M_ExecuteSetting.RemoveTriggerDelayTimes; see.M_ExecuteSetting.RemoveTriggerTimes += newSee.M_ExecuteSetting.RemoveTriggerTimes; } else if ((PlayerBuffSideEffects.BuffPiledBy)buff.M_SideEffectParam.GetParam_ConstInt("PiledBy") == PlayerBuffSideEffects.BuffPiledBy.RemoveTriggerDelayTimes) { see.M_ExecuteSetting.RemoveTriggerDelayTimes += newSee.M_ExecuteSetting.RemoveTriggerDelayTimes; } else if ((PlayerBuffSideEffects.BuffPiledBy)buff.M_SideEffectParam.GetParam_ConstInt("PiledBy") == PlayerBuffSideEffects.BuffPiledBy.Value) { foreach (SideEffectBase ori_buff in see.SideEffectBases[0].Sub_SideEffect) { foreach (SideEffectBase add_buff in buff.Sub_SideEffect) { if (ori_buff.GetType() == add_buff.GetType()) //同类buff同类值叠加,并将倍率重置为1 { ori_buff.M_SideEffectParam.Plus(add_buff.M_SideEffectParam); } } } } } }
public IEnumerator Co_UpdateValue(SideEffectExecute buffSee, PlayerBuffUpdateRequest.UpdateTypes updateType) { BuffDescText.text = Utils.TextMeshProColorStringConvertToText(((PlayerBuffSideEffects)buffSee.SideEffectBases[0]).GenerateDesc()); PlayerBuffSideEffects buff = (PlayerBuffSideEffects)buffSee.SideEffectBases[0]; int buffValue = GetBuffValue(buffSee, buff); if (buffValue >= 0) { if (updateType == PlayerBuffUpdateRequest.UpdateTypes.Trigger) { BuffAnim.SetTrigger("Jump"); AudioManager.Instance.SoundPlay("sfx/OnBuffTrigger", 0.7f); } else if (updateType == PlayerBuffUpdateRequest.UpdateTypes.Refresh) { BuffAnim.SetTrigger("Rotate"); AudioManager.Instance.SoundPlay("sfx/OnBuffTrigger", 0.7f); } } yield return(new WaitForSeconds(0.2f)); BuffValueText.text = buffValue == 0 ? "" : buffValue.ToString(); yield return(new WaitForSeconds(0.1f)); yield return(null); }
public bool RemoveSideEffectExecute(SideEffectExecute see) { bool suc1 = SideEffectExecutes.Remove(see); bool suc2 = RemoveFromSEEDict(see); return(suc1 | suc2); }
public PlayerBuffUpdateRequest(int clientId, int buffId, UpdateTypes updateType, SideEffectExecute buffSEE) { this.clientId = clientId; this.buffId = buffId; this.updateType = updateType; this.buffSEE = buffSEE; }
private void Trigger_TryRemove(SideEffectExecute see) { if (see.M_ExecuteSetting.RemoveTriggerDelayTimes > 0) { see.M_ExecuteSetting.RemoveTriggerDelayTimes--; } else if (see.M_ExecuteSetting.RemoveTriggerTimes > 0) //RemoveTriggerTimes decreases every time it triggers and removes when it's 0 { see.M_ExecuteSetting.RemoveTriggerTimes--; foreach (SideEffectBase se in see.SideEffectBases) { if (se is PlayerBuffSideEffects buff_se) { buff_se.M_SideEffectParam.SetParam_ConstInt("RemoveTriggerTimes", buff_se.M_SideEffectParam.GetParam_ConstInt("RemoveTriggerTimes") - 1); } if (see.M_ExecuteSetting.RemoveTriggerTimes == 0) { ObsoleteSEEs.Add(see.ID, see); } else { if (se is PlayerBuffSideEffects) { OnEventPlayerBuffUpdateHandler(see, false); } } } } }
public void OnPlayerBuffRemove(SideEffectExecute see, PlayerBuffSideEffects buff) //buff剩余次数减少 { foreach (SideEffectBase se in see.SideEffectBases) { ((BattlePlayer)se.Player).RemovePlayerBuff(see, buff); } }
public void OnPlayerBuffReduce(SideEffectExecute see, bool isAdd) //buff剩余次数减少 { foreach (SideEffectBase se in see.SideEffectBases) { ((BattlePlayer)se.Player).UpdatePlayerBuff(see, isAdd); } }
private void CreateNewBuff(SideEffectExecute newSee, PlayerBuffSideEffects buff, Dictionary <int, SideEffectExecute> sees) { sees.Add(newSee.ID, newSee); GameManager.EventManager.RegisterEvent(newSee); PlayerBuffUpdateRequest request = new PlayerBuffUpdateRequest(ClientId, newSee.ID, PlayerBuffUpdateRequest.UpdateTypes.Add, newSee); BroadCastRequest(request); }
/// <summary> /// Register single SideEffectExecute /// </summary> /// <param name="see"></param> public void RegisterEvent(SideEffectExecute see) { if (see.M_ExecuteSetting.TriggerTime != SideEffectExecute.TriggerTime.None && see.M_ExecuteSetting.TriggerRange != SideEffectExecute.TriggerRange.None) { Events[see.M_ExecuteSetting.TriggerTime].Add(see.ID, see); RemoveEvents[see.M_ExecuteSetting.RemoveTriggerTime].Add(see.ID, see); } }
public void UpdatePlayerBuff(SideEffectExecute buffSee, int buffId, PlayerBuffUpdateRequest.UpdateTypes updateType) { if (updateType == PlayerBuffUpdateRequest.UpdateTypes.Add) { BattleEffectsManager.Instance.Effect_Main.EffectsShow(Co_AddBuff(buffSee, buffId), "Co_AddBuff"); } else { BattleEffectsManager.Instance.Effect_Main.EffectsShow(Co_UpdateBuff(buffSee, buffId, updateType), "Co_UpdateBuff"); } }
IEnumerator Co_UpdateBuff(SideEffectExecute buffSee, int buffId, PlayerBuffUpdateRequest.UpdateTypes updateType) { if (PlayerBuffs.ContainsKey(buffId)) { yield return(PlayerBuffs[buffId].Co_UpdateValue(buffSee, updateType)); } yield return(null); BattleEffectsManager.Instance.Effect_Main.EffectEnd(); }
public void PlayerBuffTrigger(int seeID, PlayerBuffSideEffects buff) { if (SideEffectBundles_Player.ContainsKey(buff.Name)) { Dictionary <int, SideEffectExecute> sees = SideEffectBundles_Player[buff.Name]; if (sees.ContainsKey(seeID)) { SideEffectExecute see = sees[seeID]; PlayerBuffUpdateRequest request = new PlayerBuffUpdateRequest(ClientId, seeID, PlayerBuffUpdateRequest.UpdateTypes.Trigger, see); BroadCastRequest(request); } } }
IEnumerator Co_AddBuff(SideEffectExecute buffSee, int buffId) { PlayerBuff pb = GameObjectPoolManager.Instance.PoolDict[GameObjectPoolManager.PrefabNames.PlayerBuff].AllocateGameObject <PlayerBuff>(Content); AudioManager.Instance.SoundPlay("sfx/OnBuffAdd", 0.5f); pb.SetRotation(ClientPlayer.WhichPlayer); pb.Init(buffSee, buffId); PlayerBuffs.Add(buffId, pb); yield return(new WaitForSeconds(0.2f * BattleEffectsManager.AnimationSpeed)); BattleEffectsManager.Instance.Effect_Main.EffectEnd(); yield return(null); }
public static SideEffectBundle Deserialize(DataStream reader) { SideEffectBundle res = new SideEffectBundle(); int SideEffectCount = reader.ReadSInt32(); for (int i = 0; i < SideEffectCount; i++) { SideEffectExecute see = SideEffectExecute.Deserialize(reader); res.AddSideEffectExecute(see); } return(res); }
public override void Deserialize(DataStream reader) { base.Deserialize(reader); clientId = reader.ReadSInt32(); buffId = reader.ReadSInt32(); updateType = (UpdateTypes)reader.ReadSInt32(); buffSEE = SideEffectExecute.Deserialize(reader); foreach (SideEffectBase se in buffSEE.SideEffectBases) { if (se is PlayerBuffSideEffects buff) { buff.MyBuffSEE = buffSEE; } } }
internal void UseCard(int cardInstanceId, List <int> targetMechIds = null, List <int> targetEquipIds = null, List <int> targetClientIds = null, bool onlyTriggerNotUse = false) { CardBase useCard = GetCardByCardInstanceId(cardInstanceId); Utils.DebugLog("AI UseCard:" + useCard.CardInfo.BaseInfo.CardNames["zh"]); if (onlyTriggerNotUse) { CardBase copyCard = CardBase.InstantiateCardByCardInfo(useCard.CardInfo.Clone(), useCard.BattlePlayer, BattlePlayer.GameManager.GenerateNewTempCardInstanceId()); BattlePlayer.GameManager.EventManager.Invoke(SideEffectExecute.GetTriggerTimeByCardType(copyCard.CardInfo.BaseInfo.CardType), new ExecutorInfo( clientId: BattlePlayer.ClientId, targetClientIds: targetClientIds, targetMechIds: targetMechIds, cardId: copyCard.CardInfo.CardID, cardInstanceId: copyCard.M_CardInstanceId, targetEquipIds: targetEquipIds)); copyCard.UnRegisterSideEffect(); } else { BattlePlayer.BattleStatistics.UseCard(useCard.CardInfo); UseCardRequest request = new UseCardRequest(BattlePlayer.ClientId, useCard.M_CardInstanceId, useCard.CardInfo.Clone()); BattlePlayer.MyClientProxy.BattleGameManager.Broadcast_AddRequestToOperationResponse(request); BattlePlayer.UseMetal(useCard.CardInfo.BaseInfo.Metal); BattlePlayer.UseEnergy(useCard.CardInfo.BaseInfo.Energy); BattlePlayer.GameManager.EventManager.Invoke(SideEffectExecute.GetTriggerTimeByCardType(useCard.CardInfo.BaseInfo.CardType), new ExecutorInfo( clientId: BattlePlayer.ClientId, targetClientIds: targetClientIds, targetMechIds: targetMechIds, cardId: useCard.CardInfo.CardID, cardInstanceId: cardInstanceId, targetEquipIds: targetEquipIds)); if (!useCard.CardInfo.BaseInfo.IsTemp) { if (useCard.CardInfo.BaseInfo.CardType == CardTypes.Spell || useCard.CardInfo.BaseInfo.CardType == CardTypes.Energy) { BattlePlayer.CardDeckManager.CardDeck.RecycleCardInstanceID(cardInstanceId); } } Cards.Remove(useCard); UsableCards.Remove(useCard.M_CardInstanceId); useCard.UnRegisterSideEffect(); } }
public void UnRegisterEvent(SideEffectExecute see) { Dictionary <int, SideEffectExecute> sees = Events[see.M_ExecuteSetting.TriggerTime]; if (sees.ContainsKey(see.ID)) { sees.Remove(see.ID); } Dictionary <int, SideEffectExecute> sees_remove = RemoveEvents[see.M_ExecuteSetting.TriggerTime]; if (sees_remove.ContainsKey(see.ID)) { sees_remove.Remove(see.ID); } }
private void AddToSEEDict(SideEffectExecute see) { if (!SideEffectExecutes_Dict.ContainsKey(see.M_ExecuteSetting.TriggerTime)) { SideEffectExecutes_Dict.Add(see.M_ExecuteSetting.TriggerTime, new Dictionary <SideEffectExecute.TriggerRange, List <SideEffectExecute> >()); } Dictionary <SideEffectExecute.TriggerRange, List <SideEffectExecute> > des = SideEffectExecutes_Dict[see.M_ExecuteSetting.TriggerTime]; if (!des.ContainsKey(see.M_ExecuteSetting.TriggerRange)) { des.Add(see.M_ExecuteSetting.TriggerRange, new List <SideEffectExecute>()); } List <SideEffectExecute> sees = SideEffectExecutes_Dict[see.M_ExecuteSetting.TriggerTime][see.M_ExecuteSetting.TriggerRange]; sees.Add(see); }
public void Init(SideEffectExecute buffSee, int buffId) { Cur_Buff = ((PlayerBuffSideEffects)buffSee.SideEffectBases[0]); int buffValue = GetBuffValue(buffSee, Cur_Buff); BuffValueText.text = buffValue == 0 ? "" : buffValue.ToString(); BuffId = buffId; ClientUtils.ChangeImagePicture(Image, Cur_Buff.M_SideEffectParam.GetParam_ConstInt("BuffPicId")); Color buffColor = ClientUtils.HTMLColorToColor(AllBuffs.GetBuff((Cur_Buff.Name)).M_SideEffectParam.GetParam_String("BuffColor")); BuffBloom.color = buffColor; BuffDescText.color = buffColor; BuffValuePanel.enabled = Cur_Buff.M_SideEffectParam.GetParam_Bool("HasNumberShow"); BuffValueText.enabled = Cur_Buff.M_SideEffectParam.GetParam_Bool("HasNumberShow"); BuffAnim.SetTrigger("Add"); BuffDescText.text = Utils.TextMeshProColorStringConvertToText(Cur_Buff.GenerateDesc()); }
public override string GenerateDesc() { string sub_desc = ""; foreach (SideEffectBase sub_se in Sub_SideEffect) { sub_desc += sub_se.GenerateDesc().TrimEnd(",。;,.;/n ".ToCharArray()) + " & "; } sub_desc = sub_desc.TrimEnd("& ".ToCharArray()); return(base.GenerateDesc() + HighlightStringFormat( DescRaws[LanguageManager_Common.GetCurrentLanguage()], new[] { false, false, false, false }, SideEffectExecute.GetRemoveTriggerTimeTriggerRangeDescCombination(MyBuffSEE.M_ExecuteSetting.RemoveTriggerTime, MyBuffSEE.M_ExecuteSetting.RemoveTriggerTimes, MyBuffSEE.M_ExecuteSetting.RemoveTriggerRange), SideEffectExecute.GetTriggerTimeTriggerRangeDescCombination(MyBuffSEE.M_ExecuteSetting.TriggerTime, MyBuffSEE.M_ExecuteSetting.TriggerRange), sub_desc)); }
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 void RemovePlayerBuff(SideEffectExecute newSee, PlayerBuffSideEffects buff) { if (SideEffectBundles_Player.ContainsKey(buff.Name)) { Dictionary <int, SideEffectExecute> sees = SideEffectBundles_Player[buff.Name]; if (sees.Count != 0) //存在该buff { if (buff.M_SideEffectParam.GetParam_Bool("Singleton")) //buff是单例,全删 { ClearSEEByBuffName(buff.Name, sees); } else //buff不是单例,则对应到seeID上去 { if (sees.ContainsKey(newSee.ID)) { SideEffectExecute see = sees[newSee.ID]; RemoveSEE(buff.Name, sees, see); } } } } }
private bool RemoveFromSEEDict(SideEffectExecute see) { bool suc_1 = false; if (SideEffectExecutes_Dict.ContainsKey(see.M_ExecuteSetting.TriggerTime)) { Dictionary <SideEffectExecute.TriggerRange, List <SideEffectExecute> > des = SideEffectExecutes_Dict[see.M_ExecuteSetting.TriggerTime]; if (des.ContainsKey(see.M_ExecuteSetting.TriggerRange)) { List <SideEffectExecute> sees = SideEffectExecutes_Dict[see.M_ExecuteSetting.TriggerTime][see.M_ExecuteSetting.TriggerRange]; suc_1 = sees.Remove(see); } } bool suc_2 = false; if (!suc_1) { List <SideEffectExecute> src = null; foreach (KeyValuePair <SideEffectExecute.TriggerTime, Dictionary <SideEffectExecute.TriggerRange, List <SideEffectExecute> > > kv in SideEffectExecutes_Dict) { foreach (KeyValuePair <SideEffectExecute.TriggerRange, List <SideEffectExecute> > _kv in kv.Value) { if (_kv.Value.Contains(see)) { src = _kv.Value; } } } if (src != null) { suc_2 = src.Remove(see); } } return(suc_1 | suc_2); }
private void InvokeCore(InvokeInfo invokeInfo) { SideEffectExecute.TriggerTime tt = invokeInfo.TriggerTime; ExecutorInfo executorInfo = invokeInfo.ExecutorInfo; Dictionary <int, SideEffectExecute> seeDict = Events[tt]; SideEffectExecute[] sees = seeDict.Values.ToArray(); for (int i = 0; i < sees.Length; i++) { SideEffectExecute see = sees[i]; if (ObsoleteSEEs.ContainsKey(see.ID)) { continue; //To prevent executed side effects from being executed again. } if (seeDict.ContainsKey(see.ID)) { bool isTrigger = false; if (see.M_ExecuteSetting is ScriptExecuteSettingBase scriptExecuteSettingBase) { isTrigger = scriptExecuteSettingBase.IsTrigger(executorInfo, see.M_ExecutorInfo); } else { isTrigger = IsExecuteTrigger(executorInfo, see.M_ExecutorInfo, see.M_ExecuteSetting.TriggerRange); //To check out if this event invokes any side effect. } if (isTrigger) { Trigger(see, executorInfo, tt, see.M_ExecuteSetting.TriggerRange); // invoke main trigger method. } } } Invoke_RemoveSEE(tt, executorInfo); //Remove executed side effects with zero time left. }
private int GetBuffValue(SideEffectExecute buffSee, PlayerBuffSideEffects buff) { int buffValue = 0; if (buff.M_SideEffectParam.GetParam_Bool("CanPiled")) { switch ((PlayerBuffSideEffects.BuffPiledBy)buff.M_SideEffectParam.GetParam_ConstInt("PiledBy")) { case PlayerBuffSideEffects.BuffPiledBy.RemoveTriggerTimes: { buffValue = buffSee.M_ExecuteSetting.RemoveTriggerTimes; break; } case PlayerBuffSideEffects.BuffPiledBy.RemoveTriggerDelayTimes: { buffValue = buffSee.M_ExecuteSetting.RemoveTriggerDelayTimes; break; } case PlayerBuffSideEffects.BuffPiledBy.Value: { //TODO buffValue = 0; // buffValue = ((IEffectFactor) buff.Sub_SideEffect[0]).Values[0].Value; break; } } } else { buffValue = buffSee.M_ExecuteSetting.RemoveTriggerTimes; } return(buffValue); }
public void Invoke_RemoveSEE(SideEffectExecute.TriggerTime tt, ExecutorInfo executorInfo) { Dictionary <int, SideEffectExecute> seeDict = RemoveEvents[tt]; SideEffectExecute[] sees = seeDict.Values.ToArray(); for (int i = 0; i < sees.Length; i++) { SideEffectExecute see = sees[i]; if (ObsoleteSEEs.ContainsKey(see.ID)) { continue; //To prevent removed side effects from being removed again. } if (seeDict.ContainsKey(see.ID)) { bool isTrigger = IsExecuteTrigger(executorInfo, see.M_ExecutorInfo, see.M_ExecuteSetting.RemoveTriggerRange); if (isTrigger) { Trigger_TryRemove(see); // invoke main trigger_remove method. (some side effects like buffs have a remove_time attribute. e.g. Remove this buff after 3 turns) } } } RemoveAllUselessSEEs(); }
public void Initialize(SideEffectExecute.SideEffectFrom sideEffectFrom, SideEffectExecute see, UnityAction onRefreshText, UnityAction onDeleteButtonClick) { bool isExecuteSettingReadOnly = (see.ExecuteSettingType != SideEffectExecute.ExecuteSettingTypes.Others) && see.ExecuteSettingType != SideEffectExecute.ExecuteSettingTypes.Scripts; ExecuteSettingTypeDropdown.onValueChanged.RemoveAllListeners(); ExecuteSettingTypeDropdown.options.Clear(); foreach (SideEffectExecute.ExecuteSettingTypes est in SideEffectExecute.ValidExecuteSettingTypesForSideEffectFrom[sideEffectFrom]) { ExecuteSettingTypeDropdown.options.Add(new Dropdown.OptionData(est.ToString())); } SetValue(see.ExecuteSettingType.ToString()); ExecuteSettingTypeDropdown.onValueChanged.AddListener( delegate(int value) { string optionStr = ExecuteSettingTypeDropdown.options[value].text; SideEffectExecute.ExecuteSettingTypes est = (SideEffectExecute.ExecuteSettingTypes)Enum.Parse(typeof(SideEffectExecute.ExecuteSettingTypes), optionStr); if (est != SideEffectExecute.ExecuteSettingTypes.Scripts) { see.M_ExecuteSetting = SideEffectExecute.ExecuteSetting_Presets[est]; } else { see.M_ExecuteSetting = AllScriptExecuteSettings.GetScriptExecuteSetting("OnPlaySpecifiedCardByID").Clone(); } CardPropertyForm_ExecuteSettingRow.Initialize(see, onRefreshText, isExecuteSettingReadOnly, true); Initialize(sideEffectFrom, see, onRefreshText, onDeleteButtonClick); StartCoroutine(ClientUtils.UpdateLayout((RectTransform)UIManager.Instance.GetBaseUIForm <CardEditorPanel>().CardPropertiesContainer)); }); DeleteButton.onClick.RemoveAllListeners(); DeleteButton.onClick.AddListener( delegate { onDeleteButtonClick(); StartCoroutine(ClientUtils.UpdateLayout((RectTransform)UIManager.Instance.GetBaseUIForm <CardEditorPanel>().CardPropertiesContainer)); } ); CardPropertyForm_ExecuteSettingRow?.PoolRecycle(); foreach (CardPropertyForm_SideEffect cpfse in CardPropertyFormSideEffects) { cpfse.PoolRecycle(); } CardPropertyFormSideEffects.Clear(); AddSideEffectButton.onClick.RemoveAllListeners(); AddSideEffectButton.onClick.AddListener(delegate { see.SideEffectBases.Add(AllSideEffects.GetSideEffect("Damage").Clone()); Initialize(sideEffectFrom, see, onRefreshText, onDeleteButtonClick); onRefreshText(); StartCoroutine(ClientUtils.UpdateLayout((RectTransform)UIManager.Instance.GetBaseUIForm <CardEditorPanel>().CardPropertiesContainer)); }); CardPropertyForm_ExecuteSettingRow = GameObjectPoolManager.Instance.PoolDict[GameObjectPoolManager.PrefabNames.CardPropertyForm_ExecuteSetting].AllocateGameObject <CardPropertyForm_ExecuteSetting>(SideEffectRowContainer); CardPropertyForm_ExecuteSettingRow.Initialize(see, onRefreshText, isExecuteSettingReadOnly, false); ExecuteSettingTypeDropdown.interactable = sideEffectFrom != SideEffectExecute.SideEffectFrom.Buff; AddSideEffectButton.gameObject.SetActive(sideEffectFrom != SideEffectExecute.SideEffectFrom.Buff); DeleteButton.gameObject.SetActive(sideEffectFrom != SideEffectExecute.SideEffectFrom.Buff); foreach (SideEffectBase se in see.SideEffectBases) { CardPropertyForm_SideEffect cpfse = GameObjectPoolManager.Instance.PoolDict[GameObjectPoolManager.PrefabNames.CardPropertyForm_SideEffect].AllocateGameObject <CardPropertyForm_SideEffect>(SideEffectRowContainer); cpfse.Initialize(see, null, se, onRefreshText, delegate { see.SideEffectBases.Remove(se); Initialize(sideEffectFrom, see, onRefreshText, onDeleteButtonClick); onRefreshText(); StartCoroutine(ClientUtils.UpdateLayout((RectTransform)UIManager.Instance.GetBaseUIForm <CardEditorPanel>().CardPropertiesContainer)); }); CardPropertyFormSideEffects.Add(cpfse); } }
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; }
protected override void Deserialize(DataStream reader) { base.Deserialize(reader); AttachedBuffSEE = SideEffectExecute.Deserialize(reader); }