Update du système de quêtes. Refactorisation et redefinission des états d'une quête.
This commit is contained in:
parent
2370cb670d
commit
3dbddc57ae
7 changed files with 94 additions and 19 deletions
|
|
@ -72,6 +72,7 @@ namespace Quests.Runtime
|
|||
|
||||
public QuestManager()
|
||||
{
|
||||
_activeEvents = new List<QuestEvent>();
|
||||
GameManager.OnTimeAdvanced += CheckMissionsProgress;
|
||||
}
|
||||
|
||||
|
|
@ -84,6 +85,12 @@ namespace Quests.Runtime
|
|||
/// </summary>
|
||||
public void StartQuest(QuestClass quest, List<AdventurerClass> team, GameTime gameTime)
|
||||
{
|
||||
// Enforce state order: must be Accepted before starting
|
||||
if (quest.State != QuestStateEnum.Accepted)
|
||||
{
|
||||
Debug.LogWarning($"Cannot start quest '{quest.Name}' because it is not in Accepted state (current: {quest.State}).");
|
||||
return;
|
||||
}
|
||||
AssignAdventurersToQuest(quest, team);
|
||||
SetQuestTimings(quest, gameTime);
|
||||
UpdateQuestStatus(quest);
|
||||
|
|
@ -94,7 +101,7 @@ namespace Quests.Runtime
|
|||
/// </summary>
|
||||
public void CompleteQuest(QuestClass quest, List<Guid> team)
|
||||
{
|
||||
if (quest.State != QuestStateEnum.Active) return;
|
||||
if (quest.State != QuestStateEnum.InProgress) return;
|
||||
|
||||
ReleaseAdventurers(team);
|
||||
UpdateQuestCompletionStatus(quest);
|
||||
|
|
@ -129,7 +136,8 @@ namespace Quests.Runtime
|
|||
/// </summary>
|
||||
public bool CanSelectedAdventurers()
|
||||
{
|
||||
return _currentQuest != null && _currentQuest.State == QuestStateEnum.Disponible;
|
||||
// Adventurers can be selected only when the quest has been accepted
|
||||
return _currentQuest != null && _currentQuest.State == QuestStateEnum.Accepted;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -138,7 +146,7 @@ namespace Quests.Runtime
|
|||
public bool IsQuestCompleted(string questName)
|
||||
{
|
||||
return ActiveQuests != null
|
||||
&& ActiveQuests.Any(q => q.Name == questName && q.State == QuestStateEnum.Completed);
|
||||
&& ActiveQuests.Any(q => q.Name == questName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -196,7 +204,7 @@ namespace Quests.Runtime
|
|||
/// </summary>
|
||||
void SetQuestTimings(QuestClass quest, GameTime gameTime)
|
||||
{
|
||||
quest.State = QuestStateEnum.Active;
|
||||
quest.State = QuestStateEnum.InProgress;
|
||||
quest.StartSeconds = gameTime.TotalSeconds;
|
||||
quest.EndSeconds = gameTime.TotalSeconds + (quest.Duration * 60);
|
||||
}
|
||||
|
|
@ -206,13 +214,17 @@ namespace Quests.Runtime
|
|||
/// </summary>
|
||||
void UpdateQuestStatus(QuestClass quest)
|
||||
{
|
||||
_activeQuests.Add(quest);
|
||||
// Avoid duplicates in active quests
|
||||
if (_activeQuests.All(q => q.ID != quest.ID))
|
||||
{
|
||||
_activeQuests.Add(quest);
|
||||
}
|
||||
List<QuestClass> saveQuests = GetFact<List<QuestClass>>("quests");
|
||||
foreach (var saveQuest in saveQuests)
|
||||
{
|
||||
if (saveQuest.Name == quest.Name)
|
||||
{
|
||||
saveQuest.State = QuestStateEnum.Active;
|
||||
saveQuest.State = QuestStateEnum.InProgress;
|
||||
saveQuest.StartSeconds = quest.StartSeconds;
|
||||
saveQuest.EndSeconds = quest.EndSeconds;
|
||||
}
|
||||
|
|
@ -268,14 +280,14 @@ namespace Quests.Runtime
|
|||
if(_activeQuests == null) return;
|
||||
|
||||
var questsToComplete = new List<QuestClass>();
|
||||
var activeQuests = _activeQuests.Where(q => q.State == QuestStateEnum.Active).ToList();
|
||||
var activeQuests = _activeQuests.Where(q => q.State == QuestStateEnum.InProgress).ToList();
|
||||
|
||||
foreach (var quest in activeQuests)
|
||||
{
|
||||
_snapTime = currentSeconds - quest.StartSeconds;
|
||||
CheckQuestEvents(quest, currentSeconds);
|
||||
|
||||
if (quest.State == QuestStateEnum.Active && currentSeconds >= quest.EndSeconds)
|
||||
if (quest.State == QuestStateEnum.InProgress && currentSeconds >= quest.EndSeconds)
|
||||
{
|
||||
questsToComplete.Add(quest);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,8 @@ namespace Quests.Runtime
|
|||
public enum QuestStateEnum
|
||||
{
|
||||
Disponible,
|
||||
Active,
|
||||
Accepted,
|
||||
InProgress,
|
||||
Completed,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue