Esempio n. 1
0
    void Init_FSM()
    {
        //< 초기 State 생성
        FSM = new FSM.FSM <E_SCENEACTION_TYPE, E_SCENE_TYPE, SceneManager>(this);
        FSM.AddState(E_SCENE_TYPE.START, gameObject.AddComponent <StartState>());
        FSM.AddState(E_SCENE_TYPE.PATCH, gameObject.AddComponent <PatchState>());
        FSM.AddState(E_SCENE_TYPE.MAIN, gameObject.AddComponent <MainState>());

        FSM.AddState(E_SCENE_TYPE.SINGLE, gameObject.AddComponent <SingleState>());
        FSM.AddState(E_SCENE_TYPE.PVP, gameObject.AddComponent <PvpState>());
        FSM.AddState(E_SCENE_TYPE.RAID, gameObject.AddComponent <RaidState>());

        FSM.RegistEvent(E_SCENE_TYPE.START, E_SCENEACTION_TYPE.NEXT, E_SCENE_TYPE.PATCH);
        FSM.RegistEvent(E_SCENE_TYPE.PATCH, E_SCENEACTION_TYPE.NEXT, E_SCENE_TYPE.MAIN);

        FSM.RegistEvent(E_SCENE_TYPE.MAIN, E_SCENEACTION_TYPE.SINGLE, E_SCENE_TYPE.SINGLE);
        FSM.RegistEvent(E_SCENE_TYPE.MAIN, E_SCENEACTION_TYPE.PVP, E_SCENE_TYPE.PVP);
        FSM.RegistEvent(E_SCENE_TYPE.MAIN, E_SCENEACTION_TYPE.RAID, E_SCENE_TYPE.RAID);

        FSM.RegistEvent(E_SCENE_TYPE.SINGLE, E_SCENEACTION_TYPE.PREV, E_SCENE_TYPE.MAIN);
        FSM.RegistEvent(E_SCENE_TYPE.PVP, E_SCENEACTION_TYPE.PREV, E_SCENE_TYPE.MAIN);
        FSM.RegistEvent(E_SCENE_TYPE.RAID, E_SCENEACTION_TYPE.PREV, E_SCENE_TYPE.MAIN);

        //< 초기값 대입
        FSM.Enable(E_SCENE_TYPE.START);
    }
    /// <summary>
    /// Pc를 위한 기본 스테이트 생성 및 전이 설정
    /// </summary>
    static void SetupStateForPc(Unit parent, ref FSM.FSM <UnitEvent, UnitState, Unit> fsm)
    {
        //fsm.AddState(UnitState.Wander, parent.gameObject.AddComponent<WanderState>());
        fsm.AddState(UnitState.Idle, parent.gameObject.AddComponent <IdleState>());
        fsm.AddState(UnitState.Move, parent.gameObject.AddComponent <MoveState>());
        fsm.AddState(UnitState.Attack, parent.gameObject.AddComponent <AttackState>());
        //일단 당분간 보류
        fsm.AddState(UnitState.ManualAttack, parent.gameObject.AddComponent <ManualAttackState>());
        //fsm.AddState(UnitState.Evasion, parent.gameObject.AddComponent<EvasionState>());
        fsm.AddState(UnitState.Skill, parent.gameObject.AddComponent <SkillState>());
        //fsm.AddState(UnitState.MoveToSkill, parent.gameObject.AddComponent<MoveToSkillState>());
        fsm.AddState(UnitState.Push, parent.gameObject.AddComponent <PushState>());
        fsm.AddState(UnitState.Dying, parent.gameObject.AddComponent <DyingState>());
        fsm.AddState(UnitState.Dead, parent.gameObject.AddComponent <DeadState>());
        fsm.AddState(UnitState.Stun, parent.gameObject.AddComponent <StunState>());
        fsm.AddState(UnitState.Floating, parent.gameObject.AddComponent <FloatingState>());
        fsm.AddState(UnitState.StandUp, parent.gameObject.AddComponent <StandUpState>());
        //fsm.AddState( UnitState.Flying, parent.gameObject.AddComponent<FlyingState>() );
        fsm.AddState(UnitState.Event, parent.gameObject.AddComponent <EventState>());

        // for IDLE
        fsm.RegistEvent(UnitState.Idle, UnitEvent.Move, UnitState.Move);

        // for MOVE
        fsm.RegistEvent(UnitState.Move, UnitEvent.Idle, UnitState.Idle);
    }
    /// <summary>
    /// 원하는 타입에 맞게 FSM을 생성 및 설정해준다.
    /// </summary>
    /// <param name="target">설정하고자 하는 대상</param>
    /// <param name="wantUnitType">유닛타입</param>
    public static void SetupFSM(Unit parent, UnitType wantUnitType, out FSM.FSM <UnitEvent, UnitState, Unit> fsm)
    {
        fsm = new FSM.FSM <UnitEvent, UnitState, Unit>(parent);

        switch (wantUnitType)
        {
        case UnitType.TownUnit:
        {
            SetupStateForTownUnit(parent, ref fsm);
        }
        break;

        case UnitType.TownNpc:
        {
            SetupStateForTownNPC(parent, ref fsm);
        }
        break;

        case UnitType.TownNINPC:
        {
            SetupStateForTownNINPC(parent, ref fsm);
        }
        break;

        case UnitType.Unit:
        {
            // Unit전용 상태머신 셋팅해야됨.
            SetupStateForPc(parent, ref fsm);
        }
        break;

        case UnitType.Npc:
        {
            SetupStateForNpc(parent, ref fsm);
        }
        break;

        case UnitType.Boss:
        {
            SetupStateForBoss(parent, ref fsm);
        }
        break;

        case UnitType.Prop:
        {
            SetupStateForProp(parent, ref fsm);
        }
        break;

        case UnitType.Trap:
        {
            SetupStateForTrap(parent, ref fsm);
        }
        break;
        }
    }
    static void SetupStateForTownUnit(Unit parent, ref FSM.FSM <UnitEvent, UnitState, Unit> fsm)
    {
        fsm.AddState(UnitState.Idle, parent.gameObject.AddComponent <TownUnitIdleState>());
        fsm.AddState(UnitState.Move, parent.gameObject.AddComponent <TownUnitMoveState>());

        // for IDLE
        fsm.RegistEvent(UnitState.Idle, UnitEvent.Move, UnitState.Move);

        // for MOVE
        fsm.RegistEvent(UnitState.Move, UnitEvent.Idle, UnitState.Idle);
    }
Esempio n. 5
0
    void Init_FSM()
    {
        //< 초기 State 생성
        FSM = new FSM.FSM <eAction, eState, SceneManager>(this);
        FSM.AddState(eState.START, gameObject.AddComponent <StartState>());
        FSM.AddState(eState.PATCH, gameObject.AddComponent <PatchState>());
        FSM.AddState(eState.NICKNAME, gameObject.AddComponent <NicknameState>());
        FSM.AddState(eState.LOBBY, gameObject.AddComponent <LobbyState>());
        FSM.AddState(eState.GAMELOG, gameObject.AddComponent <GameLogState>());
        FSM.AddState(eState.SETTING, gameObject.AddComponent <SettingState>());
        FSM.AddState(eState.GAME, gameObject.AddComponent <GameState>());

        ////< 이벤트 처리
        FSM.RegistEvent(eState.START, eAction.NEXT, eState.PATCH);
        FSM.RegistEvent(eState.PATCH, eAction.NEXT, eState.LOBBY);
        FSM.RegistEvent(eState.LOBBY, eAction.NEXT, eState.GAME);
        FSM.RegistEvent(eState.GAME, eAction.NEXT, eState.LOBBY);

        FSM.RegistEvent(eState.PATCH, eAction.NICKNAME, eState.NICKNAME);
        FSM.RegistEvent(eState.NICKNAME, eAction.NEXT, eState.LOBBY);

        FSM.RegistEvent(eState.GAME, eAction.PREV, eState.LOBBY);
        FSM.RegistEvent(eState.GAMELOG, eAction.PREV, eState.LOBBY);
        FSM.RegistEvent(eState.SETTING, eAction.PREV, eState.LOBBY);

        FSM.RegistEvent(eState.GAMELOG, eAction.NEXT, eState.SETTING);
        FSM.RegistEvent(eState.SETTING, eAction.NEXT, eState.GAMELOG);

        FSM.RegistEvent(eState.GAMELOG, eAction.REVENGE, eState.GAME);

        FSM.RegistEvent(eState.LOBBY, eAction.GAMELOG, eState.GAMELOG);
        FSM.RegistEvent(eState.LOBBY, eAction.SETTING, eState.SETTING);

        //< 초기값 대입
        FSM.Enable(eState.START);
    }
Esempio n. 6
0
    void Init_FSM()
    {
        FSM = new FSM.FSM <_ACTION, _STATE, SceneManager>(this);

        InitFSM_ForClient();
    }
 static void SetupStateForTrap(Unit parent, ref FSM.FSM <UnitEvent, UnitState, Unit> fsm)
 {
     fsm.AddState(UnitState.Idle, parent.gameObject.AddComponent <Trap_IdleState>());
 }
 static void SetupStateForProp(Unit parent, ref FSM.FSM <UnitEvent, UnitState, Unit> fsm)
 {
     fsm.AddState(UnitState.Idle, parent.gameObject.AddComponent <Prop_IdleState>());
     fsm.AddState(UnitState.Dying, parent.gameObject.AddComponent <Prop_DyingState>());
     fsm.AddState(UnitState.Dead, parent.gameObject.AddComponent <DeadState>());
 }