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); } } }
/// <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; } } } }
//移动对外接口 //设置好了目标点和停止距离之后会自动在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; } } } }
/// <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); }
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); } }
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(); }
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); }
/* * 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); }
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); }
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); } } } }