public override void Deserialize(DataStream reader) { base.Deserialize(reader); ExecutorInfo = ExecutorInfo.Deserialize(reader); TriggerTime = (SideEffectExecute.TriggerTime)reader.ReadSInt32(); TriggerRange = (SideEffectExecute.TriggerRange)reader.ReadSInt32(); }
IEnumerator Co_ShowSideEffectBloom(SideEffectExecute.TriggerTime triggerTime, SideEffectExecute.TriggerRange triggerRange, Color color, float duration) { if (triggerTime == SideEffectExecute.TriggerTime.OnMechDie && triggerRange == SideEffectExecute.TriggerRange.Self) { MechTriggerIconComponent.IconJump(MechTriggerIcon.IconTypes.Die); } else { MechTriggerIconComponent.IconJump(MechTriggerIcon.IconTypes.Trigger); } MechBloomComponent.SetSideEffectTriggerBloomShow(true); MechBloomComponent.SetSideEffectTriggerBloomColor(color, 2); AudioManager.Instance.SoundPlay("sfx/OnSE"); yield return(new WaitForSeconds(duration)); MechBloomComponent.SetSideEffectTriggerBloomShow(false); BattleEffectsManager.Instance.Effect_Main.EffectEnd(); }
public ScriptExecuteSettingBase(string name, SortedDictionary <string, string> descRaws, SideEffectExecute.TriggerTime triggerTime, SideEffectExecute.TriggerRange triggerRange, int triggerTimes, int triggerDelayTimes, SideEffectExecute.TriggerTime removeTriggerTime, SideEffectExecute.TriggerRange removeTriggerRange, int removeTriggerTimes, int removeTriggerDelayTimes) : base(triggerTime, triggerRange, triggerTimes, triggerDelayTimes, removeTriggerTime, removeTriggerRange, removeTriggerTimes, removeTriggerDelayTimes) { Name = name; DescRaws = descRaws; InitSideEffectParam(); }
public ShowSideEffectTriggeredRequest(ExecutorInfo executorInfo, SideEffectExecute.TriggerTime triggerTime, SideEffectExecute.TriggerRange triggerRange) { ExecutorInfo = executorInfo; TriggerTime = triggerTime; TriggerRange = triggerRange; }
public override void OnShowEffects(SideEffectExecute.TriggerTime triggerTime, SideEffectExecute.TriggerRange triggerRange) { BattleEffectsManager.Instance.Effect_Main.EffectsShow(Co_ShowSideEffectBloom(ClientUtils.HTMLColorToColor(CardInfo.GetCardColor()), 0.5f), "ShowSideEffectBloom"); }
public override void OnShowEffects(SideEffectExecute.TriggerTime triggerTime, SideEffectExecute.TriggerRange triggerRange) { BattleEffectsManager.Instance.Effect_Main.EffectsShow(Co_ShowSideEffectBloom(triggerTime, triggerRange, ClientUtils.HTMLColorToColor("#00FFDA"), 0.4f * BattleEffectsManager.AnimationSpeed), "ShowSideEffectBloom"); }
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; }
public abstract void OnShowEffects(SideEffectExecute.TriggerTime triggerTime, SideEffectExecute.TriggerRange triggerRange);
public List <SideEffectExecute> GetSideEffectExecutes(SideEffectExecute.TriggerTime triggerTime, SideEffectExecute.TriggerRange triggerRange) { List <SideEffectExecute> res = new List <SideEffectExecute>(); if (SideEffectExecutes_Dict.ContainsKey(triggerTime)) { Dictionary <SideEffectExecute.TriggerRange, List <SideEffectExecute> > temp = SideEffectExecutes_Dict[triggerTime]; if (temp.ContainsKey(triggerRange)) { res.AddRange(temp[triggerRange]); } } return(res); }
private void Trigger(SideEffectExecute see, ExecutorInfo ei, SideEffectExecute.TriggerTime tt, SideEffectExecute.TriggerRange tr) { if (see.M_ExecuteSetting.TriggerDelayTimes > 0) //TriggerDelayTimes decreases and trigger the event when it's 0 { see.M_ExecuteSetting.TriggerDelayTimes--; return; } else { if (see.M_ExecuteSetting.TriggerTimes > 0) //TriggerTimes decreases every time it triggers and stop when it's 0 { //Trigger's trigger -- which triggers when other events are being triggered. bool isTriggerTrigger = false; if (tt == SideEffectExecute.TriggerTime.OnTrigger) //Give sideeffect executing info to trigger's trigger for modifying. { foreach (SideEffectBase se in see.SideEffectBases) { if (se is PlayerBuffSideEffects buffSEE) { foreach (SideEffectBase sub_se in buffSEE.Sub_SideEffect) { if (sub_se is ITrigger triggerSEE) { triggerSEE.PeekSEE = InvokeStack.Peek(); if (triggerSEE.IsTrigger(ei)) { isTriggerTrigger = true; } } } } } } if (tt == SideEffectExecute.TriggerTime.OnTrigger && !isTriggerTrigger) { return; } //Trigger's trigger End see.M_ExecuteSetting.TriggerTimes--; ShowSideEffectTriggeredRequest request = new ShowSideEffectTriggeredRequest(see.M_ExecutorInfo, tt, tr); //Send request to client OnEventInvokeHandler(request); InvokeStack.Push(see); Invoke(SideEffectExecute.TriggerTime.OnTrigger, ei); foreach (SideEffectBase se in see.SideEffectBases) { se.Execute(ei); } InvokeStack.Pop(); } else if (see.M_ExecuteSetting.TriggerTimes == 0) { if (!ObsoleteSEEs.ContainsKey(see.ID)) { ObsoleteSEEs.Add(see.ID, see); } } } }
/// <summary> /// This is an important method to check is this Event valid to trigger a series of corresponding sideeffects. /// Compare executor's clientID, cardID or other values with those sideeffects recorded in EventManager. If compared successfully, then trigger. /// </summary> /// <param name="executorInfo"></param> /// <param name="se_ExecutorInfo"></param> /// <param name="tr">TriggerRange, the key parameter in this method, used to compare executorInfos between events and sideeffects recorded in EventManager</param> /// <returns></returns> private static bool IsExecuteTrigger(ExecutorInfo executorInfo, ExecutorInfo se_ExecutorInfo, SideEffectExecute.TriggerRange tr) { bool isTrigger = false; switch (tr) { case SideEffectExecute.TriggerRange.SelfPlayer: if (executorInfo.ClientId == se_ExecutorInfo.ClientId) { isTrigger = true; } break; case SideEffectExecute.TriggerRange.EnemyPlayer: if (executorInfo.ClientId != se_ExecutorInfo.ClientId) { isTrigger = true; } break; case SideEffectExecute.TriggerRange.OnePlayer: isTrigger = true; break; case SideEffectExecute.TriggerRange.One: isTrigger = true; break; case SideEffectExecute.TriggerRange.SelfAnother: if (executorInfo.ClientId == se_ExecutorInfo.ClientId && ((se_ExecutorInfo.MechId != ExecutorInfo.EXECUTE_INFO_NONE && se_ExecutorInfo.MechId != executorInfo.MechId) || (se_ExecutorInfo.CardInstanceId != ExecutorInfo.EXECUTE_INFO_NONE && se_ExecutorInfo.CardInstanceId != executorInfo.CardInstanceId))) { isTrigger = true; } break; case SideEffectExecute.TriggerRange.Another: if ((se_ExecutorInfo.MechId != ExecutorInfo.EXECUTE_INFO_NONE && se_ExecutorInfo.MechId != executorInfo.MechId) || (se_ExecutorInfo.CardInstanceId != ExecutorInfo.EXECUTE_INFO_NONE && se_ExecutorInfo.CardInstanceId != executorInfo.CardInstanceId)) { isTrigger = true; } break; case SideEffectExecute.TriggerRange.AttachedMech: if (se_ExecutorInfo.MechId != ExecutorInfo.EXECUTE_INFO_NONE && se_ExecutorInfo.MechId == executorInfo.MechId) { isTrigger = true; } break; case SideEffectExecute.TriggerRange.AttachedEquip: if (se_ExecutorInfo.MechId != ExecutorInfo.EXECUTE_INFO_NONE && se_ExecutorInfo.MechId == executorInfo.MechId) { isTrigger = true; } break; case SideEffectExecute.TriggerRange.Self: if ((se_ExecutorInfo.MechId != ExecutorInfo.EXECUTE_INFO_NONE && se_ExecutorInfo.MechId == executorInfo.MechId) || (se_ExecutorInfo.CardInstanceId != ExecutorInfo.EXECUTE_INFO_NONE && se_ExecutorInfo.CardInstanceId == executorInfo.CardInstanceId) || (se_ExecutorInfo.EquipId != ExecutorInfo.EXECUTE_INFO_NONE && se_ExecutorInfo.EquipId == executorInfo.EquipId)) { isTrigger = true; } break; } return(isTrigger); }