コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        public void AcceptQuest()
        {
            if (QuestState != QuestState.NoAccept)
            {
                return;
            }

            QuestState = QuestState.Accept;
            NowProgressModel.ReachProgress();
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
        /// <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);
        }
コード例 #6
0
        /// <summary>
        /// 현재 단계 체크.
        /// </summary>
        private void CheckNextProgress()
        {
            if (!_autoCompleteProgress)
            {
                NowProgressModel.WaitForCompleteProgress();
                return;
            }

            if (CompleteProgressProcess())
            {
                return;
            }

            SetNextProgress();
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        /// <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);
        }