//if dialogue controller is active //create IMGUI labels and buttons for dialogue and quest notifications public void OnGUI() { if (!active) { return; } //display quest if requirements are met GUI.Box(new Rect(610, 510, 500, 300), name); QuestBase completedQuest = activeQuests.FirstOrDefault(x => x.status == QuestStatus.RequirementsReached); //if completed quest is not empty //create label of completed quest name, completed //create button to claim rewards, call complete method //return to top level of dialogue if (completedQuest != null) { GUI.Label(new Rect(620, 540, 450, 20), completedQuest.name + " completed!"); if (GUI.Button(new Rect(620, 580, 450, 20), "Claim rewards")) { completedQuest.Complete(); ReturnToRoot(); } return; } //label to display current quest rewards for gold and experience if (currentDialogue.quest != null) { GUI.Label(new Rect(620, 540, 450, 20), currentDialogue.quest.description); string rewardText = $"Reward: {currentDialogue.quest.reward.gold} gold, {currentDialogue.quest.reward.exp} exp"; GUI.Label(new Rect(620, 580, 450, 20), rewardText); //button to handle accepting a quest, instantiate current dialogue for quest //add new quest to active quests //call accept against new quest if (GUI.Button(new Rect(620, 620, 450, 20), "Deal <Accept>")) { QuestBase newQuest = Instantiate(currentDialogue.quest); activeQuests.Add(newQuest); newQuest.Accept(); } //button to handle declining a quest, return to top level of dialogue if (GUI.Button(new Rect(620, 660, 450, 20), "I got better things to do <Decline>")) { ReturnToRoot(); } return; } //create label to display current dialogue in index array GUI.Label(new Rect(620, 540, 450, 20), currentDialogue.sentences[currentSentenceIndex]); //if end of dialogue in index array if (endOfDialogueReached) { int i = 1; //loop through the variants of dialogue flow if (currentDialogue.dialogueVariants.Length > 0) { foreach (Dialogue dialogue in currentDialogue.dialogueVariants) { //continue if dialogue is quest related if (dialogue.quest != null && (dialogue.quest.status == QuestStatus.Completed || dialogue.quest.status == QuestStatus.RequirementsReached || dialogue.quest.status == QuestStatus.Accepted)) { continue; } //cycle through dialogue with player response if (GUI.Button(new Rect(620, 540 + 40 * i, 450, 20), dialogue.playerSpeech)) { SelectNextDialogue(dialogue); } i++; } } //else display dialogue flow control buttons else { //return button to go back to top level of dialogue if (GUI.Button(new Rect(620, 580, 450, 20), "Return")) { ReturnToRoot(); } } //bye button to end current dialogue session if (rootDialogue == currentDialogue) { if (GUI.Button(new Rect(620, 540 + 40 * i, 450, 20), "Bye")) { active = false; } } } else { //continue button to call next sentance and advance through dialogue session if (GUI.Button(new Rect(620, 580, 450, 20), "Continue")) { NextSentence(); } } }