private void HandleQuestStatus() { switch (_currQuestActivity) { case QuestActivity.cannotDo: if (_currentQ) { _currentQ.AbandonQuestButtonClicked(); } FindNewQuest(); break; case QuestActivity.doingActivity: if (!_attachedNavMeshAgent.isStopped) { _attachedNavMeshAgent.isStopped = true; } if (!Target) { _currQuestActivity = QuestActivity.needNewTarget; _attachedNavMeshAgent.isStopped = false; } else { DoActivity(); } break; case QuestActivity.needNewTarget: GetNewQuestTarget(); break; case QuestActivity.onMyWay: TryStartActivity(); break; case QuestActivity.gettingNewQuest: // if in range of the target if ((transform.position - _currQuestSource.transform.position).sqrMagnitude < 5.0f) { // get a quest GameObject qObj = _currQuestSource.GetRandomQuest(); if (qObj) { // and go do it QuestParchment qParch = qObj.GetComponent <QuestParchment>(); if (qParch) { qParch.AcceptQuestNPC(GetComponent <QuestHolderNPC>()); FindNewQuest(); } } } break; } }
private void QuestComplete() { if (_currentQ) { _currentQ.CompleteQuestButtonClicked(); _currentQ.gameObject.transform.SetParent(null); _currentQ = null; } _currQuestActivity = QuestActivity.cannotDo; }
private void DoActivity() { _currActivityInterval += Time.deltaTime; if (_currActivityInterval >= MaxActivityInterval) { _currActivityInterval -= MaxActivityInterval; Harvestable obj = Target.GetComponent <Harvestable>(); if (obj) { obj.HandleNPCInteract(this); } if (!Target) { _currQuestActivity = QuestActivity.needNewTarget; } } }
private void TryStartActivity() { if (Target) { if (Target.GetComponent <Harvestable>().IsNPCInRange(transform)) { _currQuestActivity = QuestActivity.doingActivity; } else { SetTarget(Target.transform); } } else { GetNewQuestTarget(); } }
private void FindNewQuest() { QuestHolderNPC myQuests = GetComponent <QuestHolderNPC>(); if (myQuests) { if (myQuests.QuestsHolder.transform.childCount != 0) // there are quests { for (int i = 0; i < myQuests.QuestsHolder.transform.childCount; ++i) { Transform thisQuest = myQuests.QuestsHolder.transform.GetChild(i); if (thisQuest.GetComponent <NPCQuestWrapper>().QuestObject) { if (thisQuest.GetComponent <NPCQuestWrapper>().QuestObject.GetComponent <Quest>().QuestType != Quest.Type.GatherGold) { StartQuest(myQuests.QuestsHolder.transform.GetChild(i).GetComponent <NPCQuestWrapper>().QuestObject.GetComponent <Quest>()); return; } } } } // there were no (valid) quests if (!_fullyAutonomousQuesting) { SetStatus(Status.ReturningHome); _currQuestActivity = QuestActivity.needNewTarget; _currentQ = null; _attachedNavMeshAgent.isStopped = false; } else { _villToGetQuestsFrom = Village.GetClosestVillageTo(transform.position); _currQuestSource = _villToGetQuestsFrom.QuestBoard.GetComponent <QuestSource>(); SetTarget(_currQuestSource.transform); _currQuestActivity = QuestActivity.gettingNewQuest; } } }
private void GetNewQuestTarget() { GameObject newTarget; Inventory.ResourceType targetType = Inventory.ResourceType.Wood; // get target type for quest if (_currentQ) { switch (_currentQ.QuestType) { case Quest.Type.GatherWood: targetType = Inventory.ResourceType.Wood; break; case Quest.Type.GatherStone: targetType = Inventory.ResourceType.Stone; break; case Quest.Type.GatherFood: targetType = Inventory.ResourceType.Food; break; } } newTarget = InteractableManager.Instance.FindClosestHarvestableOfType(targetType, transform); if (newTarget) { Target = newTarget; SetTarget(newTarget.transform); _currQuestActivity = QuestActivity.onMyWay; } else { _currQuestActivity = QuestActivity.cannotDo; } }