Пример #1
0
    public void DealNotExcuteHandler()
    {
        #region 处理可能由于卡顿造成的回调没有调用或者销毁时间小于回调时间的填表错误造成的卡住bug
        if (reach_call_back_1_ != null && eb_data_.dmage_hit1_ != -1)
        {
            reach_call_back_1_(reach_back_index);
        }
        if (reach_call_back_2_ != null && eb_data_.dmage_hit2_ != -1)
        {
            reach_call_back_2_(reach_back_index);
        }
        if (reach_call_back_eff_ != null && eb_data_.beattack_effect_ != -1)
        {
            reach_call_back_eff_(reach_back_index);
        }
        if (reach_call_back_pop_ != null && eb_data_.pop_value_ != -1)
        {
            reach_call_back_pop_(reach_back_index);
        }

        reach_call_back_1_   = null;
        reach_call_back_2_   = null;
        reach_call_back_eff_ = null;
        reach_call_back_pop_ = null;
        #endregion
    }
Пример #2
0
    void Update()
    {
        if (gameObject == null)
        {
            DestorySelf();
            return;
        }

        // 不激活直接返回
        if (!active_)
        {
            return;
        }

        //行为不是陨石的
        if (eb_data_.work_type_ == EffectBehaviourData.WORKTYPE.T && eb_data_.id_ != 13)
        {
            transform.localRotation = Quaternion.identity;
        }

        // 生存时间累加
        live_time_ += Time.deltaTime;

        if (eb_data_.dmage_hit1_ == -1)
        {
            beattack_timer_ = true;
        }

        if (beattack_timer_)
        {
            take_damage_time_ += Time.deltaTime;
        }

        // 目的地不为空才会有移动
        if (crt_aim_ != null)
        {
            if (!effect_stop_move_)
            {
                // 直线行进
                if (eb_data_.move_type_.Equals(EffectBehaviourData.MOVETYPE.Straight) || force_straight_)
                {
                    transform.position = Vector3.Lerp(from_, crt_aim_.pos_, (lerp_time_ += Time.deltaTime) / eb_data_.move_time_);
                    transform.LookAt(crt_aim_.pos_);
                }
                // 曲线行进
                else if (eb_data_.move_type_.Equals(EffectBehaviourData.MOVETYPE.Bezier))
                {
                    transform.position = bezier_.GetPointAtTime((lerp_time_ += Time.deltaTime) / eb_data_.move_time_);
                }
                // 暂不处理
                else
                {
                }
            }

            if (eb_data_.dmage_hit1_ > 0f && live_time_ > eb_data_.dmage_hit1_ && reach_call_back_1_ != null)
            {
                reach_call_back_1_(GetValidateIndex(crt_aim_.index_, reach_back_index));
                reach_call_back_1_ = null;
                //受击计时器启动
                beattack_timer_ = true;
                //特效停止移动
                effect_stop_move_ = true;
            }

            // 如果初始点和目的地距离小于0.1f 则视为到达目的地
            if (active_ && Vector3.Distance(transform.position, crt_aim_.pos_) < 0.1f)
            {
                // 调用到达回调
                if (eb_data_.dmage_hit1_ == -2 && reach_call_back_1_ != null)
                {
                    reach_call_back_1_(GetValidateIndex(crt_aim_.index_, reach_back_index));
                    reach_call_back_1_ = null;
                    lerp_time_         = 0f;
                    //受击计时器启动
                    beattack_timer_ = true;
                    //特效停止移动
                    effect_stop_move_ = true;
                }
            }

            #region 处理自受击1开始的所有回调

            if (take_damage_time_ > eb_data_.beattack_effect_ && eb_data_.beattack_effect_ != -1 && reach_call_back_eff_ != null)
            {
                reach_call_back_eff_(GetValidateIndex(crt_aim_.index_, reach_back_index));
                reach_call_back_eff_ = null;
            }

            if (take_damage_time_ > eb_data_.pop_value_ && eb_data_.pop_value_ != -1 && reach_call_back_pop_ != null)
            {
                reach_call_back_pop_(GetValidateIndex(crt_aim_.index_, reach_back_index));
                reach_call_back_pop_ = null;
            }

            if (take_damage_time_ > eb_data_.dmage_hit2_ && eb_data_.dmage_hit2_ != -1 && reach_call_back_2_ != null)
            {
                reach_call_back_2_(GetValidateIndex(crt_aim_.index_, reach_back_index));
                reach_call_back_2_ = null;
                //特效继续移动
                effect_stop_move_ = false;

                // 更新下一个目的地
                if (aimsQue_ != null && aimsQue_.Count > 0 && active_)
                {
                    from_    = transform.position;
                    crt_aim_ = aimsQue_.Dequeue();
                    //transform.LookAt(crt_aim_.pos_);
                    if (aimsQue_.Count == 0 && true /*feng skill*/)
                    {
                        transform.parent = null;
                        force_straight_  = true;
                    }
                }
                else
                {
                    crt_aim_ = null;
                }
            }
            #endregion
        }

        if (eb_data_.shake_time_ != -1 && !cameraShake_ && live_time_ > eb_data_.shake_time_)
        {
            iTween.ShakePosition(Camera.main.gameObject, Vector3.one * 0.1f, 0.5f);
            cameraShake_ = true;
        }

        // 如果生存时间大于endTime则调用完成回调以便衔接下一个动作
        if (live_time_ > eb_data_.end_time_ && finish_call_back_ != null)
        {
            DealNotExcuteHandler();
            finish_call_back_();
            finish_call_back_ = null;
        }

        // 生存时间大于销毁时间则销毁实例
        if (eb_data_.destory_time_ > 0f && live_time_ > eb_data_.destory_time_)
        {
            DealNotExcuteHandler();
            DestorySelf();
        }
    }