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