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); }
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); }
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>()); }