Exemple #1
0
    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);
    }
Exemple #2
0
    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);
                        }
                    }
                }
            }
        }
    }
Exemple #3
0
    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);
    }
Exemple #5
0
 public PlayerBuffUpdateRequest(int clientId, int buffId, UpdateTypes updateType, SideEffectExecute buffSEE)
 {
     this.clientId   = clientId;
     this.buffId     = buffId;
     this.updateType = updateType;
     this.buffSEE    = buffSEE;
 }
Exemple #6
0
    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);
                    }
                }
            }
        }
    }
Exemple #7
0
 public void OnPlayerBuffRemove(SideEffectExecute see, PlayerBuffSideEffects buff) //buff剩余次数减少
 {
     foreach (SideEffectBase se in see.SideEffectBases)
     {
         ((BattlePlayer)se.Player).RemovePlayerBuff(see, buff);
     }
 }
Exemple #8
0
 public void OnPlayerBuffReduce(SideEffectExecute see, bool isAdd) //buff剩余次数减少
 {
     foreach (SideEffectBase se in see.SideEffectBases)
     {
         ((BattlePlayer)se.Player).UpdatePlayerBuff(see, isAdd);
     }
 }
Exemple #9
0
    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);
    }
Exemple #10
0
 /// <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);
     }
 }
Exemple #11
0
 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");
     }
 }
Exemple #12
0
    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();
    }
Exemple #13
0
 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);
         }
     }
 }
Exemple #14
0
    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);
    }
Exemple #16
0
 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;
         }
     }
 }
Exemple #17
0
    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();
        }
    }
Exemple #18
0
    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);
    }
Exemple #20
0
    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));
        }
Exemple #22
0
    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);
        }
    }
Exemple #23
0
 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);
    }
Exemple #25
0
    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.
    }
Exemple #26
0
    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);
    }
Exemple #27
0
    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);
        }
    }
Exemple #29
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;
    }
Exemple #30
0
 protected override void Deserialize(DataStream reader)
 {
     base.Deserialize(reader);
     AttachedBuffSEE = SideEffectExecute.Deserialize(reader);
 }