Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions QuestJournal/Configuration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ public class Configuration : IPluginConfiguration
public string StarterClass { get; set; } = "Gladiator";

public bool CensorStarterLocations { get; set; } = false;
public bool MarkCompletedRepeatableQuests { get; set; } = false;

public bool DeveloperMode { get; set; } = false;
public int Version { get; set; } = 0;
Expand Down
2 changes: 1 addition & 1 deletion QuestJournal/UI/MainWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public MainWindow(IPluginLog log, Configuration configuration, QuestJournal ques

msqRenderer = new MsqRenderer(msqHandler, rendererUtils, configuration, log);
jobRenderer = new JobRenderer(jobHandler, rendererUtils, log);
featureRenderer = new FeatureRenderer(featureHandler, rendererUtils, log);
featureRenderer = new FeatureRenderer(featureHandler, rendererUtils, configuration, log);
settingsRenderer = new SettingsRenderer(configuration, this);
}

Expand Down
2 changes: 1 addition & 1 deletion QuestJournal/UI/QuestDetailWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public QuestDetailWindow(QuestModel questModel, List<QuestModel> questList, Rend

public override void Draw()
{
rendererUtils.DrawSelectedQuestDetails(questModel, ref questList, configuration.CensorStarterLocations);
rendererUtils.DrawSelectedQuestDetails(questModel, ref questList, configuration.CensorStarterLocations, configuration.MarkCompletedRepeatableQuests);
}

public void Dispose()
Expand Down
6 changes: 3 additions & 3 deletions QuestJournal/UI/Renderer/FeatureRenderer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

namespace QuestJournal.UI.Renderer;

public class FeatureRenderer(FeatureHandler featureHandler, RendererUtils rendererUtils, IPluginLog log)
public class FeatureRenderer(FeatureHandler featureHandler, RendererUtils rendererUtils, Configuration configuration, IPluginLog log)
{
private List<string> dropDownCategories = new();
private Dictionary<string, string> dropDownCategoryMap = new();
Expand Down Expand Up @@ -43,8 +43,8 @@ public void DrawFeatures()

rendererUtils.DrawSearchBar(ref searchQuery, highlightedQuestCount);
ImGui.Text($"Loaded {questCount} quests for journal genre category: {selectedDropDownCategory}.");
rendererUtils.DrawSelectedQuestDetails(selectedQuest, ref questList, false);
rendererUtils.DrawQuestWidgets(questList, ref searchQuery, ref selectedQuest, false);
rendererUtils.DrawSelectedQuestDetails(selectedQuest, ref questList, false, configuration.MarkCompletedRepeatableQuests);
rendererUtils.DrawQuestWidgets(questList, ref searchQuery, ref selectedQuest, false, configuration.MarkCompletedRepeatableQuests);
}

public void ReloadQuests()
Expand Down
4 changes: 2 additions & 2 deletions QuestJournal/UI/Renderer/JobRenderer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ public void DrawJobs()

rendererUtils.DrawSearchBar(ref searchQuery, highlightedQuestCount);
ImGui.Text($"Loaded {questCount} quests for journal genre category: {selectedDropDownCategory}.");
rendererUtils.DrawSelectedQuestDetails(selectedQuest, ref questList, false);
rendererUtils.DrawQuestWidgets(questList, ref searchQuery, ref selectedQuest, false);
rendererUtils.DrawSelectedQuestDetails(selectedQuest, ref questList, false, false);
rendererUtils.DrawQuestWidgets(questList, ref searchQuery, ref selectedQuest, false, false);
}

public void ReloadQuests()
Expand Down
4 changes: 2 additions & 2 deletions QuestJournal/UI/Renderer/MsqRenderer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,8 @@ public void DrawMSQ()
quest.QuestTitle.Contains(searchQuery, StringComparison.OrdinalIgnoreCase));

rendererUtils.DrawSearchBar(ref searchQuery, highlightedQuestCount);
rendererUtils.DrawSelectedQuestDetails(selectedQuest, ref questList, configuration.CensorStarterLocations);
rendererUtils.DrawQuestWidgets(questList, ref searchQuery, ref selectedQuest, configuration.CensorStarterLocations);
rendererUtils.DrawSelectedQuestDetails(selectedQuest, ref questList, configuration.CensorStarterLocations, false);
rendererUtils.DrawQuestWidgets(questList, ref searchQuery, ref selectedQuest, configuration.CensorStarterLocations, false);
}

public void ReloadQuests()
Expand Down
17 changes: 17 additions & 0 deletions QuestJournal/UI/Renderer/SettingsRenderer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,23 @@ public void DrawSettings()
ImGui.Spacing();
ImGui.Spacing();

ImGui.Separator();
ImGui.Text("Mark completed repeatable quests");
var markCompletedRepeatableQuests = configuration.MarkCompletedRepeatableQuests;
if (ImGui.Checkbox(
"This will always mark completed repeatable quests as done.",
ref markCompletedRepeatableQuests))
{
configuration.MarkCompletedRepeatableQuests = markCompletedRepeatableQuests;
configuration.Save();
}

ImGui.Spacing();
ImGui.Spacing();
ImGui.Spacing();
ImGui.Spacing();
ImGui.Spacing();

ImGui.Text("Developer Settings");
ImGui.Separator();
var devMode = configuration.DeveloperMode;
Expand Down
4 changes: 2 additions & 2 deletions QuestJournal/Utils/OtherUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,15 +58,15 @@ public static void OpenMapAtLocation(QuestModel quest, IPluginLog log)
}
}

public static QuestStatusModel GetQuestStatus(QuestModel quest)
public static QuestStatusModel GetQuestStatus(QuestModel quest, bool markCompletedRepeatableQuests)
{
bool isComplete;
bool isAccepted;
unsafe
{
isAccepted = QuestManager.Instance()->IsQuestAccepted(quest.QuestId);

isComplete = quest.IsRepeatable
isComplete = (quest.IsRepeatable && !markCompletedRepeatableQuests)
? QuestManager.Instance()->IsDailyQuestCompleted((ushort)quest.QuestId)
: QuestManager.IsQuestComplete(quest.QuestId);
}
Expand Down
14 changes: 7 additions & 7 deletions QuestJournal/Utils/RendererUtils.cs
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ private Vector4 DetermineQuestColor(bool isComplete, bool isMatch, bool isSelect
return new Vector4(1f, 1f, 1f, 1f); // Default white
}

public void DrawQuestWidgets(List<QuestModel> quests, ref string searchQuery, ref QuestModel? selectedQuest, bool censorStarterLocations)
public void DrawQuestWidgets(List<QuestModel> quests, ref string searchQuery, ref QuestModel? selectedQuest, bool censorStarterLocations, bool markCompletedRepeatableQuests)
{
var childHeight = ImGui.GetContentRegionAvail().Y;
ImGui.BeginChild("QuestWidgetRegion", new Vector2(0, childHeight), false);
Expand All @@ -125,7 +125,7 @@ public void DrawQuestWidgets(List<QuestModel> quests, ref string searchQuery, re
{
isAccepted = QuestManager.Instance()->IsQuestAccepted(quests[i].QuestId);

isComplete = quests[i].IsRepeatable
isComplete = (quests[i].IsRepeatable && !markCompletedRepeatableQuests)
? QuestManager.Instance()->IsDailyQuestCompleted((ushort)quests[i].QuestId)
: QuestManager.IsQuestComplete(quests[i].QuestId);
}
Expand Down Expand Up @@ -205,7 +205,7 @@ public void DrawQuestWidgets(List<QuestModel> quests, ref string searchQuery, re
ImGui.EndChild();
}

public void DrawSelectedQuestDetails(QuestModel? quest, ref List<QuestModel> questList, bool censorStarterLocations)
public void DrawSelectedQuestDetails(QuestModel? quest, ref List<QuestModel> questList, bool censorStarterLocations, bool markCompletedRepeatableQuests)
{
if (quest == null)
{
Expand Down Expand Up @@ -315,7 +315,7 @@ public void DrawSelectedQuestDetails(QuestModel? quest, ref List<QuestModel> que
!q.PreviousQuestIds.Any(id => currentQuestList.Any(ql => ql.QuestId == id)));
if (firstQuest != null)
{
var firstQuestStatusInfo = OtherUtils.GetQuestStatus(firstQuest);
var firstQuestStatusInfo = OtherUtils.GetQuestStatus(firstQuest, markCompletedRepeatableQuests);
if (ImGui.Selectable($"{firstQuestStatusInfo.StatusSymbol} {firstQuest.QuestTitle ?? "None"}##{firstQuest.QuestId}"))
{
questJournal.OpenQuestWindow(firstQuest, questList);
Expand All @@ -341,7 +341,7 @@ public void DrawSelectedQuestDetails(QuestModel? quest, ref List<QuestModel> que

if (previousQuest != null)
{
var previousQuestStatusInfo = OtherUtils.GetQuestStatus(previousQuest);
var previousQuestStatusInfo = OtherUtils.GetQuestStatus(previousQuest, markCompletedRepeatableQuests);
if (ImGui.Selectable($"{previousQuestStatusInfo.StatusSymbol} {previousQuest.QuestTitle ?? "None"}##{previousQuestId}"))
{
questJournal.OpenQuestWindow(previousQuest, questList);
Expand All @@ -368,7 +368,7 @@ public void DrawSelectedQuestDetails(QuestModel? quest, ref List<QuestModel> que

if (nextQuest != null)
{
var nextQuestStatusInfo = OtherUtils.GetQuestStatus(nextQuest);
var nextQuestStatusInfo = OtherUtils.GetQuestStatus(nextQuest, markCompletedRepeatableQuests);
if (ImGui.Selectable($"{nextQuestStatusInfo.StatusSymbol} {nextQuest.QuestTitle ?? "None"}##{nextQuestId}"))
{
questJournal.OpenQuestWindow(nextQuest, questList);
Expand Down Expand Up @@ -396,7 +396,7 @@ public void DrawSelectedQuestDetails(QuestModel? quest, ref List<QuestModel> que
{
isAccepted = QuestManager.Instance()->IsQuestAccepted(quest.QuestId);

isComplete = quest.IsRepeatable
isComplete = (quest.IsRepeatable && !markCompletedRepeatableQuests)
? QuestManager.Instance()->IsDailyQuestCompleted((ushort)quest.QuestId)
: QuestManager.IsQuestComplete(quest.QuestId);
}
Expand Down