/// <summary> /// 단계 값 추가. /// </summary> public void AddProgressValue(float value) { if (value.IsZero()) { return; } if (QuestState == QuestState.Complete && _addProgressOnComplete) { _nowProgressValue += value; return; } _nowProgressValue += value; do { var completeProgress = NowProgressModel.SetProgress(_nowProgressValue); if (completeProgress) { CheckNextProgress(); } else { _subscribeQuestModule.OnNext(this); break; } } while (true); }
/// <summary> /// 다음 단계 세팅. /// </summary> private void SetNextProgress() { var nextValue = _resetValueOnNextProgress ? 0 : _nowProgressValue - NowProgressReqValue; _progressIndex = Mathf.Max(_progressIndex + 1, ProgressLength - 1); NowProgressModel.ReachProgress(nextValue); _nowProgressValue = nextValue; _subscribeQuestModule.OnNext(this); }
public void AcceptQuest() { if (QuestState != QuestState.NoAccept) { return; } QuestState = QuestState.Accept; NowProgressModel.ReachProgress(); }
/// <summary> /// 퀘스트 반복 처리. /// </summary> private void IterationQuest() { QuestState = QuestState.Accept; QuestProgresses.ForEach(q => { q.ResetProgress(); }); var remainValue = _resetValueOnInterateQuest ? 0 : _nowProgressValue - NowProgressReqValue; _progressIndex = 0; _nowProgressValue = 0; NowProgressModel.ReachProgress(); AddProgressValue(remainValue); _onIteratedQuestAction.CallSafe(_nowProgressValue); _subscribeQuestModule.OnNext(this); }
/// <summary> /// 현재 단계 완료. /// 모든 단계 완료 여부 리턴. /// </summary> private bool CompleteProgressProcess() { // 모든 단계가 완료됨. var isCompleteAllProgress = _progressIndex >= QuestProgresses.Count - 1; if (!isCompleteAllProgress) { _subscribeQuestModule.OnNext(this); return(false); } NowProgressModel.CompleteProgress(); QuestState = QuestState.WaitForComplete; _subscribeQuestModule.OnNext(this); return(true); }
/// <summary> /// 현재 단계 체크. /// </summary> private void CheckNextProgress() { if (!_autoCompleteProgress) { NowProgressModel.WaitForCompleteProgress(); return; } if (CompleteProgressProcess()) { return; } SetNextProgress(); }
public bool CompleteQuest() { if (QuestState != QuestState.WaitForComplete) { return(false); } QuestState = QuestState.Complete; NowProgressModel.CompleteProgress(); _onCompleteQuestAction.CallSafe(); if (!_iterateQuest) { _subscribeQuestModule.DisposeSafe(); _onFinishQuestAction.CallSafe(); return(true); } IterationQuest(); return(QuestState == QuestState.WaitForComplete); }
/// <summary> /// 퀘스트가 반복적으로 수행될 경우 초과된 값만큼 반복 완료 한다. /// </summary> /// <returns></returns> public int CompleteIterally() { if (!_iterateQuest) { return(0); } var count = (int)(_nowProgressValue / TotalReqProgressValue); var remainValue = _nowProgressValue % TotalReqProgressValue; QuestState = QuestState.Accept; QuestProgresses.ForEach(q => { q.ResetProgress(); }); _progressIndex = 0; _nowProgressValue = 0; NowProgressModel.ReachProgress(); AddProgressValue(remainValue); _onIteratedQuestAction.CallSafe(_nowProgressValue); _subscribeQuestModule.OnNext(this); return(count); }