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;
}
}