Beispiel #1
0
    protected override void MakeTransitions(FSMState state, E_HunterState e)
    {
        state.ClearTransitions();
        switch (e)
        {
        case E_HunterState.IDLE:
            state.AddTransitions(
                new MyTransition(
                    () =>
            {
                bool hasCommision = true;          //캐릭터 틀에서 수임 여부
                hasCommision      = CharactorFrame.GetInstance().hunterIdea.hasCommission;

                if (hasCommision)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            },
                    GetState(E_HunterState.HUNT_REWARD),
                    GetState(E_HunterState.INQUIRE_QUEST)
                    )
                );
            break;

        case E_HunterState.INQUIRE_QUEST:
            state.AddTransitions(new PlayerChoiceTransition(
                                     GetState(E_HunterState.INQUIRE_QUEST_SELECT_START)
                                     , GetState(E_HunterState.INQUIRE_QUEST_CANCEL)));
            break;

        case E_HunterState.INQUIRE_QUEST_SELECT_START:      //퀘스트 인콰이;어 ui에서 플레이어초이스에 퀘스트 선택 여부를 담음.
            state.AddTransitions(
                new PlayerChoiceTransition(
                    GetState(E_HunterState.INQUIRE_QUEST_ACCEPT), GetState(E_HunterState.INQUIRE_QUEST_CANCEL)));

            /*  무기렌탈 로직을 퀘스트 인콰이어와 합쳤음.
             * ,
             * new MyTransition(
             * ()=>
             * {
             *  bool pc = EventParameterStorage.GetInstance().PlayerChoice;
             *
             *      if (pc == true)//퀘스트 선택창의 제출 버튼을 누른것.
             *  {
             *      //요구능력 치에 따라서 징징과 어셉트를 구분해야함.
             #if DEBUG_TEST
             *      if (fsmTestHunter.GetInstance().isHuntersPowerMoreThanQuest)
             *      {
             *          return true;
             *      }
             #else
             *      if (
             *      QuestManager.GetInstance().GetQuest(
             *      EventParameterStorage.GetInstance().selectedQuestKey)
             *      .GetWeight()
             *      <=
             *      CharactorFrame.GetInstance().hunterIdea.HuntingCapabillity
             *
             *      ) //만약 헌터의 능력치가 퀘스트의 요구 능력치를 상회한다면. )
             *      {
             *          return true;
             *      }
             #endif
             *      else return false;//헌터의 능력치가 퀘스트의 요구 능력치에 못미침.
             *  }
             *  return false;   //의미 없음.
             * }
             * ,GetState(E_HunterState.INQUIRE_QUEST_ACCEPT),
             * GetState(E_HunterState.INQUIRE_QUEST_RENTAL_REQUIRE)
             * )
             *
             */


            break;

        case E_HunterState.INQUIRE_QUEST_ACCEPT:
            state.AddTransitions(new TriggerTransition(GetState(E_HunterState.LEAVE)));
            break;

        /*무기 렌탈 로직을 퀘스트 인콰이어와 합침.
         * case E_HunterState.INQUIRE_QUEST_RENTAL_REQUIRE:
         * state.AddTransitions(new PlayerChoiceTransition(GetState(E_HunterState.INQUIRE_QUEST_RENTAL_START),
         *  GetState(E_HunterState.INQUIRE_QUEST_ACCEPT)//징징 했으나 무시해서 그냥 의뢰만 받아감.
         *  ));
         * break;
         *
         * case E_HunterState.INQUIRE_QUEST_RENTAL_START:
         * state.AddTransitions(new TriggerTransition(GetState(E_HunterState.LEAVE)));
         * //무기를 빌려주든 말든 그 로직처리는 ui 제출 버튼 쪽에서 할테니까.
         * //그냥 리브 해주면 됨.
         * break;
         */

        case E_HunterState.INQUIRE_QUEST_CANCEL:
            state.AddTransitions(new TriggerTransition(GetState(E_HunterState.LEAVE)));
            break;

        case E_HunterState.HUNT_REWARD:
            state.AddTransitions(
                new MyTransition(
                    () =>
            {
                bool rentalSth      = true;       //캐릭터 틀이든 뭐든 대여한 무기가 있는지, 없는지 검사함.
                bool isRentalBroken = true;       //무기의 내구도 도 조건이야...
                HunterIdea hunter   = CharactorFrame.GetInstance().hunterIdea;
                rentalSth           = hunter.DidRentalWeapon();

                if (rentalSth)
                {
                    isRentalBroken = hunter.IsBrokenRental();
                }

                if (rentalSth && isRentalBroken)             //빌린게 있음. 그리고 그것은 부서진 것이 존재한다.
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_HunterState.HUNT_REWARD_RETURN_OF_RENTAL_BROKEN), null
                    )
                ,
                new MyTransition(
                    () =>
            {
                bool rentalSth      = true;       //캐릭터 틀이든 뭐든 대여한 무기가 있는지, 없는지 검사함.
                bool isRentalBroken = true;       //무기의 내구도 도 조건이야...

                HunterIdea hunter = CharactorFrame.GetInstance().hunterIdea;
                rentalSth         = hunter.DidRentalWeapon();

                if (rentalSth)
                {
                    isRentalBroken = hunter.IsBrokenRental();
                }
                if (rentalSth && !isRentalBroken)             //빌린게 있음.
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_HunterState.HUNT_REWARD_RETURN_OF_RENTAL_NOT_BROKEN), null
                    )
                ,
                new MyTransition(
                    () =>
            {
                bool rentalSth = true;           //캐릭터 틀이든 뭐든 대여한 무기가 있는지, 없는지 검사함.
                bool expired   = true;           //만기에 늦었는지.

                HunterIdea hunter = CharactorFrame.GetInstance().hunterIdea;
                rentalSth         = hunter.DidRentalWeapon();


                expired = hunter.haveComeBeforeExpire;

                if (!rentalSth && expired)             //빌린게 있음.
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_HunterState.HUNT_REWARD_EXPIRED), null
                    )
                ,
                new MyTransition(
                    () =>
            {
                bool rentalSth = true;           //캐릭터 틀이든 뭐든 대여한 무기가 있는지, 없는지 검사함.
                bool expired   = true;           //만기에 늦었는지.

                HunterIdea hunter = CharactorFrame.GetInstance().hunterIdea;
                rentalSth         = hunter.DidRentalWeapon();
                expired           = hunter.haveComeBeforeExpire;

                if (!rentalSth && !expired)             //빌리지 않았고, 만기에 늦지도 않았음.
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_HunterState.HUNT_REWARD_START), null
                    )
                );

            break;

        case E_HunterState.HUNT_REWARD_RETURN_OF_RENTAL_NOT_BROKEN:
            state.AddTransitions(
                new MyTransition(
                    () =>
            {
                bool expired      = true;      //만기 전에 왔었는지 어쟀는지.
                HunterIdea hunter = CharactorFrame.GetInstance().hunterIdea;
                expired           = hunter.haveComeBeforeExpire;
                if (expired)            //만지 전에 왔었다가 그냥 갔음.
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_HunterState.HUNT_REWARD_EXPIRED),
                    GetState(E_HunterState.HUNT_REWARD_START)
                    ));
            break;

        case E_HunterState.HUNT_REWARD_RETURN_OF_RENTAL_BROKEN:
            state.AddTransitions(
                new MyTransition(
                    () =>
            {
                bool expired      = true;     //만기 전에 왔었는지 어쟀는지.
                HunterIdea hunter = CharactorFrame.GetInstance().hunterIdea;
                expired           = hunter.haveComeBeforeExpire;
                if (expired)           //만지 전에 왔었다가 그냥 갔음.
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_HunterState.HUNT_REWARD_EXPIRED),
                    GetState(E_HunterState.HUNT_REWARD_START)
                    ));
            break;

        case E_HunterState.HUNT_REWARD_EXPIRED:
            state.AddTransitions(new TriggerTransition(GetState(E_HunterState.HUNT_REWARD_START)));
            break;

        case E_HunterState.HUNT_REWARD_START:
            state.AddTransitions(
                new MyTransition(
                    () =>
            {
                int pmc = EventParameterStorage.GetInstance().PlayerMultipleChoice;
                if (pmc == 0)            //완전지불이면
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_HunterState.HUNT_REWARD_ALL_PAYMENT), null
                    ),
                new MyTransition(
                    () =>
            {
                int pmc = EventParameterStorage.GetInstance().PlayerMultipleChoice;
                if (pmc == 2)            //지불 거부, 거래쫑이면.
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_HunterState.HUNT_REWARD_DENIED), null
                    ),
                new MyTransition(
                    () =>
            {
                int pmc     = EventParameterStorage.GetInstance().PlayerMultipleChoice;
                bool beSulk = true;

                beSulk = CharactorFrame.GetInstance().hunterIdea.IsSulked();
                if (pmc == 1)            //부분지불이면
                {
                    if (false == beSulk) //성격 등등을 통해 갬블하고
                                         //삐쳤으면 거래 거부 해버림.
                                         //안 삐쳤으면 부분 지불 받고 감.
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                else
                {
                    Debug.LogError("EPS에러." + pmc);
                    return(false);
                }
            }
                    , GetState(E_HunterState.HUNT_REWARD_PARTIAL_PAYMENT), GetState(E_HunterState.HUNT_REWARD_DENIED)
                    )
                );
            break;

        case E_HunterState.HUNT_REWARD_ALL_PAYMENT:
            state.AddTransitions(new TriggerTransition(GetState(E_HunterState.LEAVE)));
            break;

        case E_HunterState.HUNT_REWARD_PARTIAL_PAYMENT:
            state.AddTransitions(new TriggerTransition(GetState(E_HunterState.LEAVE)));
            break;

        case E_HunterState.HUNT_REWARD_DENIED:
            state.AddTransitions(new TriggerTransition(GetState(E_HunterState.LEAVE)));
            break;

        case E_HunterState.LEAVE:
            break;
        }
    }
    protected override void MakeTransitions(FSMState state, E_ClientState e)
    {
        state.ClearTransitions();
        switch (e)
        {
        case E_ClientState.IDLE:
            state.AddTransitions(
                new MyTransition(
                    () =>
            {
                bool hasCommision = true;        //캐릭터 틀에서 수임 여부
#if DEBUG_TEST
                hasCommision = fsmTestHunter.GetInstance().hasCommision;
#endif
                hasCommision = CharactorFrame.GetInstance().clientIdea.hasCommission;
                if (hasCommision == false)        //캐릭터 틀에서 수임 했는지 여부를 받아오기.
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            },
                    GetState(E_ClientState.COMMISSION), null
                    )
                ,
                new MyTransition(
                    () =>
            {
                bool hasCommision = true;            //캐릭터 틀에서 수임 여부
#if DEBUG_TEST
                hasCommision = fsmTestHunter.GetInstance().hasCommision;
#endif
                if (hasCommision)            //캐릭터 틀에서 수임 했는지 여부를 받아오기.
                {
                    bool expired;
#if DEBUG_TEST
                    expired = fsmTestHunter.GetInstance().expired;
#endif
                    expired = CharactorFrame.GetInstance().clientIdea.haveComeBeforeExpire;
                    if (expired)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                else
                {
                    return(false);            //의미없음
                }
            },
                    GetState(E_ClientState.CHECK_EXPIRED),
                    GetState(E_ClientState.CHECK_NO_EXPIRE)
                    )
                );
            break;

        case E_ClientState.COMMISSION:
            state.AddTransitions(
                new TriggerTransition(GetState(E_ClientState.COMMISSION_SAY_1))
                );
            break;

        case E_ClientState.COMMISSION_SAY_1:
            state.AddTransitions(
                new PlayerChoiceTransition(GetState(E_ClientState.COMMISSION_MAKE_START), GetState(E_ClientState.COMMISSION_SAY_2))
                );
            break;

        case E_ClientState.COMMISSION_SAY_2:
            state.AddTransitions(
                new PlayerChoiceTransition(GetState(E_ClientState.COMMISSION_MAKE_START), GetState(E_ClientState.COMMISSION_SAY_3))
                );
            break;

        case E_ClientState.COMMISSION_SAY_3:
            state.AddTransitions(
                new PlayerChoiceTransition(GetState(E_ClientState.COMMISSION_MAKE_START), GetState(E_ClientState.COMMISSION_CANCEL))
                );
            break;

        case E_ClientState.COMMISSION_MAKE_START:
            state.AddTransitions(new TriggerTransition(GetState(E_ClientState.COMMISION_MAKE_DONE)));
            break;

        case E_ClientState.COMMISION_MAKE_DONE:
        case E_ClientState.COMMISSION_CANCEL:
            state.AddTransitions(new TriggerTransition(GetState(E_ClientState.LEAVE)));
            break;

        case E_ClientState.CHECK_NO_EXPIRE:
        case E_ClientState.CHECK_EXPIRED:
            state.AddTransitions(new TriggerTransition(GetState(E_ClientState.CHECK_START)));
            break;

        case E_ClientState.CHECK_START:
            state.AddTransitions(
                new MyTransition(
                    () => {
                float completeness;             //qc 끝난 거랑 얘가 갖고 있는 원래 퀘스트랑 비겨ㅛ해서 나온 완성도
                completeness = EventParameterStorage.GetInstance().QuestCompareCompleteness;
                if (completeness <= 0)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_ClientState.CHECK_IMPERFACT_00), null
                    ),
                new MyTransition(
                    () => {
                float completeness;             //qc 끝난 거랑 얘가 갖고 있는 원래 퀘스트랑 비겨ㅛ해서 나온 완성도
                completeness = EventParameterStorage.GetInstance().QuestCompareCompleteness;
                if (completeness > 0 && completeness <= 50)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_ClientState.CHECK_IMPERFACT_50), null
                    ),
                new MyTransition(
                    () => {
                float completeness;             //qc 끝난 거랑 얘가 갖고 있는 원래 퀘스트랑 비겨ㅛ해서 나온 완성도
                completeness = EventParameterStorage.GetInstance().QuestCompareCompleteness;
                if (completeness > 50 && completeness <= 80)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_ClientState.CHECK_IMPERFACT_80), null
                    ),
                new MyTransition(
                    () => {
                float completeness;             //qc 끝난 거랑 얘가 갖고 있는 원래 퀘스트랑 비겨ㅛ해서 나온 완성도
                completeness = EventParameterStorage.GetInstance().QuestCompareCompleteness;
                if (completeness > 80 && completeness <= 95)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_ClientState.CHECK_IMPERFACT_95), null
                    ),
                new MyTransition(
                    () => {
                float completeness;             //qc 끝난 거랑 얘가 갖고 있는 원래 퀘스트랑 비겨ㅛ해서 나온 완성도
                completeness = EventParameterStorage.GetInstance().QuestCompareCompleteness;
                if (completeness > 95)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
                    , GetState(E_ClientState.CHECK_PERFACT), null
                    )
                );
            break;

        case E_ClientState.CHECK_IMPERFACT_00:
        case E_ClientState.CHECK_IMPERFACT_50:
        case E_ClientState.CHECK_IMPERFACT_80:
        case E_ClientState.CHECK_IMPERFACT_95:
        case E_ClientState.CHECK_PERFACT:
            state.AddTransitions(new TriggerTransition(GetState(E_ClientState.LEAVE)));
            break;

        case E_ClientState.LEAVE:
            break;
        }
    }