using UnityEngine; using System; /// /// Quest state enumeration /// public enum QuestState { NotStarted, Active, Completed, Failed } /// /// Defines a quest with objectives and state tracking /// [Serializable] public class Quest { [Header("Quest Info")] public string questId; public string questName; [TextArea(3, 10)] public string description; [Header("Quest Details")] public int experienceReward = 100; public int goldReward = 50; [Tooltip("Items awarded upon completion (optional)")] public string[] itemRewards; [Header("Quest Progress")] public QuestState state = QuestState.NotStarted; public int currentProgress = 0; public int requiredProgress = 1; // How many steps/kills/items needed [Header("Quest Flow")] [Tooltip("Quest that must be completed before this one unlocks")] public string prerequisiteQuestId; [Tooltip("NPC who gives this quest")] public string questGiverId; [Tooltip("NPC who completes/turns in this quest (leave empty to use quest giver)")] public string questCompleterId; /// /// Check if quest can be started /// public bool CanStart() { return state == QuestState.NotStarted; } /// /// Check if quest is active /// public bool IsActive() { return state == QuestState.Active; } /// /// Check if quest objectives are met /// public bool IsComplete() { return IsActive() && currentProgress >= requiredProgress; } /// /// Advance quest progress by amount /// public void AddProgress(int amount = 1) { if (IsActive()) { currentProgress += amount; currentProgress = Mathf.Min(currentProgress, requiredProgress); } } /// /// Get progress as percentage /// public float GetProgressPercent() { if (requiredProgress <= 0) return 0f; return Mathf.Clamp01((float)currentProgress / requiredProgress); } /// /// Reset quest progress /// public void Reset() { state = QuestState.NotStarted; currentProgress = 0; } }