Beispiel #1
0
        public void FinishAnimEffect(int finishedAnimID)
        {
            if (m_ObjChar == null)
            {
                return;
            }
            Tab_Animation curAnim = TableManager.GetAnimationByID(finishedAnimID, 0);

            if (curAnim == null)
            {
                LogModule.WarningLog("cur animation id is not exit " + finishedAnimID.ToString());
                return;
            }
            for (int i = 0; i < curAnim.getStartEffectCount(); i++)
            {
                int effectId = curAnim.GetStartEffectbyIndex(i);
                if (effectId != -1)
                {
                    if (curAnim.GetIsStartEffectAutoEndbyIndex(i) == false)
                    {
                        m_ObjChar.StopEffect(effectId);
                    }
                }
            }
            if (curAnim.EndEffect >= 0)
            {
                if (DebugHelper.m_bShowEffect)
                {
                    m_ObjChar.PlayEffect(curAnim.EndEffect);
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// 顿帧效果
        /// </summary>
        private void DelayFrameEffect()
        {
            //获取当前技能播放技能信息
            if (!m_IsDunFrame)
            {
                m_CurrentAnimation = GetAnimInfoById(m_CurrentAnimationId);
                if (m_CurrentAnimation == null)
                {
                    m_ObjChar.IsSkillHurt = false;
                    m_IsDunFrame          = false;
                    m_IsDunFramePlay      = true;
                    return;
                }
                if (m_CurrentAnimation.DelayFrameSpeed <= 0)
                {
                    //结束循环
                    m_ObjChar.IsSkillHurt = false;
                    m_IsDunFrame          = false;
                    m_CurrentAnimation    = null;
                    m_IsDunFramePlay      = true;
                    return;
                }

                m_curAnimState = m_animation[m_CurrentAnimation.AinmName];
                if (m_curAnimState == null)
                {
                    m_ObjChar.IsSkillHurt = false;
                    m_IsDunFrame          = false;
                    m_CurrentAnimation    = null;
                    m_IsDunFramePlay      = true;
                    return;
                }
                m_curAnimState.speed = m_CurrentAnimation.DelayFrameSpeed;
                m_IsDunFrame         = true;
                m_CurPlayTime        = Time.time;
            }
            else
            {
                if (Time.time - m_CurPlayTime >= m_DelaySpeedTime)
                {
                    m_IsDunFrame          = false;
                    m_ObjChar.IsSkillHurt = false;
                    m_IsDunFramePlay      = true;

                    if (m_CurrentAnimation != null)
                    {
                        m_curAnimState = m_animation[m_CurrentAnimation.AinmName];
                        if (m_curAnimState != null)
                        {
                            m_curAnimState.speed = m_CurrentAnimation.SPEED;
                        }

                        m_curAnimState     = null;
                        m_CurrentAnimation = null;
                    }
                }
            }
        }
Beispiel #3
0
        //移动对外接口
        //设置好了目标点和停止距离之后会自动在Update中移动
        public void BeforeMoveTo(bool bIsAutoSearch)
        {
            if (ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER)
            {
                //寻路过程中 打断主角的自动战斗状态
                //  Singleton<ObjManager>.GetInstance().MainPlayer.BreakAutoCombatState();

                //如果不是自动寻路,而AutoSearchAgent还在工作的话,则清理自动寻路状态
                if (false == bIsAutoSearch &&
                    null != GameManager.gameManager.AutoSearch &&
                    true == GameManager.gameManager.AutoSearch.IsAutoSearching)
                {
                    GameManager.gameManager.AutoSearch.Stop();
                }
                else if (bIsAutoSearch) //如果是自动寻路
                {
                    //打断自动挂机状态
                    Singleton <ObjManager> .GetInstance().MainPlayer.BreakAutoCombatState();
                }
            }
            //打断 移动可以打断的技能
            if (m_SkillCore != null)
            {
                if (m_SkillCore.UsingSkillBaseInfo != null &&
                    m_SkillCore.UsingSkillBaseInfo.IsMoveBreak == 1)
                {
                    m_SkillCore.BreakCurSkill();
                }
            }
            if (AnimLogic != null && AnimLogic.CurAnimData != null)
            {
                if (AnimLogic.CurAnimData.AnimID == (int)CharacterDefine.CharacterAnimId.Hit)
                {
                    m_AnimLogic.Stop();
                }
                else if (m_SkillCore != null && m_SkillCore.UsingSkillBaseInfo == null && AnimLogic.CurAnimData.AnimID != GlobeVar.INVALID_ID)
                {
                    int nAnimationId = m_SkillCore.UsingSkillStartAni;
                    while (nAnimationId != GlobeVar.INVALID_ID)
                    {
                        if (nAnimationId == AnimLogic.CurAnimData.AnimID)
                        {
                            m_AnimLogic.Stop();
                            break;
                        }

                        Tab_Animation tabAnimation = TableManager.GetAnimationByID(nAnimationId, 0);
                        if (tabAnimation == null)
                        {
                            break;
                        }

                        nAnimationId = tabAnimation.NextAnimId;
                    }
                }
            }
        }
Beispiel #4
0
        /// <summary>
        /// 飞行起始动作的持续时间
        /// </summary>
        /// <param name="nStartAniId">
        /// 起始动作ID
        /// </param>
        /// <returns> 当前动作需要持续的时间 单位为(秒)</returns>
        virtual public float GetCurFlyStartAnimTime(int nStartAniId)
        {
            Tab_Animation newAnimation = m_AnimLogic.GetAnimInfoById(nStartAniId);

            if (newAnimation == null)
            {
                return(0);
            }

            Tab_Animation nextAnimation = m_AnimLogic.GetAnimInfoById(newAnimation.LoopOverAnimId);

            if (null == newAnimation)
            {
                return(0);
            }

            if (nextAnimation.AinmName.Length <= 0)
            {
                return(0);
            }
            //检查脚本
            if (m_AnimLogic.AnimResFilePath.Length <= 0)
            {
                return(0);
            }

            string fullPath = string.Format("{0}/{1}", m_AnimLogic.AnimResFilePath, nextAnimation.AinmName);

            AnimationClip nextClip = ResourceManager.LoadResource(fullPath) as AnimationClip;

            if (null == nextClip || _FlyStateData.IsNotNull() == false)
            {
                return(0);
            }

            //加载资源比较耗时,加个时间精确判断
            float nRemainTime = _FlyStateData.fRemainTime - (Time.time - _FlyStateData.fInitTime);

            if (nRemainTime > -1)
            {
                _FlyStateData.SetRemainTime(nRemainTime);
            }

            float curClipTime = _FlyStateData.fRemainTime - nextClip.length / nextAnimation.SPEED;

            return(curClipTime < 0 ? 0 : curClipTime);
        }
Beispiel #5
0
        virtual public void OnAnimationFinish(int animationID)
        {
            Tab_Animation animInfo = TableManager.GetAnimationByID(animationID, 0);

            if (IsDie())
            {
                return;
            }
            if (animInfo == null)
            {
                return;
            }
            if (m_AnimLogic == null)
            {
                return;
            }

            if (animInfo.NextAnimId != -1)
            {
                //       m_AnimLogic.Stop();
                m_AnimLogic.Play(animInfo.NextAnimId);
            }
        }
Beispiel #6
0
        public void BreakCurSkill()
        {
            //打断当前技能动作
            if (m_nLastSkillId == -1 || m_bIsUsingSkill == false)
            {
                return;
            }
            if (m_UsingSkillBaseInfo == null || m_UsingSkillExInfo == null || m_SkillSender == null)
            {
                return;
            }

            if (m_SkillSender.AnimLogic != null)
            {
                if (m_SkillSender.AnimLogic.CurAnimData != null)
                {
                    Tab_Animation _CurAnimInfo = TableManager.GetAnimationByID(m_SkillSender.AnimLogic.CurAnimData.AnimID, 0);
                    if (_CurAnimInfo != null)
                    {
                        //技能被打断了 停止当前技能动作的音效
                        if (_CurAnimInfo.SoundID >= 0 && _CurAnimInfo.SoundBreakKeep <= 0 && null != GameManager.gameManager.SoundManager)
                        {
                            GameManager.gameManager.SoundManager.StopSoundEffect(_CurAnimInfo.SoundID);
                        }
                    }
                    Tab_Animation _StartAnimInfo = TableManager.GetAnimationByID(m_UsingSkillExInfo.SatrtMotionId, 0);
                    if (_StartAnimInfo != null)
                    {
                        //技能被打断了 停止开始技能动作的音效
                        if (_StartAnimInfo.SoundID >= 0 && _CurAnimInfo.SoundBreakKeep <= 0 && null != GameManager.gameManager.SoundManager)
                        {
                            GameManager.gameManager.SoundManager.StopSoundEffect(_StartAnimInfo.SoundID);
                        }
                    }
                }
                m_SkillSender.AnimLogic.Stop();
            }

            //打断震屏
            if (m_SkillSender.ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER)
            {
                //如果 该技能还有震屏且还在震屏 则停止震屏
                if (m_UsingSkillExInfo.CameraRockId != -1)
                {
                    //CameraController camController = Singleton<ObjManager>.GetInstance().MainPlayer.GetComponent<CameraController>();
                    //if (camController != null && camController.IsHaveRockInfoById(m_UsingSkillExInfo.CameraRockId))
                    //{
                    //    camController.CleanUpRockInfoById(m_UsingSkillExInfo.CameraRockId);
                    //}
                    if (CameraManager.Instance.IsRocking(m_UsingSkillExInfo.CameraRockId))
                    {
                        CameraManager.Instance.StopRock(m_UsingSkillExInfo.CameraRockId);
                    }
                }
                //如果是吟唱技能 则打断读条
                if (m_UsingSkillBaseInfo.UseType == (int)SKILLUSETYPE.YINCHANG)
                {
                    if (SkillProgressLogic.Instance() != null)
                    {
                        SkillProgressLogic.Instance().CloseWindow();
                    }
                }
                //读条技能 打断读条
                if ((m_UsingSkillBaseInfo.SkillClass & (int)SKILLCLASS.DUTIAO) != 0)
                {
                    if (SkillProgressLogic.Instance() != null)
                    {
                        SkillProgressLogic.Instance().CloseWindow();
                    }
                }
            }
            //打断全屏特效
            if (m_UsingSkillExInfo.SceneEffectId != -1)
            {
                if (BackCamerControll.Instance() != null && BackCamerControll.Instance().SceneEffecLogic != null)
                {
                    BackCamerControll.Instance().SceneEffecLogic.StopEffect(m_UsingSkillExInfo.SceneEffectId);
                }
            }
            //打断播放的子弹
            int nBulletNum = m_UsingSkillExInfo.getBulletEffectIDCount();

            for (int i = 0; i < nBulletNum; i++)
            {
                int _nBulletId = m_UsingSkillExInfo.GetBulletEffectIDbyIndex(i);
                if (_nBulletId != -1 && m_SkillSender.ObjEffectController != null)
                {
                    m_SkillSender.ObjEffectController.StopEffect(_nBulletId);
                }
            }
            SkillFinsh();
        }
Beispiel #7
0
        public uint Execute(PacketDistributed ipacket)
        {
            GC_MOVE packet = (GC_MOVE)ipacket;

            if (null == packet)
            {
                return((uint)PACKET_EXE.PACKET_EXE_ERROR);
            }

            //临时代码,先返回,调试的时候打开
            //return (uint)PACKET_EXE.PACKET_EXE_CONTINUE;

            //判断ServerID
            if (packet.Serverid == GlobeVar.INVALID_ID)
            {
                return((uint)PACKET_EXE.PACKET_EXE_CONTINUE);
            }

            //查找该NPC
            Obj_Character obj = Singleton <ObjManager> .GetInstance().FindObjCharacterInScene(packet.Serverid);

            if (null == obj)
            {
                return((uint)PACKET_EXE.PACKET_EXE_CONTINUE);
            }

            //主玩家,消息包无效
            if (obj.ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_MAIN_PLAYER)
            {
                return((uint)PACKET_EXE.PACKET_EXE_CONTINUE);
            }

            //主玩家伙伴,消息包无效
            if (obj.ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_FELLOW)
            {
                Obj_Fellow objFellow = obj as Obj_Fellow;
                if (objFellow.OwnerObjId == Singleton <ObjManager> .GetInstance().MainPlayer.ServerID)
                {
                    return((uint)PACKET_EXE.PACKET_EXE_CONTINUE);
                }
            }

            if (obj.ObjType == Games.GlobeDefine.GameDefine_Globe.OBJ_TYPE.OBJ_OTHER_PLAYER)
            {
                Obj_OtherPlayer objOther = obj as Obj_OtherPlayer;
                if (null != objOther)
                {
                    if (objOther.QingGongState == true || objOther.IsLightState == true || objOther.BindParent > 0)
                    {
                        return((uint)PACKET_EXE.PACKET_EXE_CONTINUE);
                    }

                    if (objOther.AnimLogic != null && objOther.AnimLogic.CurAnimData != null)
                    {
                        if (objOther.AnimLogic.CurAnimData.AnimID == (int)CharacterDefine.CharacterAnimId.Hit)
                        {
                            objOther.AnimLogic.Stop();
                        }
                        else if (objOther.SkillCore != null && objOther.SkillCore.UsingSkillBaseInfo != null && objOther.SkillCore.UsingSkillBaseInfo.IsMove != 1)
                        {
                            int nAnimationId = objOther.SkillCore.UsingSkillStartAni;
                            while (nAnimationId != GlobeVar.INVALID_ID)
                            {
                                if (nAnimationId == objOther.AnimLogic.CurAnimData.AnimID)
                                {
                                    objOther.AnimLogic.Stop();
                                    break;
                                }

                                Tab_Animation tabAnimation = TableManager.GetAnimationByID(nAnimationId, 0);
                                if (tabAnimation == null)
                                {
                                    break;
                                }

                                nAnimationId = tabAnimation.NextAnimId;
                            }
                        }
                    }

                    if (objOther.SkillCore.UsingSkillStartAni != GlobeVar.INVALID_ID && objOther.SkillCore.UsingSkillBaseInfo == null)
                    {
                        objOther.SkillCore.UsingSkillStartAni = GlobeVar.INVALID_ID;
                    }
                }
            }

            //查找Obj是否绑定AutoMove组件
            AutoMove autoMove = obj.AutoMoveComponent;

            if (null != autoMove)
            {
                autoMove.InsertAutoMovePoint(packet);
            }

            return((uint)PACKET_EXE.PACKET_EXE_CONTINUE);
        }
Beispiel #8
0
        /*
         * private bool CheckAnimation(Tab_Animation curTabAnimation, CheckAnimationDelegate defFun)
         * {
         *  if (null == m_animation)
         *  {
         *      return false;
         *  }
         *
         *  //如果为空,则尝试加载
         *  if (null == m_animation[curTabAnimation.AinmName])
         *  {
         *      LoadAnimation(curTabAnimation.AinmName);
         *  }
         *
         *  //再次判断是否为空
         *  if (null == m_animation[curTabAnimation.AinmName])
         *  {
         *      return false;
         *  }
         *
         *  return true;
         * }
         */
        public Tab_Animation GetAnimInfoById(int AnimaId)
        {
            Tab_Animation animInfo = TableManager.GetAnimationByID(AnimaId, 0);

            return(animInfo);
        }
Beispiel #9
0
        public bool Play(int animId, Callback animFinishCallback = null, bool iSpeedMax = false, bool isSound = true)
        {
            //Debug.LogError("Play Animation :" + animId);
            Tab_Animation newAnimation = GetAnimInfoById(animId);

            if (newAnimation == null)
            {
                return(false);
            }
            if (m_animation == null)
            {
                return(false);
            }

#if UNITY_ANDROID
            if (IsOtherPlayer && OtherPlayer != null)
            {
                if (OtherPlayer != null)
                {
                    if (OtherPlayer.OtherPlayerMoveTag == string.Empty)
                    {
                        OtherPlayer.OtherPlayerMoveTag = newAnimation.AinmName;
                    }
                    else
                    {
                        if (OtherPlayer.OtherPlayerMoveTag == "Run" && newAnimation.AinmName == "Stand")
                        {
                            newAnimation = null;
                            return(true);
                        }
                    }
                }
            }
#endif
            if (animStateCache == null)
            {
                LogModule.WarningLog("can't play animation, animationlogic shoud initstate before use it.");
                return(false);
            }
            if (m_curAnimData != null && m_animation.IsPlaying(m_curAnimData.AinmName) && m_curAnimData.IsCanBreak == false)
            {
                return(false);
            }
            if (m_animation.IsPlaying(newAnimation.AinmName) &&
                m_curAnimData != null &&
                m_curAnimData.AnimID == animId)
            {
                return(false);
            }

            if (animStateCache.ContainsKey(animId))
            {
                m_curAnimData = animStateCache[animId];
            }
            else
            {
                m_curAnimData = GetAnimInfoById(animId);
                animStateCache.Add(animId, m_curAnimData);
            }

            if (m_curAnimData == null)
            {
                return(false);
            }

            //如果为空,则尝试加载
            if (null == m_animation[m_curAnimData.AinmName])
            {
                //检查动作名和动作Obj
                if (m_curAnimData.AinmName.Length <= 0)
                {
                    return(false);
                }
                //检查脚本
                if (m_animResFilePath.Length <= 0)
                {
                    return(false);
                }

                string        fullPath = string.Format("{0}/{1}", m_animResFilePath, m_curAnimData.AinmName);
                AnimationClip clip     = ResourceManager.LoadResource(fullPath) as AnimationClip;
                //AnimationClip clip = (AnimationClip)ResourceManager.CreateUnityObject(fullPath, strAnim);
                if (null != clip)
                {
                    OnLoadAnimation(fullPath, clip, iSpeedMax, isSound);
                }
                else
                {
                    LogModule.DebugLog("animation load fail:" + fullPath + ":::" + m_curAnimData.AinmName + "::" + animId);
                }
            }
            else
            {
                OnLoadAnimation(m_curAnimData.AinmName, m_animation.GetClip(m_curAnimData.AinmName), iSpeedMax, isSound);
            }

            if (null != m_AnimFinishSpecificCallback)
            {
                m_AnimFinishSpecificCallback.Invoke();
            }
            m_AnimFinishSpecificCallback = animFinishCallback;
            return(true);
        }
Beispiel #10
0
        protected void CheckForNeedCallBack()
        {
            if (m_animation == null)
            {
                return;
            }
            if (m_animGameObj == null)
            {
                return;
            }
            if (m_NeedCheckEndCallBack == null || m_NeedCheckEndCallBack.Count <= 0)
            {
                return;
            }
            if (m_curAnimData == null)
            {
                return;
            }
            LinkedList <int> NeedRemoveAnim = new LinkedList <int>();

            int[] TmpNeedCheckArry = new int[m_NeedCheckEndCallBack.Count];
            m_NeedCheckEndCallBack.CopyTo(TmpNeedCheckArry, 0);
            for (int AnimIndex = 0; AnimIndex < TmpNeedCheckArry.Length; AnimIndex++)
            {
                int AnimId = TmpNeedCheckArry[AnimIndex];
                if (m_NeedCheckEndCallBack.Contains(AnimId) == false)
                {
                    continue;
                }
                Tab_Animation curAnimData = GetAnimInfoById(AnimId);
                if (curAnimData != null && m_animGameObj != null)
                {
                    if (curAnimData.WrapMode != 2 && m_animation.IsPlaying(curAnimData.AinmName) == false)
                    {
                        if (m_ObjChar != null)
                        {
                            if (m_ObjChar != null)
                            {
                                FinishAnimEffect(curAnimData.AnimID);
                            }
                            m_ObjChar.OnAnimationFinish(curAnimData.AnimID);
                            if (null != m_AnimFinishSpecificCallback)
                            {
                                m_AnimFinishSpecificCallback.Invoke();
                                m_AnimFinishSpecificCallback = null;
                            }
                        }
                        NeedRemoveAnim.AddFirst(curAnimData.AnimID);
                    }
                    else if (curAnimData.WrapMode == 2 && m_fLastLoopTime > 0)
                    {
                        if (curAnimData.SPEED != 0 && m_animation[curAnimData.AinmName] != null)
                        {
                            float LoopOnecAnimTime = m_animation[curAnimData.AinmName].length / m_curAnimData.SPEED;
                            if (Time.time - m_fLastLoopTime >= (m_nLoopTimes + 1) * LoopOnecAnimTime)
                            {
                                m_nLoopTimes++;
                                if (m_ObjChar != null)
                                {
                                    m_ObjChar.OnAnimationFinish(curAnimData.AnimID);
                                    if (null != m_AnimFinishSpecificCallback)
                                    {
                                        m_AnimFinishSpecificCallback.Invoke();
                                        m_AnimFinishSpecificCallback = null;
                                    }
                                }
                            }
                        }

                        //如果是击飞动作单独用时间控制
                        if (m_ObjChar != null && IsFlyStartMotionId(curAnimData.AnimID))
                        {
                            if (m_ObjChar._FlyStateData != null && Time.time - m_fLastLoopTime >= m_ObjChar._FlyStateData.fStartAnimationTime)
                            {
                                Stop();
                                m_nLoopTimes    = 0;
                                m_fLastLoopTime = 0.0f;
                                if (curAnimData.LoopOverAnimId != -1)
                                {
                                    Play(curAnimData.LoopOverAnimId);
                                }
                            }
                            //TT 4528 刷出来的怪有可能是躺着的情况(躺着的怪正在播放击飞动画)。
                            //正在被击飞 而击飞的数据为空 ---直接stop。
                            else if (m_ObjChar._FlyStateData == null)
                            {
                                Stop();
                            }
                        }
                        else if (m_nLoopTimes >= curAnimData.LoopTime)
                        {
                            Stop();
                            m_nLoopTimes    = 0;
                            m_fLastLoopTime = 0.0f;
                            if (m_curAnimData.LoopOverAnimId != -1)
                            {
                                Play(m_curAnimData.LoopOverAnimId);
                            }
                        }
                    }
                }
            }
            if (NeedRemoveAnim != null && NeedRemoveAnim.Count > 0)
            {
                foreach (int animId in NeedRemoveAnim)
                {
                    if (m_NeedCheckEndCallBack.Contains(animId))
                    {
                        m_NeedCheckEndCallBack.Remove(animId);
                    }
                }
            }
        }