Files
Babushka/scripts/CSharp/Common/Quest/QuestManager.cs
T
cblech fad86e0331 WIP
2025-06-16 21:14:17 +02:00

50 lines
1.3 KiB
C#

using Godot;
using System;
using System.Collections.Generic;
using System.Linq;
namespace Babushka.scripts.CSharp.Common.Quest;
using QuestPair = KeyValuePair<QuestResource, QuestStatus>;
public partial class QuestManager : Node
{
public static QuestManager? Instance { get; private set; }
[Signal]
public delegate void QuestBecomesActiveEventHandler(QuestResource questResource);
public override void _EnterTree()
{
Instance = this;
}
private Godot.Collections.Dictionary<QuestResource, QuestStatus> _questStatus = new();
public void ChangeQuestStatus(QuestResource questResource, QuestStatus.Status newStatus)
{
if (!_questStatus.TryGetValue(questResource, out var value))
{
value = new QuestStatus();
_questStatus.Add(questResource, value);
}
value.status = newStatus;
if (newStatus == QuestStatus.Status.Active)
{
EmitSignalQuestBecomesActive(questResource);
}
}
public IEnumerable<QuestPair> GetVisibleQuests()
{
return _questStatus.Where(qs => qs.Value.status != QuestStatus.Status.Hidden);
}
public IEnumerable<QuestPair> GetActiveQuests()
{
return _questStatus.Where(qs => qs.Value.status == QuestStatus.Status.Active);
}
}