示例#1
0
    /// <summary>
    /// 战斗效果执行
    /// </summary>
    public IEnumerator CombatEffectExecute()
    {
        for (int i = 0; i < characterMiniGameData.listCombatEffect.Count; i++)
        {
            MiniGameCombatEffectBean itemCombatEffect = characterMiniGameData.listCombatEffect[i];
            CombatEffectExecute(itemCombatEffect, out bool isCharacterDead);
            //如果角色已经死了 则不进行一下操作
            if (isCharacterDead)
            {
                break;
            }
            //检测是否需要延迟播放
            if (itemCombatEffect.CheckIsDelay())
            {
                yield return(new WaitForSeconds(0.5f));
            }

            itemCombatEffect.durationForRound--;
            if (itemCombatEffect.durationForRound <= 0)
            {
                //移除图标
                RemoveStatusIconByMarkId(itemCombatEffect.iconMarkId);
                //删除数据
                characterMiniGameData.listCombatEffect.Remove(itemCombatEffect);
                i--;
            }
        }
    }
示例#2
0
    /// <summary>
    /// 增加效果
    /// </summary>
    /// <param name="effectTypeData"></param>
    /// <param name="effectDetailsData"></param>
    public void AddCombatEffect(NpcAIMiniGameCombatCpt actionCharacter, string effectTypeData, string effectDetailsData, Sprite spIcon)
    {
        List <EffectTypeBean> listTypeData = EffectTypeEnumTools.GetListEffectData(effectTypeData);

        EffectDetailsEnumTools.GetEffectDetailsForCombat(effectDetailsData, out string effectPSName, out int durationForRound);
        MiniGameCombatEffectBean gameCombatEffectData = new MiniGameCombatEffectBean();

        gameCombatEffectData.listEffectTypeData = listTypeData;
        gameCombatEffectData.durationForRound   = durationForRound;
        gameCombatEffectData.effectPSName       = effectPSName;
        gameCombatEffectData.iconMarkId         = SystemUtil.GetUUID(SystemUtil.UUIDTypeEnum.N);
        gameCombatEffectData.actionCharacter    = actionCharacter;
        gameCombatEffectData.targetCharacter    = this;

        foreach (EffectTypeBean itemType in listTypeData)
        {
            //设置技能的备用图标
            EffectTypeEnumTools.GetEffectDetails(itemType, spIcon);
            //如果是持续 则需要加上BUFF图标
            if (durationForRound > 0)
            {
                Sprite spEffect;
                if (itemType.spIconRemark != null)
                {
                    spEffect = itemType.spIconRemark;
                }
                else
                {
                    spEffect = itemType.spIcon;
                }
                AddStatusIconForEffect(spEffect, Color.white, gameCombatEffectData.iconMarkId);
            }
        }
        //播放粒子特效
        if (!CheckUtil.StringIsNull(effectPSName))
        {
            MiniGameHandler.Instance.handlerForCombat.miniGameBuilder.CreateCombatEffect(effectPSName, transform.position + new Vector3(0, 0.5f));
        }
        if (durationForRound > 0)
        {
            characterMiniGameData.listCombatEffect.Add(gameCombatEffectData);
        }
        else
        {
            //回合数小于0的立即执行
            CombatEffectExecute(gameCombatEffectData, out bool isDead);
        }
    }
示例#3
0
    /// <summary>
    /// 战斗效果执行
    /// </summary>
    /// <param name="itemCombatEffect"></param>
    public void CombatEffectExecute(MiniGameCombatEffectBean itemCombatEffect, out bool isDead)
    {
        //完成数据
        itemCombatEffect.CompleteEffect(characterMiniGameData);
        //检测角色血量
        MiniGameHandler.Instance.handlerForCombat.CheckCharacterLife();

        if (characterMiniGameData.characterCurrentLife <= 0)
        {
            isDead = true;
        }
        else
        {
            isDead = false;
        }
    }
示例#4
0
    /// <summary>
    /// 设置状态
    /// </summary>
    public void SetEffect(List <MiniGameCombatEffectBean> listEffect)
    {
        CptUtil.RemoveChildsByActive(objEffectContainer);

        //如果没有战斗信息 则隐藏展示栏
        if (CheckUtil.ListIsNull(listEffect))
        {
            objEffectContainer.SetActive(false);
        }
        else
        {
            objEffectContainer.SetActive(true);
            for (int i = 0; i < listEffect.Count; i++)
            {
                MiniGameCombatEffectBean itemEffectData = listEffect[i];
                if (itemEffectData.listEffectTypeData != null)
                {
                    for (int f = 0; f < itemEffectData.listEffectTypeData.Count; f++)
                    {
                        EffectTypeBean  effectTypeData = itemEffectData.listEffectTypeData[f];
                        GameObject      objEffectItem  = Instantiate(objEffectContainer, objEffectModel);
                        ItemBaseTextCpt itemEffect     = objEffectItem.GetComponent <ItemBaseTextCpt>();

                        Sprite spEffect;
                        if (effectTypeData.spIconRemark != null)
                        {
                            spEffect = effectTypeData.spIconRemark;
                        }
                        else
                        {
                            spEffect = effectTypeData.spIcon;
                        }
                        itemEffect.SetData(spEffect, effectTypeData.colorIcon, "", effectTypeData.effectDescribe);
                    }
                }
            }
        }
    }