Exemple #1
0
        void Init()
        {
            // 创建子状态
            // 检查版本信息
            xc.Machine.State stateCheckingVersion = new xc.Machine.State((uint)GameState.GS_CHECKING_VERSION, mMachine, this);
            // 加载登陆场景
            xc.Machine.State stateLoadingScene = new xc.Machine.State((uint)GameState.GS_LOADING_LEVEL, mMachine, this);
            // 登陆sdk
            xc.Machine.State stateLoginPlatform = new xc.Machine.State((uint)GameState.GS_LOGIN_PLATFORM, mMachine, this);
            // 完成状态
            xc.Machine.State stateInitDone = new xc.Machine.State((uint)GameState.GS_INIT_DONE, mMachine, this);
            // 更换角色状态
            xc.Machine.State stateChangeRole = new xc.Machine.State((uint)GameState.GS_CHANGE_ROLE, mMachine, this);

            stateCheckingVersion.SetEnterFunction(StateEnter_CheckingVersion);
            stateCheckingVersion.SetUpdateFunction(StateUpdate_CheckingVersion);

            stateLoadingScene.SetEnterFunction(StateEnter_LoadingLevel);
            stateLoadingScene.SetUpdateFunction(StateUpdate_LoadingLevel);

            stateLoginPlatform.SetEnterFunction(StateEnter_LoginPlatform);
            stateLoginPlatform.SetUpdateFunction(StateUpdate_LoginPlatform);

            stateInitDone.SetEnterFunction(StateEnter_InitDone);

            stateChangeRole.SetEnterFunction(StateEnter_ChangeRole);
            stateChangeRole.SetUpdateFunction(StateUpdate_ChangeRole);

            // 状态图 -- begin
            stateCheckingVersion.AddTransition((uint)GameEvent.GE_VERSION_CHECKED, stateLoadingScene);
            stateLoadingScene.AddTransition((uint)GameEvent.GE_LEVEL_LOADED, stateLoginPlatform);
            stateLoginPlatform.AddTransition((uint)GameEvent.GE_LOGINED_PLATFORM, stateInitDone);
            stateChangeRole.AddTransition((uint)GameEvent.GE_CHANGE_ROLE_FINISH, stateInitDone);
            stateInitDone.AddTransition((uint)GameEvent.GE_CHANGE_ROLE, stateChangeRole);

            stateLoadingScene.AddTransition((uint)GameEvent.GE_RESET, stateCheckingVersion);
            stateLoginPlatform.AddTransition((uint)GameEvent.GE_RESET, stateCheckingVersion);
            stateInitDone.AddTransition((uint)GameEvent.GE_RESET, stateCheckingVersion);
            stateChangeRole.AddTransition((uint)GameEvent.GE_RESET, stateCheckingVersion);

            // 状态图 -- end

            // 设置默认子状态
            this.SetChild(stateCheckingVersion);

#if UNITY_IPHONE
            //断线手动点击取消按钮返回选服界面时,不清登录信息
            if (Game.Instance.ManualCancelReconnect == false)
            {
                GlobalConfig.GetInstance().ResetLoginInfo();
            }
#endif
        }
Exemple #2
0
        void Init()
        {
            // 创建子状态
            xc.Machine.State stateLoadLevel = new xc.Machine.State((uint)GameState.GS_LOADING_LEVEL, mMachine, this);
            xc.Machine.State stateInPlay    = new xc.Machine.State((uint)GameState.GS_IN_PLAY, mMachine, this);

            stateLoadLevel.SetEnterFunction(StateEnter_Loadlevel);
            stateLoadLevel.SetUpdateFunction(StateUpdate_Loadlevel);

            stateInPlay.SetEnterFunction(StateEnter_InPlay);
            stateInPlay.SetUpdateFunction(StateUpdate_InPlay);

            // 状态图 -- begin
            stateLoadLevel.AddTransition((uint)GameEvent.GE_LEVEL_LOADED, stateInPlay);
            stateInPlay.AddTransition((uint)GameEvent.GE_RESET, stateLoadLevel);
            // 状态图 -- end

            // 设置默认子状态
            this.SetChild(stateLoadLevel);
        }
Exemple #3
0
        static int _m_SetEnterFunction(RealStatePtr L)
        {
            ObjectTranslator translator = ObjectTranslatorPool.Instance.Find(L);


            xc.Machine.State __cl_gen_to_be_invoked = (xc.Machine.State)translator.FastGetCSObj(L, 1);


            try {
                {
                    xc.Machine.State.StateFunction func = translator.GetDelegate <xc.Machine.State.StateFunction>(L, 2);

                    __cl_gen_to_be_invoked.SetEnterFunction(func);



                    return(0);
                }
            } catch (System.Exception __gen_e) {
                return(LuaAPI.luaL_error(L, "c# exception:" + __gen_e));
            }
        }
Exemple #4
0
        public void Init()
        {
            // 初始化状态机
            mMachine = ObjCachePoolMgr.Instance.TryLoadCSharpObject <xc.Machine>(ObjCachePoolType.MACHINE, mMachinePoolKey);
            if (mMachine == null)
            {
                mMachine = new xc.Machine();
            }
            else
            {
                mMachine.Reset();
            }

            // 构建状态图
            // 第一层状态: normal, beattacking, attacking, death, transfering
            xc.Machine.State normalState      = CreateState((uint)EFSMState.DS_Normal, mMachine);
            xc.Machine.State beattackingState = CreateState((uint)EFSMState.DS_BeAttacking, mMachine);
            xc.Machine.State attackingState   = CreateState((uint)EFSMState.DS_Attacking, mMachine);
            xc.Machine.State deathState       = CreateState((uint)EFSMState.DS_Death, mMachine);
            xc.Machine.State jumpsceneState   = CreateState((uint)EFSMState.DS_JumpScene, mMachine);

            // normal state的子状态
            xc.Machine.State normalNullState  = CreateState((uint)EFSMState.DS_NULL, mMachine, normalState);
            xc.Machine.State idleState        = CreateState((uint)EFSMState.DS_Idle, mMachine, normalState);
            xc.Machine.State walkState        = CreateState((uint)EFSMState.DS_Walking, mMachine, normalState);
            xc.Machine.State interactionState = CreateState((uint)EFSMState.DS_Interaction, mMachine, normalState);

            // attacking state的子状态
            xc.Machine.State nullAttackState   = CreateState((uint)EFSMState.DS_NULL, mMachine, attackingState);
            xc.Machine.State normalAttackState = CreateState((uint)EFSMState.DS_NormalAttack, mMachine, attackingState);

            // beattacking state的子状态
            xc.Machine.State beAtkNullState     = CreateState((uint)EFSMState.DS_NULL, mMachine, beattackingState);
            xc.Machine.State beAtkBackwardState = CreateState((uint)EFSMState.DS_BeAtkBackward, mMachine, beattackingState);

            // 设置初始子状态
            normalState.SetChild(idleState);
            beattackingState.SetChild(beAtkNullState);
            attackingState.SetChild(nullAttackState);

            // 设置Enter/Exit/Update State的函数
            normalState.SetEnterFunction(EnterState_Normal);
            normalState.SetExitFunction(ExitState_Normal);
            attackingState.SetEnterFunction(EnterState_Attacking);
            attackingState.SetUpdateFunction(UpdateState_Attacking);
            attackingState.SetExitFunction(ExitState_Attacking);
            beattackingState.SetEnterFunction(EnterState_BeAttacking);
            beattackingState.SetExitFunction(ExitState_BeAttacking);
            deathState.SetEnterFunction(EnterState_Death);
            deathState.SetUpdateFunction(UpdateState_Death);
            deathState.SetExitFunction(ExitState_Death);

            idleState.SetEnterFunction(EnterState_Idle);
            idleState.SetUpdateFunction(UpdateState_Idle);
            idleState.SetExitFunction(ExitState_Idle);
            walkState.SetEnterFunction(EnterState_Walk);
            walkState.SetUpdateFunction(UpdateState_Walk);
            walkState.SetExitFunction(ExitState_Walk);
            interactionState.SetEnterFunction(EnterState_Interaction);
            interactionState.SetUpdateFunction(UpdateState_Interaction);
            interactionState.SetExitFunction(ExitState_Interaction);
            jumpsceneState.SetEnterFunction(EnterState_JumpScene);
            jumpsceneState.SetUpdateFunction(UpdateState_JumpScene);
            jumpsceneState.SetExitFunction(ExitState_JumpScene);

            beAtkBackwardState.SetEnterFunction(EnterState_BeAtkBackward);
            beAtkBackwardState.SetUpdateFunction(UpdateState_BeAtkBackward);

            normalAttackState.SetEnterFunction(EnterState_NormalAttack);
            normalAttackState.SetUpdateFunction(UpdateState_NormalAttack);
            normalAttackState.SetExitFunction(ExitState_NormalAttack);

            //// 构建状态图
            //// 第一层
            // normal
            normalState.AddTransition((uint)EFSMEvent.DE_BeAtkBackward, beattackingState);
            normalState.AddTransition((uint)EFSMEvent.DE_NormalAttack, attackingState);
            normalState.AddTransition((uint)EFSMEvent.DE_Death, deathState);
            normalState.AddTransition((uint)EFSMEvent.DE_JumpScene, jumpsceneState);
            // jumpscene
            jumpsceneState.AddTransition((uint)EFSMEvent.DE_JumpSceneFinish, normalState);
            jumpsceneState.AddTransition((uint)EFSMEvent.DE_Death, deathState);
            jumpsceneState.AddTransition((uint)EFSMEvent.DE_Stop, normalState);
            // death
            deathState.AddTransition((uint)EFSMEvent.DE_Relive, normalState);
            deathState.AddTransition((uint)EFSMEvent.DE_JumpScene, jumpsceneState); // 防止死亡后的异常
            // beattacking
            beattackingState.AddTransition((uint)EFSMEvent.DE_Stop, normalState);
            beattackingState.AddTransition((uint)EFSMEvent.DE_Death, deathState);
            beattackingState.AddTransition((uint)EFSMEvent.DE_JumpScene, jumpsceneState);
            // 受击的优先级最低,需要增加受击到各状态的转换 @rr add 2016.10.10
#if BEATTACK_LOW_PROPETY
            beattackingState.AddTransition((uint)EFSMEvent.DE_NormalAttack, attackingState);
            beattackingState.AddTransition((uint)EFSMEvent.DE_Walk, normalState);
#endif
            // attacking
            attackingState.AddTransition((uint)EFSMEvent.DE_Stop, normalState);
            attackingState.AddTransition((uint)EFSMEvent.DE_NormalAttack, attackingState);
            attackingState.AddTransition((uint)EFSMEvent.DE_JumpScene, jumpsceneState);
            // 受击的优先级最低,攻击时不能被受击打断 @rr del 2016.10.10
#if !BEATTACK_LOW_PROPETY
            attackingState.AddTransition((uint)EFSMEvent.DE_BeAtkThrowAway, beattackingState);
            attackingState.AddTransition((uint)EFSMEvent.DE_BeAtkBackward, beattackingState);
#endif

            //// 第二层
            // normal state的子状态图
            normalNullState.AddTransition((uint)EFSMEvent.DE_Stop, idleState);
            normalNullState.AddTransition((uint)EFSMEvent.DE_ReachDst, idleState);
            normalNullState.AddTransition((uint)EFSMEvent.DE_Walk, walkState);
            normalNullState.AddTransition((uint)EFSMEvent.DE_Interaction, interactionState);
            normalNullState.AddTransition((uint)EFSMEvent.DE_Relive, idleState);

            idleState.AddTransition((uint)EFSMEvent.DE_Walk, walkState);
            idleState.AddTransition((uint)EFSMEvent.DE_BeAtkBackward, normalNullState);
            idleState.AddTransition((uint)EFSMEvent.DE_NormalAttack, normalNullState);
            idleState.AddTransition((uint)EFSMEvent.DE_Interaction, interactionState);
            idleState.AddTransition((uint)EFSMEvent.DE_Death, normalNullState);
            idleState.AddTransition((uint)EFSMEvent.DE_Stop, idleState);
            idleState.AddTransition((uint)EFSMEvent.DE_JumpScene, normalNullState);

            walkState.AddTransition((uint)EFSMEvent.DE_ReachDst, idleState);
            walkState.AddTransition((uint)EFSMEvent.DE_ResetWalk, walkState); // 增加walk事件的响应,使其重新调用EnterState_Walk
            walkState.AddTransition((uint)EFSMEvent.DE_BeAtkBackward, normalNullState);
            walkState.AddTransition((uint)EFSMEvent.DE_NormalAttack, normalNullState);
            walkState.AddTransition((uint)EFSMEvent.DE_Interaction, interactionState);
            walkState.AddTransition((uint)EFSMEvent.DE_Death, normalNullState);
            walkState.AddTransition((uint)EFSMEvent.DE_Stop, idleState);
            walkState.AddTransition((uint)EFSMEvent.DE_JumpScene, normalNullState);

            interactionState.AddTransition((uint)EFSMEvent.DE_Walk, walkState);
            interactionState.AddTransition((uint)EFSMEvent.DE_BeAtkBackward, normalNullState);
            interactionState.AddTransition((uint)EFSMEvent.DE_NormalAttack, normalNullState);
            interactionState.AddTransition((uint)EFSMEvent.DE_Death, normalNullState);
            interactionState.AddTransition((uint)EFSMEvent.DE_Stop, idleState);
            interactionState.AddTransition((uint)EFSMEvent.DE_JumpScene, normalNullState);

            // beattacking state的子状态图
            beAtkNullState.AddTransition((uint)EFSMEvent.DE_BeAtkBackward, beAtkBackwardState);

            beAtkBackwardState.AddTransition((uint)EFSMEvent.DE_BeAtkBackward, beAtkBackwardState);
            beAtkBackwardState.AddTransition((uint)EFSMEvent.DE_Stop, beAtkNullState);
            beAtkBackwardState.AddTransition((uint)EFSMEvent.DE_JumpScene, beAtkNullState);

            // attacking state的子状态图
            nullAttackState.AddTransition((uint)EFSMEvent.DE_NormalAttack, normalAttackState);

            normalAttackState.AddTransition((uint)EFSMEvent.DE_Stop, nullAttackState);
            normalAttackState.AddTransition((uint)EFSMEvent.DE_NormalAttack, normalAttackState);
            normalAttackState.AddTransition((uint)EFSMEvent.DE_JumpScene, nullAttackState);

            mMachine.SetCurState(normalState);
        }