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
|
|
@ -97,8 +97,17 @@ namespace GameUI.Runtime
|
|||
switch (state)
|
||||
{
|
||||
case QuestStateEnum.Disponible:
|
||||
// Before acceptance: can see info but shouldn't assign adventurers yet
|
||||
_buttonActivation.SetActive(false);
|
||||
_adventurersOnThisQuestPanel.SetActive(false);
|
||||
_adventurersSelection.SetActive(false);
|
||||
_panelRecap.SetActive(false);
|
||||
break;
|
||||
case QuestStateEnum.Accepted:
|
||||
// After acceptance: allow selecting adventurers and launching the quest
|
||||
_buttonActivation.SetActive(true);
|
||||
_adventurersOnThisQuestPanel.SetActive(false);
|
||||
_adventurersSelection.SetActive(true);
|
||||
_panelRecap.SetActive(false);
|
||||
break;
|
||||
case QuestStateEnum.Completed:
|
||||
|
|
@ -108,7 +117,7 @@ namespace GameUI.Runtime
|
|||
_panelRecap.SetActive(true);
|
||||
_panelRecap.GetComponent<QuestLogsListUI>().ShowFor(QuestManager.Instance.CurrentQuest.ID);
|
||||
break;
|
||||
case QuestStateEnum.Active:
|
||||
case QuestStateEnum.InProgress:
|
||||
Info("La quête est active.");
|
||||
_buttonActivation.SetActive(false);
|
||||
_adventurersOnThisQuestPanel.SetActive(true);
|
||||
|
|
|
|||
|
|
@ -57,10 +57,32 @@ namespace GameUI.Runtime
|
|||
|
||||
public void AcceptQuest()
|
||||
{
|
||||
List<QuestClass> quests = GetFact<List<QuestClass>>("quests");
|
||||
quests.Add(_quest);
|
||||
// Ensure state order: Disponible -> Accepted
|
||||
_quest.State = QuestStateEnum.Accepted;
|
||||
|
||||
// Persist in saved quests list
|
||||
List<QuestClass> savedQuests = GetFact<List<QuestClass>>("quests");
|
||||
savedQuests.Add(_quest);
|
||||
|
||||
// Also add to runtime active quests list so other systems can find it
|
||||
if (FactExists<List<QuestClass>>("active_quests", out _))
|
||||
{
|
||||
var activeQuests = GetFact<List<QuestClass>>("active_quests");
|
||||
// Avoid duplicates by GUID
|
||||
if (!activeQuests.Any(q => q.ID == _quest.ID))
|
||||
{
|
||||
activeQuests.Add(_quest);
|
||||
}
|
||||
}
|
||||
|
||||
SaveFacts();
|
||||
|
||||
// Refresh quest UIs and availability board
|
||||
QuestSignals.RaiseRefreshQuests();
|
||||
var player = GetFact<Player.Runtime.PlayerClass>(GameManager.Instance.Profile);
|
||||
QuestManager.Instance.NotifyAvailableQuestsUpdated(player.GuildLevel);
|
||||
|
||||
// Remove the accepted card from the board
|
||||
Destroy(gameObject);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ namespace GameUI.Runtime
|
|||
m_check.SetActive(false);
|
||||
m_hourglass.SetActive(false);
|
||||
break;
|
||||
case QuestStateEnum.Active:
|
||||
case QuestStateEnum.InProgress:
|
||||
m_check.SetActive(false);
|
||||
m_hourglass.SetActive(true);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -65,15 +65,27 @@ namespace GameUI.Runtime
|
|||
|
||||
void DisplayAvailableQuests(List<QuestTemplate> availableTemplates, List<QuestClass> acceptedQuests)
|
||||
{
|
||||
foreach (var quest in availableTemplates)
|
||||
// Build a set of started quest IDs (Accepted/Active + Completed)
|
||||
var startedIds = new HashSet<System.Guid>();
|
||||
foreach (var q in QuestManager.Instance.ActiveQuests ?? new List<QuestClass>())
|
||||
{
|
||||
if (acceptedQuests.Any(q => q.Name == quest.data.Name))
|
||||
if (q.ID != System.Guid.Empty) startedIds.Add(q.ID);
|
||||
}
|
||||
foreach (var q in QuestManager.Instance.CompletedQuests ?? new List<QuestClass>())
|
||||
{
|
||||
if (q.ID != System.Guid.Empty) startedIds.Add(q.ID);
|
||||
}
|
||||
|
||||
foreach (var template in availableTemplates)
|
||||
{
|
||||
// Skip if this template already started (by GUID)
|
||||
if (System.Guid.TryParse(template.m_assetGuid, out var guid) && startedIds.Contains(guid))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
DisplayCard(quest);
|
||||
DisplayCard(template);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void DisplayCard(QuestTemplate quest)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue