-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathQuestManager.cs
More file actions
96 lines (83 loc) · 2.59 KB
/
Copy pathQuestManager.cs
File metadata and controls
96 lines (83 loc) · 2.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
public class QuestManager : MonoBehaviour
{
private QuestGenerator questGenerator;
private List<Quest> activeQuests = new List<Quest>();
private List<Quest> completedQuests = new List<Quest>();
public UnityEvent<Quest> onQuestAdded;
public UnityEvent<Quest> onQuestCompleted;
public UnityEvent<Quest> onQuestFailed;
private void Start()
{
questGenerator = GetComponent<QuestGenerator>();
if (questGenerator == null)
{
questGenerator = gameObject.AddComponent<QuestGenerator>();
}
}
public Quest GenerateNewQuest()
{
// You might want to pass player level here
return questGenerator.GenerateRandomQuest();
}
public void AddNewQuest(Quest quest)
{
if (quest != null)
{
quest.status = QuestStatus.Active;
activeQuests.Add(quest);
onQuestAdded?.Invoke(quest);
}
}
public void CompleteQuest(string questId)
{
Quest quest = activeQuests.Find(q => q.questId == questId);
if (quest != null)
{
quest.status = QuestStatus.Completed;
activeQuests.Remove(quest);
completedQuests.Add(quest);
onQuestCompleted?.Invoke(quest);
// Handle rewards here
DistributeRewards(quest);
}
}
public void FailQuest(string questId)
{
Quest quest = activeQuests.Find(q => q.questId == questId);
if (quest != null)
{
quest.status = QuestStatus.Failed;
activeQuests.Remove(quest);
onQuestFailed?.Invoke(quest);
}
}
public void UpdateQuestProgress(string questId, int objectiveIndex, int progress)
{
Quest quest = activeQuests.Find(q => q.questId == questId);
if (quest != null && objectiveIndex < quest.objectives.Count)
{
quest.objectives[objectiveIndex].UpdateProgress(progress);
if (quest.IsComplete())
{
CompleteQuest(questId);
}
}
}
private void DistributeRewards(Quest quest)
{
// Implement your reward distribution logic here
Debug.Log($"Distributing rewards for quest: {quest.title}");
Debug.Log($"XP: {quest.reward.experience}, Gold: {quest.reward.gold}");
}
public List<Quest> GetActiveQuests()
{
return new List<Quest>(activeQuests);
}
public List<Quest> GetCompletedQuests()
{
return new List<Quest>(completedQuests);
}
}