Exemplo n.º 1
0
    /// <summary>
    /// 退出待机状态
    /// </summary>
    /// <param name="data"></param>
    void OnExitIdleState(CEventBaseArgs data)
    {
        if (!mTriggerAuto)
        {
            return;
        }

        mState = StateTriggerSetting.StateType.STATE_NONE;
        RecycleEffect();
    }
Exemplo n.º 2
0
    /// <summary>
    /// 加载特效资源,加载完毕后根据配置设置不同的跟节点
    /// </summary>
    /// <param name="setting"></param>
    /// <returns></returns>
    IEnumerator LoadEffect(StateTriggerSetting.TriggerSetting trigger_setting, StateTriggerSetting.StateType state_type)
    {
        var effect_path = trigger_setting.EffectPath;

        xc.ObjectWrapper game_object_wrapper = new xc.ObjectWrapper();
        yield return(StartCoroutine(ObjCachePoolMgr.Instance.LoadPrefab(effect_path, ObjCachePoolType.SFX, effect_path, game_object_wrapper)));

        GameObject effect_object = game_object_wrapper.obj as GameObject;

        if (effect_object == null)// 特效加载不成功或者在切场景时被销毁,则直接返回
        {
            yield break;
        }

        // 是否组件已经被销毁或取消激活
        if (mIsDestory || !mIsEnable)
        {
            ObjCachePoolMgr.Instance.RecyclePrefab(effect_object, ObjCachePoolType.SFX, effect_path);
            yield break;
        }

        // 资源加载完毕后需要再次判断可见性
        bool is_visible = Owner != null ? Owner.mVisibleCtrl.IsVisible : false;

        if (!is_visible || mState != state_type)
        {
            ObjCachePoolMgr.Instance.RecyclePrefab(effect_object, ObjCachePoolType.SFX, effect_path);
            yield break;
        }

        Transform effect_trans = effect_object.transform;
        Transform bind_trans   = trigger_setting.BindBone;

        if (bind_trans == null)
        {
            bind_trans = mTrans;
        }

        if (bind_trans != null)
        {
            effect_trans.parent        = bind_trans;
            effect_trans.localPosition = Vector3.zero;
            effect_trans.localRotation = Quaternion.identity;
            effect_trans.localScale    = Vector3.one;

            mEffectInfos.Add(new EffectInfo(effect_path, effect_object));
            yield return(null);
        }
        else
        {
            GameDebug.LogError("StateEffectPlayer::LoadEffect: bind_trans is null");
            ObjCachePoolMgr.Instance.RecyclePrefab(effect_object, ObjCachePoolType.SFX, effect_path);
            yield break;
        }
    }
Exemplo n.º 3
0
    /// <summary>
    /// 进入待机状态
    /// </summary>
    /// <param name="data"></param>
    void OnEnterIdleState(CEventBaseArgs data)
    {
        if (!mTriggerAuto)
        {
            return;
        }

        mState = StateTriggerSetting.StateType.STATE_IDLE;
        List <StateTriggerSetting.TriggerSetting> trigger_setting_list = null;

        if (mStateTriggerMap.TryGetValue(mState, out trigger_setting_list))
        {
            PlayEffect(trigger_setting_list, mState);
        }
    }
Exemplo n.º 4
0
    /// <summary>
    /// 进入状态的时候不自动触发,需要调用此函数才触发
    /// </summary>
    /// <param name="actor"></param>
    public void TriggerManual()
    {
        if (Owner == null)
        {
            return;
        }

        if (Owner.IsIdle())
        {
            mState = StateTriggerSetting.StateType.STATE_IDLE;
            List <StateTriggerSetting.TriggerSetting> trigger_setting_list = null;
            if (mStateTriggerMap.TryGetValue(mState, out trigger_setting_list))
            {
                PlayEffect(trigger_setting_list, mState);
            }
        }
    }
Exemplo n.º 5
0
    /// <summary>
    /// 播放指定触发信息对应的特效
    /// </summary>
    private void PlayEffect(List <StateTriggerSetting.TriggerSetting> trigger_setting_list, StateTriggerSetting.StateType state_type)
    {
        // 先删除特效
        RecycleEffect();

        if (!mIsEnable)
        {
            return;
        }

        // 判断是否需要隐藏特效
        bool need_effect_hide = false;
        bool is_visible       = Owner != null ? Owner.mVisibleCtrl.IsVisible : false;

        if (!is_visible)
        {
            need_effect_hide = true;
        }
        else
        {
            if (Owner.IsPlayer())//检查角色的特效数量是否超出限制
            {
                if (!Owner.IsLocalPlayer)
                {
                    need_effect_hide = true;
                }
            }
            else// 如果召唤怪或者宠物的主人是玩家,释放的技能特效也需要隐藏
            {
                var parent_actor = Owner.ParentActor;
                if (parent_actor != null && parent_actor.IsPlayer() && !parent_actor.IsLocalPlayer)
                {
                    need_effect_hide = true;
                }
            }
        }

        if (need_effect_hide)
        {
            return;
        }

        foreach (var trigger_setting in trigger_setting_list)
        {
            StartCoroutine(LoadEffect(trigger_setting, state_type));
        }
    }