예제 #1
0
    public void ChangeState(NFAnimaStateType eState, int index, NFStateData data = null)
    {
        if (mCurrentState == eState)
        {
            return;
        }

        if (mCurrentState != NFAnimaStateType.NONE && mStateDictionary.ContainsKey(mCurrentState))
        {
            mStateDictionary[mCurrentState].Exit(this.gameObject);
        }

        if (mStateDictionary.ContainsKey(eState))
        {
            mLastState    = mCurrentState;
            mCurrentState = eState;

            mStateDictionary[mCurrentState].xStateData = data;
            mStateDictionary[mCurrentState].Enter(this.gameObject, index);
        }
        else
        {
            Debug.LogError("ChangeState to " + mCurrentState + " from " + mLastState);
        }
    }
예제 #2
0
 public NFFallState(GameObject gameObject, NFAnimaStateType eState, NFAnimaStateMachine xStateMachine, float fHeartBeatTime, float fExitTime, bool input = false)
     : base(gameObject, eState, xStateMachine, fHeartBeatTime, fExitTime, input)
 {
     xHeroMotor   = gameObject.GetComponent <NFHeroMotor>();
     mLoginModule = NFPluginManager.Instance().FindModule <NFLoginModule>();
     mSceneModule = NFPluginManager.Instance().FindModule <NFSceneModule>();
 }
예제 #3
0
    private void Update()
    {
        if (mxBodyIdent && mxBodyIdent.GetObjectID() != mLoginModule.mRoleID)
        {
            NFHeroSyncBuffer.Keyframe keyframe = mxSyncBuffer.NextKeyframe();
            if (keyframe != null)
            {
                NFAnimaStateType type = (NFrame.NFAnimaStateType)keyframe.status;
                switch (type)
                {
                case NFAnimaStateType.Run:
                case NFAnimaStateType.Idle:
                    if (keyframe.Position != Vector3.zero)
                    {
                        mxHeroMotor.MoveTo(keyframe.Position, MeetGoalCallBack);
                    }
                    break;

                case NFAnimaStateType.Stun:
                    mAnimatStateController.PlayAnimaState(NFAnimaStateType.Stun, 0);
                    break;

                default:
                    break;
                }
            }
        }
    }
예제 #4
0
 /// <summary>
 /// 非预览播放状态下,通过滑杆来播放当前动画帧
 /// </summary>
 private void manualUpdate(NFAnimaStateType stateType, float time)
 {
     if (mAnimator != null && stateType != NFAnimaStateType.NONE)
     {
         mAnimator.PlayInFixedTime(stateType.ToString(), -1, time);
         mAnimator.Update(0f);
     }
 }
예제 #5
0
 public NFNormalSkill5(GameObject gameObject, NFAnimaStateType eState, NFAnimaStateMachine xStateMachine, float fHeartBeatTime, float fExitTime, bool input = false)
     : base(gameObject, eState, xStateMachine, fHeartBeatTime, fExitTime, input)
 {
     xBodyIdent = gameObject.GetComponent <NFBodyIdent>();
     xInput     = gameObject.GetComponent <NFHeroInput>();
     xHeroMotor = gameObject.GetComponent <NFHeroMotor>();
     xHeroSync  = gameObject.GetComponent <NFHeroSync>();
 }
예제 #6
0
        public void OnDamageEvent(GameObject self, GameObject target, NFAnimaStateType eAnimaType, int index)
        {
            //Debug.Log("On Damage " + self.ToString() + " " + target.ToString() + " " + index.ToString());

            for (int i = 0; i < OnDamageAnimaList.Count; ++i)
            {
                OnDamageAnimaList[i](self, target, eAnimaType, index);
            }
        }
예제 #7
0
    public NFIdleState(GameObject gameObject, NFAnimaStateType eState, NFAnimaStateMachine xStateMachine, float fHeartBeatTime, float fExitTime, bool input = false)
        : base(gameObject, eState, xStateMachine, fHeartBeatTime, fExitTime, input)
    {
        NFIPluginManager pluginManager = NFRoot.Instance().GetPluginManager();

        mKernelModule = pluginManager.FindModule <NFIKernelModule>();
        mLoginModule  = NFRoot.Instance().GetPluginManager().FindModule <NFLoginModule>();
        mSceneModule  = NFRoot.Instance().GetPluginManager().FindModule <NFSceneModule>();
    }
예제 #8
0
        public void OnBulletTouchPositionEvent(GameObject self, Vector3 position, NFAnimaStateType eAnimaType, int index)
        {
            Debug.Log("TouchPosition " + index);

            for (int i = 0; i < OnBulletTouchPositionList.Count; ++i)
            {
                OnBulletTouchPositionList[i](self, position, eAnimaType, index);
            }
        }
예제 #9
0
        public void OnBulletTouchTargetEvent(GameObject self, GameObject target, NFAnimaStateType eAnimaType, int index)
        {
            Debug.Log("TouchTarget " + index);

            for (int i = 0; i < OnBulletTouchTargetAnimaList.Count; ++i)
            {
                OnBulletTouchTargetAnimaList[i](self, target, eAnimaType, index);
            }
        }
예제 #10
0
        public void OnEndAnimaEvent(GameObject self, NFAnimaStateType eAnimaType, int index)
        {
            //Debug.Log("End Anima " + eAnimaType.ToString() + " " + index.ToString());

            for (int i = 0; i < OnEndAnimaList.Count; ++i)
            {
                OnEndAnimaList[i](self, eAnimaType, index);
            }
        }
예제 #11
0
    public void InputStateData(NFAnimaStateType eNewState, NFAnimaStateType eLastState, float fSpeed, int nTime, Vector3 vNowPos, Vector3 vTargetPos, Vector3 vMoveDirection)
    {
        if (IsMainRole())
        {
            return;
        }

        //Debug.Log ("In SyncData: " + id.ToString() + eNewState.ToString() + " TargetPos: " + vTargetPos.x + "," + vTargetPos.y+ "," + vTargetPos.z );

        NFStateData data = new NFStateData();

        data.vTargetPos     = vTargetPos;
        data.fSpeed         = fSpeed;
        data.xMoveDirection = vMoveDirection;
    }
예제 #12
0
    public NFIState(GameObject gameObject, NFAnimaStateType eState, NFAnimaStateMachine xStateMachine, float fHeartBeatTime, float fExitTime, bool input)
    {
        mGameObject     = gameObject;
        meState         = eState;
        mfExitTime      = fExitTime;
        mfHeartBeatTime = fHeartBeatTime;
        mStateMachine   = xStateMachine;

        mfEnterTime = Time.time;
        mbInput     = input;

        mAnimatStateController = gameObject.GetComponent <NFAnimatStateController>();
        mRenderObject          = gameObject.GetComponent <NFBodyIdent>().xRenderObject.gameObject;

        mHeroMotor = gameObject.GetComponent <NFHeroMotor>();
        mHeroInput = gameObject.GetComponent <NFHeroInput>();
    }
예제 #13
0
    private void FixedUpdate()
    {
        if (mxBodyIdent && mxBodyIdent.GetObjectID() != mLoginModule.mRoleID)
        {
            NFHeroSyncBuffer.Keyframe keyframe;
            if (mxSyncBuffer.Size() > 1)
            {
                keyframe = mxSyncBuffer.LastKeyframe();
                mxHeroMotor.walkSpeed *= mxSyncBuffer.Size();
                mxHeroMotor.runSpeed  *= mxSyncBuffer.Size();
            }
            else
            {
                keyframe = mxSyncBuffer.NextKeyframe();
                mxHeroMotor.walkSpeed = mKernelModule.QueryPropertyInt(mLoginModule.mRoleID, NFrame.Player.MOVE_SPEED) / 100;
                mxHeroMotor.runSpeed  = mKernelModule.QueryPropertyInt(mLoginModule.mRoleID, NFrame.Player.MOVE_SPEED) / 100;
            }

            if (keyframe != null)
            {
                NFAnimaStateType type = (NFrame.NFAnimaStateType)keyframe.status;
                switch (type)
                {
                case NFAnimaStateType.Run:
                case NFAnimaStateType.Idle:
                    if (keyframe.Position != Vector3.zero)
                    {
                        mxHeroMotor.MoveTo(keyframe.Position, true, MeetGoalCallBack);
                    }
                    break;

                case NFAnimaStateType.Stun:
                    mAnimatStateController.PlayAnimaState(NFAnimaStateType.Stun, 0);
                    break;

                default:
                    break;
                }
            }
        }
    }
예제 #14
0
    private void Update()
    {
        if (mxBodyIdent && mxBodyIdent.GetObjectID() != mLoginModule.mRoleID)
        {
            NFHeroSyncBuffer.Keyframe keyframe = mxSyncBuffer.NextKeyframe();
            if (keyframe != null)
            {
                NFAnimaStateType type = (NFrame.NFAnimaStateType)keyframe.status;
                switch (type)
                {
                case NFAnimaStateType.Run:
                case NFAnimaStateType.Idle:
                    mxHeroMotor.MoveTo(keyframe.Position);
                    break;

                default:
                    break;
                }
            }
        }
    }
예제 #15
0
    public int PlayAnimaState(NFAnimaStateType eAnimaType, Vector3 v)
    {
        if (meLastPlayID == eAnimaType)
        {
            return(-1);
        }

        mxAnimationEvent.OnEndAnimaEvent(this.gameObject, meLastPlayID, mnSkillIndex);

        mnSkillIndex++;

        mxAnimationEvent.OnStartAnimaEvent(this.gameObject, eAnimaType, mnSkillIndex);

        for (int i = 0; i < mxSkillData.AnimationSkillList.Count; ++i)
        {
            AnimationSkillStruct xAnimationSkillStruct = mxSkillData.AnimationSkillList [i];
            if (xAnimationSkillStruct.Type == eAnimaType)
            {
                if (xAnimationSkillStruct.AnimationClip != null)
                {
                    mAnimator.Play(eAnimaType.ToString(), 0);
                }
                else
                {
                    UnityEditor.EditorUtility.DisplayDialog("Warning", "The AnimationClip is null!", "OK", "Cancel");
                }

                foreach (EffectStruct es in xAnimationSkillStruct.EffectStructList)
                {
                    if (es.Effect != null)
                    {
                        es.index = mnSkillIndex;
                        StartCoroutine(WaitPlayEffect(es));
                    }
                }
                foreach (AudioStruct es in xAnimationSkillStruct.AudioStructList)
                {
                    if (es.Audio != null)
                    {
                        es.index = mnSkillIndex;
                        StartCoroutine(WaitPlayAudio(es));
                    }
                }

                foreach (BulletStruct es in xAnimationSkillStruct.BulletStructList)
                {
                    if (es.Bullet != null)
                    {
                        es.index = mnSkillIndex;
                        StartCoroutine(WaitPlayBullet(es, v));
                    }
                }
                foreach (MovementStruct es in xAnimationSkillStruct.MovementStructList)
                {
                    es.index = mnSkillIndex;
                    StartCoroutine(WaitPlayMovement(es));
                }

                if (xAnimationSkillStruct.BulletStructList.Count <= 0)
                {
                    foreach (DamageStruct es in xAnimationSkillStruct.DamageStructList)
                    {
                        es.index = mnSkillIndex;
                        StartCoroutine(WaitPlayDamage(es));
                    }
                }

                foreach (CameraStruct es in xAnimationSkillStruct.CameraStructList)
                {
                    es.index = mnSkillIndex;
                    StartCoroutine(WaitPlayCamera(es));
                }

                meLastPlayID = eAnimaType;

                //get time
                if (eAnimaType != NFAnimaStateType.Idle)
                {
                    StartCoroutine(WaitPlayNextAnim(xAnimationSkillStruct.fTime, xAnimationSkillStruct.NextType));
                }
            }
        }

        return(mnSkillIndex);
    }
예제 #16
0
 public void OnBulletTouchTargetDelegation(GameObject self, GameObject target, NFAnimaStateType eAnimaType, int index)
 {
     //show damage
     Debug.Log("show damage --- " + target.name + " " + eAnimaType.ToString() + " " + index.ToString());
 }
예제 #17
0
 public void OnEndAnimaEvent(GameObject self, NFAnimaStateType eAnimaType, int index)
 {
     Debug.Log("End Anima " + eAnimaType.ToString() + " " + index.ToString());
 }
예제 #18
0
    private void FixedUpdate()
    {
        ReportPos();

        if (mxBodyIdent && mxBodyIdent.GetObjectID() != mLoginModule.mRoleID)
        {
            NFHeroSyncBuffer.Keyframe keyframe;
            if (mxSyncBuffer.Size() > 1)
            {
                keyframe = mxSyncBuffer.LastKeyframe();
            }
            else
            {
                keyframe = mxSyncBuffer.NextKeyframe();
            }

            if (keyframe != null)
            {
                mxHeroMotor.walkSpeed = moveSpeed;
                mxHeroMotor.runSpeed  = moveSpeed;

                float dis = Vector3.Distance(keyframe.Position, mxHeroMotor.transform.position);
                if (dis > 1f)
                {
                    mxHeroMotor.walkSpeed = dis / SYNC_TIME;
                    mxHeroMotor.runSpeed  = dis / SYNC_TIME;
                }

                lastInterpolationTime = keyframe.InterpolationTime;


                NFAnimaStateType stateType = (NFrame.NFAnimaStateType)keyframe.status;
                switch (stateType)
                {
                case NFAnimaStateType.Run:
                    if (keyframe.Position != Vector3.zero)
                    {
                        mxHeroMotor.MoveTo(keyframe.Position, true, MeetGoalCallBack);
                    }
                    break;

                case NFAnimaStateType.Idle:
                    if (UnityEngine.Vector3.Distance(keyframe.Position, mxHeroMotor.transform.position) > 0.1f)
                    {
                        mxHeroMotor.MoveTo(keyframe.Position, true, MeetGoalCallBack);
                    }
                    else
                    {
                        mxHeroMotor.Stop();
                    }
                    break;

                case NFAnimaStateType.Stun:
                    mAnimatStateController.PlayAnimaState(NFAnimaStateType.Stun, 0);
                    break;

                case NFAnimaStateType.NONE:
                    mxHeroMotor.transform.position = keyframe.Position;
                    break;

                default:
                    break;
                }
            }
        }
    }
예제 #19
0
 public void OnBulletTouchPositionDelegation(GameObject self, Vector3 position, NFAnimaStateType eAnimaType, int index)
 {
     //show damage
     Debug.Log("show damage --- " + position.ToString() + " " + eAnimaType.ToString() + " " + index.ToString());
 }
예제 #20
0
 //the use should pass a position when the bullet need a pos
 public int PlayAnimaState(NFAnimaStateType eAnimaType)
 {
     return(PlayAnimaState(eAnimaType, Vector3.zero));
 }
예제 #21
0
 public void AddState(NFAnimaStateType eState, NFIState xState)
 {
     mStateDictionary[eState] = xState;
 }
예제 #22
0
 public NFIState GetState(NFAnimaStateType eState)
 {
     return(mStateDictionary[eState]);
 }
예제 #23
0
 public NFDeadState(GameObject gameObject, NFAnimaStateType eState, NFAnimaStateMachine xStateMachine, float fHeartBeatTime, float fExitTime, bool input = false)
     : base(gameObject, eState, xStateMachine, fHeartBeatTime, fExitTime, input)
 {
     mUIModule = NFRoot.Instance().GetPluginManager().FindModule <NFUIModule>();
 }
예제 #24
0
 public void OutputStateData(NFAnimaStateType eNewState, float fSpeed, Vector3 vNowPos, Vector3 vTargetPos, Vector3 vMoveDirection)
 {
 }
예제 #25
0
 public NFDashForwardState(GameObject gameObject, NFAnimaStateType eState, NFAnimaStateMachine xStateMachine, float fHeartBeatTime, float fExitTime, bool input = false)
     : base(gameObject, eState, xStateMachine, fHeartBeatTime, fExitTime, input)
 {
     xHeroMotor = gameObject.GetComponent <NFHeroMotor>();
 }
예제 #26
0
 public void OnDamageDelegation(GameObject self, GameObject target, NFAnimaStateType eAnimaType, int index)
 {
     //float damage = Random.Range(900000f, 1100000f);
     //NFPrefabManager.Instance.textManager.Add(damage.ToStringScientific(), target.transform);
     Debug.Log("show damage --- " + target.ToString() + " " + eAnimaType.ToString() + " " + index.ToString());
 }
예제 #27
0
 public void OnStartAnimaDelegation(GameObject self, NFAnimaStateType eAnimaType, int index)
 {
     ChangeState(eAnimaType, index);
 }
예제 #28
0
    IEnumerator WaitPlayNextAnim(float time, NFAnimaStateType nextType)
    {
        yield return(new WaitForSeconds(time));

        PlayAnimaState(nextType);
    }
예제 #29
0
 public NFBlockState(GameObject gameObject, NFAnimaStateType eState, NFAnimaStateMachine xStateMachine, float fHeartBeatTime, float fExitTime, bool input = false)
     : base(gameObject, eState, xStateMachine, fHeartBeatTime, fExitTime, input)
 {
 }
예제 #30
0
 public void OnEndAnimaDelegation(GameObject self, NFAnimaStateType eAnimaType, int index)
 {
 }