Ejemplo n.º 1
0
        private IEnumerator UpdateAbnormalState(eAbnormalState _abnormalState, AbnormalStateEffectPrefabData _specialEffectData)
        {
            eAbnormalStateCategory    category     = GetAbnormalStateCategory(_abnormalState);
            AbnormalStateCategoryData categoryData = abnormalStateCategoryDataDictionary[category];

            categoryData.Time = categoryData.Duration;
            //特效处理
            EnableAbnormalState(_abnormalState, true, categoryData.IsEnergyReduceMode, false);
            while (true)
            {
                if (IsAbnormalState(category))
                {
                    _abnormalState = categoryData.CurrentAbnormalState;
                    if (categoryData.IsEnergyReduceMode)
                    {
                        float energy_min = categoryData.EnergyReduceRate * DeltaTimeForPause_BUFF;
                        SetEnergy(Energy - energy_min, eSetEnergyType.BY_MODE_CHANGE, null);
                        if (Energy <= 0)
                        {
                            EnableAbnormalState(_abnormalState, false);
                            yield break;
                        }
                    }
                    else
                    {
                        categoryData.Time -= DeltaTimeForPause_BUFF;
                        if (categoryData.Time <= 0)
                        {
                            EnableAbnormalState(_abnormalState, false);
                            yield break;
                        }
                    }
                    if (!IsDead)
                    {
                        yield return(null);

                        continue;
                    }
                    EnableAbnormalState(_abnormalState, false);
                    break;
                }
                break;
            }
        }
Ejemplo n.º 2
0
        private IEnumerator UpdateSlipDamage(eAbnormalStateCategory _category, int _slipDamageId)
        {
            AbnormalStateCategoryData categoryData = abnormalStateCategoryDataDictionary[_category];
            float time_5            = 0;
            int   damage_5          = (int)categoryData.MainValue;
            int   incrementDamage_5 = (int)(categoryData.MainValue * categoryData.SubValue / 100.0f);//一般都为0            yield return null;

            yield return(null);

            while (true)
            {
                if (IsAbnormalState(_category))
                {
                    if (slipDamageIdDictionary[_category] == _slipDamageId)
                    {
                        time_5 += DeltaTimeForPause_BUFF;
                        if (time_5 > 0.995f)
                        {
                            DamageData damageData = new DamageData();
                            damageData.Target       = GetFirstParts(false, 0);
                            damageData.Damage       = damage_5;
                            damageData.DamageType   = eDamageType.NONE;
                            damageData.Source       = categoryData.Source;
                            damageData.IsSlipDamage = true;
                            damageData.ActionType   = eActionType.SLIP_DAMAGE;
                            SetDamage(damageData, false, categoryData.ActionId, null, true, categoryData.Skill, true, null, false, 1, 1, null);
                            damage_5 += incrementDamage_5;
                            time_5    = 0;
                        }
                        yield return(null);

                        continue;
                    }
                }
                break;
            }
        }
Ejemplo n.º 3
0
        private IEnumerator UpdateSlipDamage(eAbnormalStateCategory _category, int _slipDamageId)
        {
            yield return(null);

            Debug.LogError("咕咕咕!");
        }
Ejemplo n.º 4
0
        private void EnableAbnormalState(eAbnormalState abnormalState, bool enable, bool reduceEnergy = false, bool _switch = false)
        {
            eAbnormalStateCategory    category     = GetAbnormalStateCategory(abnormalState);
            AbnormalStateCategoryData categoryData = abnormalStateCategoryDataDictionary[category];

            if (!enable)
            {
                //销毁特效
                categoryData.MainValue = 0;
                categoryData.Time      = 0;
                categoryData.Duration  = 0;
            }
            categoryData.enable            = enable;
            m_abnormalState[abnormalState] = enable;
            switch (abnormalState)
            {
            case eAbnormalState.HASTE:
                if (enable)
                {
                    if (actionState == eActionState.IDLE)
                    {
                        spineController.SetTimeScale(timeScale * 2.0f);
                        break;
                    }
                }
                else if (!IsUnableActionState() && !isPause)
                {
                    spineController.Resume();
                }
                break;

            case eAbnormalState.POISON:
            case eAbnormalState.BURN:
            case eAbnormalState.CURSE:
            case eAbnormalState.NO_EFFECT_SLIP_DAMAGE:
            case eAbnormalState.VENOM:
            case eAbnormalState.HEX:
            case eAbnormalState.COMPENSATION:
                if (enable)
                {
                    slipDamageIdDictionary[category]++;
                    StartCoroutine(UpdateSlipDamage(category, slipDamageIdDictionary[category]));
                }
                break;

            case eAbnormalState.SLOW:
                if (enable)
                {
                    //改变颜色
                    if (actionState == eActionState.IDLE)
                    {
                        spineController.SetTimeScale(timeScale * 0.5f);
                    }
                }
                else
                {
                    //改变颜色
                    if (!IsUnableActionState())
                    {
                        spineController.Resume();
                    }
                }
                break;

            case eAbnormalState.PARALYSIS:
            case eAbnormalState.FREEZE:
            case eAbnormalState.CHAINED:
            case eAbnormalState.SLEEP:
            case eAbnormalState.STUN:
            case eAbnormalState.DETAIN:
            case eAbnormalState.FAINT:
                if (enable)
                {
                    if (actionState != eActionState.DAMAGE)
                    {
                        SetState(eActionState.DAMAGE, 0);
                        break;
                    }
                }
                else if (!IsUnableActionState() && !_switch)
                {
                    SetMotionResume();
                }
                break;

            case eAbnormalState.CONVERT:
            case eAbnormalState.CONFUSION:
                SetLeftDirection(IsNearestEnemyLeft());
                if (actionState == eActionState.ATK || actionState == eActionState.IDLE || actionState == eActionState.SKILL1 || actionState == eActionState.SKILL)
                {
                    cancalByCovert          = true;
                    idleStartAfterWaitFrame = m_fCastTimer <= DeltaTimeForPause;
                }
                if (Hp >= 1 && !IsUnableActionState() && actionState != eActionState.DAMAGE)
                {
                    SetState(eActionState.IDLE, 0);
                }
                break;

            case eAbnormalState.CONTINUOUS_ATTACK_NEARBY:
                Debug.LogError("咕咕咕!");
                break;

            case eAbnormalState.DECOY:
                Debug.LogError("咕咕咕!");
                break;

            case eAbnormalState.STONE:
                if (enable)
                {
                    if (actionState != eActionState.DAMAGE)
                    {
                        SetState(eActionState.DAMAGE, 0);
                    }
                    //设置石化颜色
                }
                else
                {
                    if (!IsUnableActionState() && !_switch)
                    {
                        SetMotionResume();
                    }
                    //设置石化颜色
                }
                break;

            case eAbnormalState.REGENERATION:
                if (enable)
                {
                    currentHpRegeneId++;
                    StartCoroutine(UpdateHpRegeneration(currentHpRegeneId));
                }
                break;

            case eAbnormalState.TP_REGENERATION:
                if (enable)
                {
                    currentTpRegeneId++;
                    StartCoroutine(UpdateTpRegeneration(currentHpRegeneId));
                }
                break;

            default:
                break;
            }
            OnChangeState?.Invoke(this, ABNORMAL_CONST_DATA[abnormalState].IconType, enable);
            if (!enable && !_switch)
            {
                //Elements_Battle_BattleManager__RestartAbnormalStateField(v43, this, abnormalState, 0LL)
            }
        }