refactorisation du QuestSystem
This commit is contained in:
parent
2370cb670d
commit
5fa20c954c
11 changed files with 128 additions and 39 deletions
|
|
@ -108,6 +108,12 @@ namespace GameUI.Runtime
|
|||
_panelRecap.SetActive(true);
|
||||
_panelRecap.GetComponent<QuestLogsListUI>().ShowFor(QuestManager.Instance.CurrentQuest.ID);
|
||||
break;
|
||||
case QuestStateEnum.Accepted:
|
||||
_buttonActivation.SetActive(true);
|
||||
_adventurersOnThisQuestPanel.SetActive(false);
|
||||
_adventurersSelection.SetActive(true);
|
||||
_panelRecap.SetActive(false);
|
||||
break;
|
||||
case QuestStateEnum.Active:
|
||||
Info("La quête est active.");
|
||||
_buttonActivation.SetActive(false);
|
||||
|
|
@ -146,15 +152,16 @@ namespace GameUI.Runtime
|
|||
#region Quest Operations
|
||||
private QuestClass FindMatchingActiveQuest(QuestClass quest)
|
||||
{
|
||||
if (!FactExists<List<QuestClass>>("active_quests", out _)) return quest;
|
||||
if (!FactExists<List<QuestClass>>(SaveKeys.Active, out _)) return quest;
|
||||
|
||||
var activeQuests = GetFact<List<QuestClass>>("active_quests");
|
||||
var activeQuests = GetFact<List<QuestClass>>(SaveKeys.Active);
|
||||
var matchingQuest = activeQuests.FirstOrDefault(q => q.ID == quest.ID);
|
||||
return matchingQuest ?? quest;
|
||||
}
|
||||
|
||||
private void UpdateQuestInfoDisplay(QuestClass quest)
|
||||
{
|
||||
Info($"<color=green>UpdateQuestInfoDisplay : {quest.Name}</color>");
|
||||
m_title.text = LocalizationSystem.Instance.GetLocalizedText(quest?.Name);
|
||||
string descKey = quest?.Description;
|
||||
if (string.IsNullOrEmpty(descKey))
|
||||
|
|
@ -171,9 +178,25 @@ namespace GameUI.Runtime
|
|||
var gameTime = GetFact<GameTime>("game_time");
|
||||
QuestManager.Instance.StartQuest(QuestManager.Instance.CurrentQuest, _adventurersSelected, gameTime);
|
||||
|
||||
// Ajouter la quête à la liste des quêtes actives
|
||||
var activeQuests = GetFact<List<QuestClass>>("active_quests");
|
||||
activeQuests.Add(QuestManager.Instance.CurrentQuest);
|
||||
// Mettre à jour la quête dans la liste des quêtes acceptées (Active repo)
|
||||
var activeQuests = GetFact<List<QuestClass>>(SaveKeys.Active);
|
||||
var idx = activeQuests.FindIndex(q => q.ID == QuestManager.Instance.CurrentQuest.ID);
|
||||
if (idx >= 0)
|
||||
{
|
||||
activeQuests[idx].State = QuestStateEnum.Active;
|
||||
activeQuests[idx].StartSeconds = QuestManager.Instance.CurrentQuest.StartSeconds;
|
||||
activeQuests[idx].EndSeconds = QuestManager.Instance.CurrentQuest.EndSeconds;
|
||||
}
|
||||
else
|
||||
{
|
||||
// fallback: if not found, add it once
|
||||
activeQuests.Add(QuestManager.Instance.CurrentQuest);
|
||||
}
|
||||
SaveFacts();
|
||||
// Notify panels
|
||||
QuestSignals.RaiseRefreshQuests();
|
||||
var player = GetFact<Player.Runtime.PlayerClass>(GameManager.Instance.Profile);
|
||||
QuestManager.Instance.NotifyAvailableQuestsUpdated(player.GuildLevel);
|
||||
}
|
||||
|
||||
private void CleanupAfterQuestLaunch()
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@ namespace GameUI.Runtime
|
|||
|
||||
public void SetQuest(QuestClass quest)
|
||||
{
|
||||
Info($"<color=green>SetQuest : {quest.Name}</color>");
|
||||
_quest = quest;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -57,11 +57,21 @@ namespace GameUI.Runtime
|
|||
|
||||
public void AcceptQuest()
|
||||
{
|
||||
List<QuestClass> quests = GetFact<List<QuestClass>>("quests");
|
||||
quests.Add(_quest);
|
||||
SaveFacts();
|
||||
QuestSignals.RaiseRefreshQuests();
|
||||
Destroy(gameObject);
|
||||
// Mark as accepted and add to accepted (active list used as accepted repository for now)
|
||||
_quest.State = QuestStateEnum.Accepted;
|
||||
List<QuestClass> active = GetFact<List<QuestClass>>(SaveKeys.Active);
|
||||
// Idempotency: avoid duplicates
|
||||
bool alreadyThere = active.Any(q => q.ID == _quest.ID || q.Name == _quest.Name);
|
||||
if (!alreadyThere)
|
||||
{
|
||||
active.Add(_quest);
|
||||
SaveFacts();
|
||||
}
|
||||
// Notify panels
|
||||
QuestSignals.RaiseRefreshQuests(); // refresh QuestsPanel
|
||||
var player = GetFact<Player.Runtime.PlayerClass>(GameManager.Instance.Profile);
|
||||
QuestManager.Instance.NotifyAvailableQuestsUpdated(player.GuildLevel); // refresh board availability
|
||||
Destroy(gameObject);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
|||
|
|
@ -65,13 +65,25 @@ 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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -44,14 +44,13 @@ namespace GameUI.Runtime
|
|||
Destroy(child.gameObject);
|
||||
}
|
||||
|
||||
if (FactExists<List<QuestClass>>("quests", out _))
|
||||
if (FactExists<List<QuestClass>>(SaveKeys.Active, out _))
|
||||
{
|
||||
List<QuestClass> questsFromSave = GetFact<List<QuestClass>>("quests");
|
||||
|
||||
List<QuestClass> quests = QuestManager.Instance.ResolveQuestsList(questsFromSave);
|
||||
foreach (var quest in quests)
|
||||
// Show only accepted quests in this panel
|
||||
List<QuestClass> accepted = GetFact<List<QuestClass>>(SaveKeys.Active);
|
||||
foreach (var quest in accepted.Where(q => q.State == QuestStateEnum.Accepted))
|
||||
{
|
||||
DisplayQuest(quest); //=> Key : L'id de la quête, Value : Le State
|
||||
DisplayQuest(quest);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -70,6 +69,8 @@ namespace GameUI.Runtime
|
|||
questMini.m_check?.SetActive(isCompleted);
|
||||
}
|
||||
|
||||
Info($"<color=green>On affiche la quete : {quest.Name}</color>");
|
||||
|
||||
questGO.GetComponent<InteractionQuestCard>().SetQuest(quest);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue