public void UpdateObjetiveProgress( QuestSO quest, QuestObjectiveSO objetive, object parameters ) { QuestList.UpdateObjetiveProgress(quest, objetive, parameters); }
public void Add(QuestSO quest) { QuestStatuses.AddIfNot( qs => qs.Quest == quest, new QuestStatus(quest) ); OnUpdate?.Invoke(); }
public QuestStatus(QuestSO questSO) { Quest = questSO; objectives = new List <ObjectiveStatus>(); foreach (var objectiveSO in questSO.Objectives) { objectives.Add(objectiveSO.Initiate()); } }
public Optional <QuestStatus> GetStatusBy(QuestSO quest) { var questStatus = QuestStatuses.Find(qs => qs.Quest == quest); if (questStatus == null) { return(Optional <QuestStatus> .None()); } return(Optional <QuestStatus> .Some(questStatus)); }
public bool TryFinish(QuestSO quest) { if (!GetStatusBy(quest).IsPresentAndGet(out QuestStatus status)) { return(false); } if (!status.IsComplete) { return(false); } questStatuses.Remove(status); OnUpdate?.Invoke(); OnQuestFinished?.Invoke(status); return(true); }
public void UpdateObjetiveProgress( QuestSO quest, QuestObjectiveSO objetive, object parameters ) { GetStatusBy(quest) .Some(status => { status.UpdateObjetivProgress(objetive, parameters); if (status.Quest.AutoFinish && status.IsComplete) { questStatuses.Remove(status); OnQuestFinished?.Invoke(status); } OnUpdate?.Invoke(); }); }
public bool TryFinishQuest(QuestSO quest) { return(QuestList.TryFinish(quest)); }
public void AddQuest(QuestSO quest) { QuestList.Add(quest); }