| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307 |
- using UnityEngine;
- using System.Collections.Generic;
- public class FighterSkillStateData
- {
- float mNormalAttackCd; //普通cd时间
- float mSkillCd; //技能cd时间
- int mSkillTotalFrame = 0;
- bool mIsPlaying;
- bool mIsNormalEnd;
- int mNextSkillIdex = 0;
- Fighter mFighter;
- BulletManager mBulletMgr;
- BaseSkill mSkill;
- List<BattleBuff> mBuffList;
- SkillData mSkillInfo;
-
- SkillMoveProcessor mSkillMoveProcessor;
- SkillHitRange mSkillHitRange;
- FighterStatistics mStatistics;
- SkillActionFrameEvent mFixHurtWordPositionEvt;
- List<int> mTriggeredEffects;
- List<Fighter> mPredictHitFighters;
- List<Fighter> mTempHitFighters;
- public FighterStatistics Statistics { get { return mStatistics; } }
- public FighterSkillStateData (Fighter fighter)
- {
- mFighter = fighter;
- mTriggeredEffects = new List<int> ();
- mSkillMoveProcessor = new SkillMoveProcessor (fighter);
- mSkillHitRange = new SkillHitRange ();
- mBulletMgr = new BulletManager ();
- }
- public BulletManager BulletMgr { get { return mBulletMgr; } }
- public BaseSkill Skill { get { return mSkill; } }
- public SkillHitRange HitRange { get { return mSkillHitRange; } }
- public Fighter CurrentHitFighter { get; private set; }
- public Fighter TargetFighter { get; set; }
- public SkillMoveProcessor MoveProcessor { get { return mSkillMoveProcessor; } }
- public float NormalAttackCd { get { return mNormalAttackCd; } }
- public bool IsNormalEnd { get { return mIsNormalEnd; } }
- public bool IsDisposed { get; private set; }
- public float GetCd (int skillTypeId)
- {
- if(skillTypeId > SkillType.NormalAttack)
- {
- return mSkillCd;
- }
- else
- {
- return mNormalAttackCd;
- }
- }
- public void ResetNormalAttackCd()
- {
- mNormalAttackCd = mFighter.AttackCD;
- }
- public void OnFightingStart ()
- {
- if (mFighter.Battle.BattleStatistics != null)
- {
- if((mFighter.IsPlayer || mFighter.IsBoss || mFighter.IsPet) && !mFighter.IsCloned)
- mStatistics = mFighter.Battle.BattleStatistics.GetFighterStatistics(mFighter);
- }
- mNormalAttackCd = 0;
- BaseSkill firstSkill = mFighter.GetSkill(SkillType.Attack1);
- if (firstSkill != null)
- {
- mSkillCd = firstSkill.SkillDataInfo.cd;
- mFighter.Ctrl.OnFightingStart(firstSkill);
- }
- else
- {
- mSkillCd = 0;
- }
- }
- public void ClearAllCd ()
- {
- mNormalAttackCd = 0;
- mSkillCd = 0;
- }
- public void ClearCd (int skillType)
- {
- if (skillType > 0)
- mSkillCd = 0;
- if (skillType == SkillType.NormalAttack)
- mNormalAttackCd = 0;
- }
- public void Dispose ()
- {
- if (IsDisposed)
- return;
- mNextSkillIdex = 0;
- IsDisposed = true;
- mBulletMgr.Clear ();
- mFighter = null;
- mSkill = null;
- mSkillInfo = null;
- mTriggeredEffects = null;
- mPredictHitFighters = null;
- mTempHitFighters = null;
- mSkillMoveProcessor = null;
- mSkillHitRange = null;
- mStatistics = null;
- //DebugHelper.LogError(mFighter.Name + " Dispose");
- }
- public void Clear()
- {
- if (mBulletMgr != null)
- mBulletMgr.Clear();
- mSkillMoveProcessor.Stop();
- mNextSkillIdex = 0;
- mFighter.Actor.ResetFirstSkill();
- ClearAllCd();
- }
- public void OnEnter (BaseSkill skill)
- {
- if (mIsPlaying)
- return;
- mSkill = skill;
- mSkillInfo = skill.SkillDataInfo;
- mIsPlaying = true;
- float totalTime = mSkillInfo.fixedSingTime * (1 - mFighter.FixedSingDecreasePercent) + (Mathf.Max(mSkillInfo.variableSingTime - mFighter.DEX * BattleFormulaParamMgr.Instance.GetParam(28), 0)) * (1 - mFighter.VariableSingDecreasePercent);
- if(totalTime < mSkillInfo.fixedSingTime)
- {
- totalTime = mSkillInfo.fixedSingTime;
- }
- mSkill.SingTotalTime = totalTime;
- float skillTotalTime = mSkill.Duration;
- if (!mSkill.IsSingSkill)
- skillTotalTime = mSkill.Duration * Mathf.Max(1 - mFighter.AttrAttackSpeedPercent, 0.3f) * Mathf.Max(1 - mFighter.SkillAttackSpeedPercent, 0.3f);
-
- mSkillTotalFrame = (int)(skillTotalTime * Constants.frame_to_time);
- //if (!skill.IsNormalAttack) {
- // mSkillCd = skill.SkillDataInfo.cd + skillTotalTime;
- //}
- mIsNormalEnd = false;
-
- mPredictHitFighters = null;
- mFixHurtWordPositionEvt = null;
- if (mFighter.Ctrl != null)
- mFighter.Ctrl.OnEnterSkill(mSkill);
- if(mSkill!=null)
- {
- for (int idx = 0; idx < mSkill.BuffList.Count; idx++)
- {
- mFighter.CastBuff(mSkill, mSkill.BuffList[idx]);
- }
- }
- if(mStatistics != null)
- mStatistics.OnEnterSkill(mFighter, skill.SkillTypeID, skill.SkillDataInfo.skillIcon,skill.Id,skill.Level);
- if (!mFighter.Battle.IsPlayRecord && mFighter.Battle.Recorder != null)
- {
- mFighter.Battle.Recorder.RecordFighterSkill(mFighter, mSkill.SkillTypeID, mSkill.Id);
- }
- if(!mSkill.IsNormalAttack)
- {
- EventMgr.DispatchEvent<Fighter>(new CoreEvent<Fighter>(ECoreEventType.EID_FIGHTER_DO_SKILL, mFighter));
- }
- if (BattleMgr.Instance.Battle.CanPrintLog)
- DebugHelper.LogError(string.Format("<color=#00ff00>{0} castskill= {1} skillName={2} mSkillCd={3}, stateFrame={4}</color>", mFighter.Id, mSkill.Id, mSkill.SkillName, mSkillCd, mFighter.CurrentBattleField.CurrentStateFrame));
- }
- public void Update (float deltaTime)
- {
- if (IsDisposed)
- return;
- mNormalAttackCd -= Constants.s_internaltime;
- mSkillCd -= Constants.s_internaltime;
- mBulletMgr.Update (deltaTime);
- if (mIsPlaying)
- {
- mSkillMoveProcessor.Update (deltaTime);
- UpdateFrame (deltaTime);
- }
- }
- public void OnLeave ()
- {
- if (!mIsPlaying)
- return;
- for (int i = 0; i < mTriggeredEffects.Count; i++)
- EffectManager.Instance.RemoveEffectByInstanceID (mTriggeredEffects [i]);
- if (!mSkill.IsNormalAttack)
- {
- BaseSkill nextSkill = mFighter.GetSkill(mFighter.AI.NextSelectAttack);
- if(nextSkill != null)
- {
- mSkillCd = nextSkill.SkillDataInfo.cd;
- }
- else
- {
- mSkillCd = 0;
- }
- }
- mTriggeredEffects.Clear ();
- mPredictHitFighters = null;
- if (mFighter.Ctrl != null)
- mFighter.Ctrl.OnLeaveSkill (mSkill);
- if(mFighter.AI!=null)
- mNextSkillIdex = mFighter.AI.NextSelectAttack;
- mFighter.EndSkill();
- mIsPlaying = false;
- mSkill = null;
- mSkillInfo = null;
- TargetFighter = null;
- mFixHurtWordPositionEvt = null;
- //DebugHelper.LogError(mFighter.Name + " OnLeave");
- }
- public void EndSkill()
- {
- if(mSkillMoveProcessor.IsMoving && mSkillMoveProcessor.IsMovingUp)
- {
- FixVector3 pos = new FixVector3(mFighter.Position);
- pos.y = (Fix64)mFighter.CurrentBattleField.FloorY;
- mSkillMoveProcessor.Start(Fix64.Zero, (Fix64)Constants.gravity, pos);
- }
- if (!mIsNormalEnd)
- {
- mIsNormalEnd = true;
- }
- }
- void UpdateFrame(float deltaTime)
- {
- if (mFighter.CurrentBattleField.Result != FightingResult.None && !mIsNormalEnd)
- {
- mIsNormalEnd = true;
- }
- //if (skillTotalTime > 0)
- //{
- // skillTotalTime -= deltaTime;
- // if (skillTotalTime <= 0)
- // {
- // mIsNormalEnd = true;
- // }
- //}
- //if(mSkill.SkillName == "冰箭术!!")
- //{
- // Debug.Log(mSkillTotalFrame.ToString());
- //}
- if(mSkillTotalFrame > 0)
- {
- mSkillTotalFrame--;
- if(mSkillTotalFrame<=0)
- {
- mIsNormalEnd = true;
- }
- }
- }
- // bool CheckTargetSelectable (Fighter target)
- //{
- // return target.IsSpawned && !target.IsDisposed && target.IsAlive
- // && (mSkill.IsPassiveSkill || target.IsFighting)
- // && (SkillSelectHelper.IsSkillCanTargetSelf (mSkill) || target != mFighter);
- //}
- }
|