| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514 |
- using UnityEngine;
- using System;
- public class FighterStateData
- {
- Fighter mFighter;
- SLong mLife;
- SInt mMana;
- SInt mRage;
- Fix64 mStarkTime;
- float mVertigoTime;
- float mDyingTime;
- float mStiffTime;
- float mAnimTime;
- bool mIsGround = true;
- float mLastBeHitTime;
- bool mIsUnead;
- bool mIsAlive;
- int mStateFrame;
- float mAnimSpeed = 1.0f;
- FighterState mState;
- FighterSkillStateData mSkillStateData;
- FighterBuffManager mBuffMgr;
- FighterBuffFunctionMgr mFuncMgr;
- MarkMgr mMarkMgr;
- bool mIgnoreStateDataChange;
- public FighterStateData (Fighter fighter)
- {
- mFighter = fighter;
- mSkillStateData = new FighterSkillStateData (fighter);
- mBuffMgr = new FighterBuffManager (fighter);
- mFuncMgr = new FighterBuffFunctionMgr(fighter);
- mMarkMgr = new MarkMgr(fighter);
-
- }
- public bool IsDisposed { get; private set; }
- public FighterState State { get { return mState; } }
- public FighterStateType StateId { get { return mState != null ? mState.State : FighterStateType.None; } }
- public FighterSkillStateData SkillStateData { get { return mSkillStateData; } }
- public FighterBuffManager BuffMgr { get { return mBuffMgr; } }
- public FighterBuffFunctionMgr FuncMgr { get { return mFuncMgr; } }
- public MarkMgr MMarkMgr { get { return mMarkMgr; } }
-
- public BaseSkill CurrentSkill { get { return mSkillStateData.Skill; } }
- public bool IsStateDirty { get; private set; }
- public bool IsFixLife { get; set; }
- public bool IsFixMana { get; set; }
- public float AnimSpeed { get { return mAnimSpeed; } }
- public SLong Life {
- get { return mLife; }
- set {
- if (IsFixLife)
- return;
- SLong v = System.Math.Max (value, 0);
- if (mLife != v) {
- mLife = v;
- if (mFighter != null && mFighter.Ctrl != null)
- mFighter.RefreshLife();
- IsAlive = mLife > 0 || mIsUnead;
- //主人死亡时,宠物一并死亡
- if (!IsAlive && mFighter !=null&& mFighter.UsedPetId > 0)
- {
- Fighter pet = mFighter.FighterMgr.GetFighterByID(mFighter.UsedPetId, mFighter.TeamSide);
- if (pet != null)
- pet.Life = 0;
- }
- }
- }
- }
- public SInt Mana
- {
- get { return mMana; }
- set
- {
- if (IsFixMana)
- return;
- SInt v = Mathf.Max(value, 0);
- if (mMana != v)
- {
- mMana = v;
- if (mFighter.Ctrl != null)
- mFighter.Ctrl.OnManaChanged();
- }
- }
- }
- public SInt Rage
- {
- get { return mRage; }
- set
- {
- if (IsFixRage)
- return;
- SInt v = Mathf.Max(value, 0);
- if (mRage != v)
- {
- mRage = v;
- if (mFighter.Ctrl != null)
- mFighter.Ctrl.OnRageChanged();
- }
- }
- }
- public bool IsUnead {
- get { return mIsUnead; }
- set {
- if (mIsUnead != value) {
- mIsUnead = value;
- IsAlive = mLife > 0 || mIsUnead;
- }
- }
- }
- public bool IsAlive {
- get { return mIsAlive; }
- private set {
- if (mIsAlive != value) {
- mIsAlive = value;
- if (mState != null && !mIgnoreStateDataChange)
- mState.OnDataChanged ();
- else
- IsStateDirty = true;
- if (!mIsAlive)
- OnDie ();
- }
- }
- }
- public bool IsFixRage { get; set; }
- public bool IsGround {
- get { return mIsGround; }
- set {
- if (mIsGround != value) {
- mIsGround = value;
- if (mState != null && !mIgnoreStateDataChange)
- mState.OnDataChanged ();
- else
- IsStateDirty = true;
- }
- }
- }
- //免疫状态
- public bool IsImmunity { get; set; }
- //无敌状态
- public bool IsInvincible { get; set; }
- private bool mIsVertigo = false;
- //眩晕状态
- public bool IsVertigo
- {
- get { return mIsVertigo; }
- set
- {
- if(mIsVertigo != value)
- {
- mIsVertigo = value;
- if (mState != null && !mIgnoreStateDataChange)
- mState.OnDataChanged();
- else
- IsStateDirty = true;
- if(mIsVertigo)
- {
- EventMgr.DispatchEvent<Fighter>(new CoreEvent<Fighter>(ECoreEventType.EID_Fighter_Vertigo, mFighter));
- }
- }
- }
- }
- //沉默状态
- public bool IsSilence { get; set; }
- //遗忘状态
- public bool IsForget { get; set; }
- //混乱状态
- public bool IsConfused { get; set; }
- //狂暴状态
- public bool IsRageStatus { get; set; }
- //恐惧状态
- public bool IsFear { get; set; }
-
- //冰冻状态
- public bool IsFrozen { get; set; }
- //睡眠状态
- private bool mIsSleep = false;
- public bool IsSleep {
- get { return mIsSleep; }
- set
- {
- if (mIsSleep != value)
- {
- mIsSleep = value;
- if (mState != null && !mIgnoreStateDataChange)
- mState.OnDataChanged();
- else
- IsStateDirty = true;
- if (mIsSleep)
- {
- EventMgr.DispatchEvent<Fighter>(new CoreEvent<Fighter>(ECoreEventType.EID_Fighter_Sleep, mFighter));
- }
- }
- }
- }
- //石化状态
- public bool IsStiff { get; set; }
-
- //诅咒状态
- public bool IsCurse { get; set; }
- //中毒状态
- public bool IsPoison { get; set; }
- //禁止普攻
- public bool IsForbidNormalSkill { get; set; }
- //嘲讽状态
- public bool IsSneer { get; set; }
- //僵持状态
- public bool IsStark { get { return mStarkTime > 0; } }
- private bool mIsSing = false;
- //private float mSingTime = 0; // 吟唱时长
- private int mSingTotalFrame = 0; //吟唱总帧数
- private int mSingCurFrame = 0;
- //public float SingTime
- //{
- // get { return mSingTime; }
- //}
- public int SingTotalFrame
- {
- get { return mSingTotalFrame; }
- }
- public bool IsSing { get { return mIsSing; } }
- public float DyingTime {
- get { return mDyingTime; }
- set {
- if (Math.Abs (mDyingTime - value) > Mathf.Epsilon) {
- mDyingTime = value;
- if (mState != null && !mIgnoreStateDataChange)
- mState.OnDataChanged ();
- else
- IsStateDirty = true;
- }
- }
- }
- public float TimeFromLastBeHit { get { return Time.time - mLastBeHitTime; } }
- public FighterStateType GetIdleNext ()
- {
- if (IsStark)
- return FighterStateType.Stark;
- else if (!IsAlive)
- return IsGround ? FighterStateType.Die : FighterStateType.BeHitDown;
- else if (IsVertigo)
- return IsGround ? FighterStateType.Vertigo : FighterStateType.BeHitDown;
- else if (!IsGround)
- return FighterStateType.Down;
- else
- return FighterStateType.Idle;
- }
- public void ValidateDirtyState ()
- {
- if (State != null && IsStateDirty) {
- State.OnDataChanged ();
- IsStateDirty = false;
- }
- }
- public void Update (float deltaTime, bool fighting)
- {
- if (IsDisposed)
- return;
- mStateFrame++;
- if(fighting)
- UpdateSing(deltaTime);
- UpdateStateAnim(deltaTime);
- ValidateDirtyState();
- if (mStarkTime > Fix64.Zero)
- {
- mStarkTime -= (Fix64)0.03f;
- State.OnDataChanged();
- }
- if (mStateFrame > 0 && mState != null)
- mState.Update(deltaTime);
- if (mSkillStateData != null && fighting)
- mSkillStateData.Update(deltaTime);
- if (mBuffMgr != null && fighting)
- mBuffMgr.Update(deltaTime);
- if (mFuncMgr != null && fighting)
- mFuncMgr.Update(deltaTime);
- if (mMarkMgr != null && fighting)
- mMarkMgr.Update(deltaTime);
- }
- public void EndSkill()
- {
- if (mIsSing)
- {
- EndSing();
- }
- if (mSkillStateData != null)
- mSkillStateData.EndSkill();
- }
- public void UpdateStateAnim (float deltaTime)
- {
- if (mState != null)
- mState.CheckAnimState ();
- mAnimTime += deltaTime;
- }
- public void PlayAnim(string animName)
- {
- if (mState != null)
- {
- mState.ForcePlayAnim(animName);
- }
- }
- public void SetAnimSpeed(float animSpeed)
- {
- //if(mAnimSpeed != animSpeed)
- {
- mAnimSpeed = animSpeed;
- if (mState != null)
- {
- mState.SetAnimatorSpeed(mAnimSpeed);
- }
- }
- }
- public void ChangeState (FighterStateType state, object param = null)
- {
- if (StateId == state && (mState == null || !mState.Reentrant))
- return;
- FighterStateType oldStateType = StateId;
- mIgnoreStateDataChange = true;
- if (mState != null)
- mState.OnLeave ();
- //if (mFighter.IsHero)
- // DebugHelper.LogError("----fighter:" + mFighter.Name + " state:" + state);
- mState = FighterState.Create (mFighter, state);
- if (mState != null) {
- mState.OnEnter (oldStateType, param);
- mState.PlayAnimState ();
- mStateFrame = 0;
- mAnimTime = 0;
- mState.Update (0);
- }
- mIgnoreStateDataChange = false;
- }
- public bool ProcessTrigger (FighterStateTriggerType triggerType, object param = null, int checkVal = 0)
- {
- if (mState == null)
- return false;
- FighterStateType nextState = mState.GetTriggerNextState (triggerType, checkVal);
- if (nextState == FighterStateType.None)
- return false;
- if (triggerType == FighterStateTriggerType.BeHit)
- mLastBeHitTime = Time.time;
- ChangeState (nextState, param);
- return true;
- }
- //开始吟唱
- public void BeginSing(string animName)
- {
- if (CurrentSkill == null)
- {
- return;
- }
- //mSingTime = CurrentSkill.SingTotalTime;
- mSingTotalFrame = (int)(CurrentSkill.SingTotalTime * Constants.frame_to_time);
- mSingCurFrame = mSingTotalFrame;
- mIsSing = true;
- PlayAnim(animName);
- }
- public void EndSing()
- {
- mFighter.EndSing();
- mIsSing = false;
- //mSingTime = 0;
- mSingTotalFrame = 0;
- mSingCurFrame = 0;
- }
- void UpdateSing(float deltaTime)
- {
- //if (mIsSing)
- //{
- // mSingTime -= deltaTime;
- // mFighter.RefreshSingProgress(CurrentSkill.SingTotalTime,mSingTime);
- // if (mSingTime <= 0)
- // {
- // EndSing();
- // }
- //}
- if (mIsSing)
- {
- mSingCurFrame--;
- mFighter.RefreshSingProgress(mSingTotalFrame, mSingCurFrame);
- if (mSingCurFrame <= 0)
- {
- EndSing();
- }
- }
- }
- public void Dispose ()
- {
- if (IsDisposed)
- return;
- IsDisposed = true;
- mBuffMgr.Dispose ();
- mBuffMgr = null;
- mFuncMgr.Dispose();
- mFuncMgr = null;
- mMarkMgr.Dispose();
- mMarkMgr = null;
- mSkillStateData.Dispose ();
- mSkillStateData = null;
- mFighter = null;
- }
- public void Clear()
- {
- if(mBuffMgr!=null)
- mBuffMgr.Clear();
- if(mFuncMgr!=null)
- mFuncMgr.Clear();
- if (mMarkMgr != null)
- mMarkMgr.Clear();
- if (mSkillStateData != null)
- mSkillStateData.Clear();
- mFighter.ClearSkillBuffPoints();
- mFighter.ClearTriggerBuff();
- mStarkTime = Fix64.Zero;
- }
- void OnDie ()
- {
- if (mIsSing)
- {
- EndSing();
- }
- mBuffMgr.Clear();
- mFuncMgr.Clear();
- mMarkMgr.Clear();
- mFighter.OnDie ();
- }
- public void SetStarkTime(Fix64 starkTime)
- {
- mStarkTime = starkTime;
- if(mStarkTime <= Fix64.Zero)
- State.OnDataChanged();
- }
- }
|