Files
DougDiggem/Assets/Scripts/Management/Questing/Quest.cs
T
2026-03-07 14:42:14 -06:00

66 lines
2.0 KiB
C#

using UnityEngine;
public class Quest : MonoBehaviour
{
public bool hasStarted = false;
public bool hasCompleted = false;
public string[] askText; // ask the player to complete the task
public string[] duringText; // what to say to the player when the task is complete
public string[] completionText; // what to say to the player upon completion
public int questID = 0; // connects the quest to the registry, which gives us conditions
public void Start()
{
// check if we've completed the quest
hasCompleted = QuestRegistry.Instance.CompletedQuests.Contains(questID);
hasStarted = QuestRegistry.Instance.ActiveQuests.Contains(questID);
// this shouldn't be possible, but if the save is changed manually it could happen
if (hasStarted && hasCompleted)
{
hasStarted = false;
// make sure only one reference exists
QuestRegistry.Instance.CompletedQuests.RemoveAll(id => id == questID);
QuestRegistry.Instance.CompletedQuests.Add(questID);
QuestRegistry.Instance.ActiveQuests.RemoveAll(id => id == questID);
SaveSystem.Save();
}
}
public void StartQuest()
{
hasStarted = true;
QuestRegistry.Instance.ActiveQuests.Add(questID);
SaveSystem.Save();
}
public bool CheckComplete()
{
QuestBool[] conditionList = QuestRegistry.Instance.QuestBoolMap[questID];
if (conditionList != null)
{
foreach (QuestBool condition in conditionList)
{
// try each condition until we hit a false
if (!condition.getValue())
return false;
}
// otherwise return true and mark quest complete
QuestRegistry.Instance.ActiveQuests.Remove(questID);
QuestRegistry.Instance.CompletedQuests.Add(questID);
SaveSystem.Save();
hasCompleted = true;
return true;
}
return false;
}
}