示例#1
0
 /// <summary>
 /// 停止NPC当前播放的特效
 /// </summary>
 public void StopNPCEffect()
 {
     if (ObjEffectController != null)
     {
         ObjEffectController.NPCStopEffect();
     }
 }
        //开始进行轻功移动
        private void StartLightSkillMove(int nAnimID, Vector3 vecTargetPos)
        {
            IsLightState            = true;
            m_fTotalLightHightRefix = 0.0f;
            //首先屏蔽掉NavMesh和胶囊碰撞
            if (null != NavAgent && NavAgent.enabled)
            {
                NavAgent.enabled = false;
            }

            //面向目标点
            FaceTo(vecTargetPos);

            //皆为直线运动,所以直接底层MoveTo即可
            MoveTo(vecTargetPos, null, 0.0f);

            if (null != AnimLogic)
            {
                AnimLogic.Stop();
                AnimLogic.Play(nAnimID);
            }

            if (null != ObjEffectController)
            {
                ObjEffectController.PlayEffect(GlobeVar.LIGHT_SKILL_EFFECT);
            }

            m_LightSkillTargetPos = vecTargetPos;

            //开启拖尾特效
            //ShowLightShadowEffect(true);


            //主角的话播放音效
            if (ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER)
            {
                if (null != GameManager.gameManager.SoundManager)
                {
                    GameManager.gameManager.SoundManager.PlaySoundEffect(149);
                }

                //打开拖尾特效
                if (null != ObjEffectController)
                {
                    ObjEffectController.PlayEffect(GlobeVar.LIGHT_SKILL_TAIL);
                }
            }
        }
示例#3
0
        //行走状态处理
        void ProcessWalkAnimState()
        {
            //移动时 还在播受击动作或者击倒动作 则停止播放
            if (AnimLogic != null &&
                AnimLogic.CurAnimData != null)
            {
                if (AnimLogic.CurAnimData.AnimID == (int)CharacterDefine.CharacterAnimId.Hit ||
                    AnimLogic.CurAnimData.AnimID == (int)CharacterDefine.CharacterAnimId.Knockback_01)
                {
                    m_AnimLogic.Stop();
                }
                if (IsLightState == false && AnimLogic.CurAnimData.AnimID == (int)CharacterDefine.CharacterAnimId.LIGHTSKILLEND)
                {
                    m_AnimLogic.Stop();
                }
            }
            if (ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER)
            {
                // 玩家装备了坐骑
                Obj_MainPlayer MainPlayer = Singleton <ObjManager> .GetInstance().MainPlayer;

                if (MainPlayer.IsDie() == false && MainPlayer.GetEquipMountID() > 0 && MainPlayer.MountObj)
                {
                    m_AnimLogic.Play((int)CharacterDefine.CharacterAnimId.Walk);
                    CharacterDefine.MountAction nMountPlayerAniID = CharacterDefine.MountAction.RUN;
                    if (MainPlayer.GetEquipMountID() == GlobeVar.MOUNT_TIANLONG_ID)
                    {
                        nMountPlayerAniID = CharacterDefine.MountAction.STAND;
                    }
                    MainPlayer.MountObj.PlayMountPlayerAnima(nMountPlayerAniID, MainPlayer);
                }
                else
                {
                    m_AnimLogic.Play((int)(CharacterDefine.CharacterAnimId.Walk));
                }
            }
            else
            {
                if (ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_OTHER_PLAYER)
                {
                    Obj_OtherPlayer OtherPlayer = this.GetComponent <Obj_OtherPlayer>();
                    if (OtherPlayer && OtherPlayer.IsDie() == false && OtherPlayer.MountID > 0 && OtherPlayer.MountObj)
                    {
                        m_AnimLogic.Play((int)CharacterDefine.CharacterAnimId.Walk);
                        CharacterDefine.MountAction nMountPlayerAniID = CharacterDefine.MountAction.RUN;
                        if (OtherPlayer.MountID == GlobeVar.MOUNT_TIANLONG_ID)
                        {
                            nMountPlayerAniID = CharacterDefine.MountAction.STAND;
                        }
                        OtherPlayer.MountObj.PlayMountPlayerAnima(nMountPlayerAniID, OtherPlayer);
                    }
                    else
                    {
                        m_AnimLogic.Play((int)(CharacterDefine.CharacterAnimId.Walk));
                    }
                }
                else
                {
                    m_AnimLogic.Play((int)(CharacterDefine.CharacterAnimId.Walk));
                }
            }
            if (ObjEffectController != null)
            {
                ObjEffectController.OnMove();
            }
        }
示例#4
0
        //待机状态处理
        void ProcessIdleAnimState(bool playEffectImmediately = true)
        {
            if (ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER)
            {
                // 玩家装备了坐骑
                Obj_MainPlayer MainPlayer = Singleton <ObjManager> .GetInstance().MainPlayer;

                if (MainPlayer.IsDie() == false && MainPlayer.GetEquipMountID() > 0 && MainPlayer.MountObj)
                {
                    m_AnimLogic.Play((int)CharacterDefine.CharacterAnimId.Stand);
                    MainPlayer.MountObj.PlayMountPlayerAnima(CharacterDefine.MountAction.STAND, MainPlayer);
                }
                else
                {
                    if (MainPlayer.InDizzy)
                    {
                        m_AnimLogic.Stop();
                        m_AnimLogic.Play((int)CharacterDefine.CharacterAnimId.DizzyId);
                        return;
                    }

                    if (MainPlayer.InCombat)
                    {
                        m_AnimLogic.Play((int)CharacterDefine.CharacterAnimId.AttackStand);
                    }
                    else
                    {
                        m_AnimLogic.Play((int)CharacterDefine.CharacterAnimId.Stand);
                    }
                }
            }
            else
            {
                if (ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_OTHER_PLAYER)
                {
                    Obj_OtherPlayer OtherPlayer = this as Obj_OtherPlayer;
                    if (OtherPlayer && OtherPlayer.IsDie() == false && OtherPlayer.MountID > 0 && OtherPlayer.MountObj)
                    {
                        m_AnimLogic.Play((int)CharacterDefine.CharacterAnimId.Stand);
                        OtherPlayer.MountObj.PlayMountPlayerAnima(CharacterDefine.MountAction.STAND, OtherPlayer);
                    }
                    else
                    {
                        if (OtherPlayer.InDizzy)
                        {
                            m_AnimLogic.Stop();
                            m_AnimLogic.Play((int)CharacterDefine.CharacterAnimId.DizzyId);
                            return;
                        }
                        m_AnimLogic.Play((int)(CharacterDefine.CharacterAnimId.Stand));
                    }
                }
                else
                {
                    if (this.InDizzy)
                    {
                        m_AnimLogic.Stop();
                        m_AnimLogic.Play((int)CharacterDefine.CharacterAnimId.DizzyId);
                        return;
                    }
                    //如果是其他Obj,就需要根据DataID区分是否为战斗型的NPC
                    //非战斗NPC默认播放Stand动作
                    //战斗NPC播放AttackStand动作
                    Tab_RoleBaseAttr roleBaseTab = TableManager.GetRoleBaseAttrByID(BaseAttr.RoleBaseID, 0);
                    if (null != roleBaseTab && roleBaseTab.CombatNPC > 0)
                    {
                        //是战斗NPC,播放AttackStand
                        if (playEffectImmediately)
                        {
                            m_AnimLogic.Play((int)(CharacterDefine.CharacterAnimId.AttackStand));
                        }
                    }
                    else
                    {
                        m_AnimLogic.Play((int)(CharacterDefine.CharacterAnimId.Stand));
                    }
                }
            }
            if (ObjEffectController != null)
            {
                ObjEffectController.OnIdle();
            }
        }
        public void EndLightSkillMove()
        {
            if (false == m_bIsLightState || m_LightSkillTargetPos == Vector3.zero)
            {
                return; // 不能重复进入停止轻功
            }
            //一旦进入End,则没有机会触发二段跳,重置所有标记位
            m_bIsLightState = false;
            m_fMoveSpeed    = 5.0f;
            //m_bIsLightSecondStepState = false;
            //m_bIsLightSecondStepActived = false;

            StopMove();
            if (AnimLogic != null && AnimLogic.CurAnimData != null &&
                AnimLogic.CurAnimData.AnimID != (int)CharacterDefine.CharacterAnimId.LIGHTSKILLEND) // TT 10240,修复落地动画播放不完全bug [12/16/2014 yuxiaoxi]
            {
                AnimLogic.Stop();
            }


            //有可能在空中,所以要恢复一下
            if (ObjTransform != null)
            {
                if (Mathf.Abs(ObjTransform.position.y - ActiveScene.GetTerrainPosition(ObjTransform.position).y) > 1.0f)
                {
                    Vector3 pos = new Vector3(ObjTransform.position.x, ActiveScene.GetTerrainPosition(ObjTransform.position).y, ObjTransform.position.z);
                    ObjTransform.position = pos;
                }

                try
                { // 尝试找一下跟目标点是否有路径,如果异常,就是发生了人在非行走区域,这时候,我要把人强制拽到目标点
                    NavMeshHit hit;
                    bool       bhit = NavMesh.SamplePosition(ObjTransform.position, out hit, 1f, 1);
                    if (bhit == false)
                    { // 经检查,玩家落点不在navmesh上,则射线发射出去到目标点找一个点,如果能找到,则使用找到的点,如果找不到,则直接目标点
                        bhit = NavMesh.SamplePosition(ObjTransform.position, out hit, 5f, 1);
                        if (bhit == false)
                        { // 5m检测没有找到,直接放到最终点,虽然可能闪,但是没问题
                            ObjTransform.position = new Vector3(
                                m_LightSkillTargetPos.x,
                                ActiveScene.GetTerrainPosition(m_LightSkillTargetPos).y,
                                m_LightSkillTargetPos.z
                                );
                        }
                        else
                        { // 找到了
                            ObjTransform.position = hit.position;
                        }
                    }
                }
                catch (System.Exception ex)
                {
                    LogModule.ErrorLog("EndLightSkillMove System.Exception ex " + ex.ToString());
                }
                finally
                {
                    LogModule.ErrorLog("!!!!!!!EndLightSkillMove finally!!!!!!!!");
                }
            }


            // begin 注意:m_LightSkillTargetPos是目标点,但是不是轻功的最终结束点,因为如果中途被减速,这个店并没有修正,所以下面一段代码不能执行 [12/27/2014 yuxiaoxi]
            //if (Vector3.Distance(ObjTransform.position, m_LightSkillTargetPos) >= 3.0f &&
            //    m_LightSkillTargetPos != Vector3.zero)
            //{ // 如果结束后的玩家坐标点和目标点差距太大,则直接拽到目标点
            //    ObjTransform.position = new Vector3(
            //        m_LightSkillTargetPos.x,
            //        ActiveScene.GetTerrainPosition(m_LightSkillTargetPos).y,
            //        m_LightSkillTargetPos.z
            //        ); // 既然结束了,强制设到目标点会有什么问题?
            //}
            // end [12/27/2014 yuxiaoxi]

            //恢复寻路和胶囊碰撞
            if (NavAgent)
            {
                NavAgent.enabled = true;
            }

            m_LightSkillTargetPos = Vector3.zero;

            //开启拖尾特效
            //ShowLightShadowEffect(false);

            //主角的话停止播放音效
            if (ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER)
            {
                if (null != GameManager.gameManager.SoundManager)
                {
                    GameManager.gameManager.SoundManager.StopSoundEffect(149);
                }

                //关闭拖尾特效
                if (null != ObjEffectController)
                {
                    ObjEffectController.StopEffect(GlobeVar.LIGHT_SKILL_TAIL);
                }
            }

            if (null != ObjEffectController)
            {
                ObjEffectController.StopEffect(GlobeVar.LIGHT_SKILL_EFFECT);
            }
        }