2025-02-17 22:12:35 -05:00

179 lines
6.7 KiB
Plaintext

using System;
using System.Numerics;
using Dalamud.Interface.Colors;
using Dalamud.Interface.Utility.Raii;
using Dalamud.Interface.Windowing;
using ImGuiNET;
using QuestShare.Common;
using QuestShare.Services;
namespace QuestShare.Windows.MainWindow;
public class MainWindow : Window, IDisposable
{
public MainWindow()
: base(Plugin.Name + "###Main", ImGuiWindowFlags.NoScrollbar | ImGuiWindowFlags.NoScrollWithMouse)
{
SizeConstraints = new WindowSizeConstraints
{
MinimumSize = new Vector2(600, 650),
MaximumSize = new Vector2(float.MaxValue, float.MaxValue)
};
}
public override void OnOpen()
{
var questId = 69286;
// find the quest by id
}
public void Dispose() { }
private string enteredShareCode = Plugin.Configuration.LastShareCode;
private bool unsavedChanges = false;
private uint activeQuestId = 0;
private byte activeQuestStep = 0;
public override void Draw()
{
ImGui.TextUnformatted($"Token: {ShareService.Token}");
ImGui.TextUnformatted($"Share Code: {ShareService.ShareCode}");
ImGui.TextUnformatted($"Socket Status: {SocketClientService.IsConnected}");
ImGui.TextUnformatted($"Is Hosting: {ShareService.IsHost} - Is Grouped: {ShareService.IsGrouped}");
ImGui.Separator();
if (ImGui.Button("Connect"))
{
Plugin.SocketClient.Connect().ConfigureAwait(false);
}
ImGui.SameLine();
if (ImGui.Button("Disconnect"))
{
SocketClientService.connection.StopAsync().ConfigureAwait(false);
}
if (ImGui.Button("Register"))
{
SocketClientService.DispatchRegister();
}
ImGui.SameLine();
ImGui.BeginDisabled(!ShareService.IsGrouped && !ShareService.IsHost);
if (ImGui.Button("Cancel"))
{
SocketClientService.DispatchCancel();
}
ImGui.EndDisabled();
ImGui.SetNextItemWidth(100);
ImGui.InputTextWithHint("##ShareCode", "Share Code", ref enteredShareCode, 10);
ImGui.SameLine();
ImGui.BeginDisabled(enteredShareCode.Length < 1);
if (ImGui.Button("Pair"))
{
SocketClientService.DispatchGroup(enteredShareCode);
}
ImGui.EndDisabled();
ImGui.Separator();
if (ShareService.IsHost)
{
ImGui.TextUnformatted("Host Controls:");
ImGui.TextUnformatted("Share Code: ");
ImGui.SameLine();
ImGui.TextColored(ImGuiColors.HealerGreen, ShareService.ShareCode);
ImGui.TextUnformatted("Quests:");
ImGui.BeginChild("##Quests", new Vector2(0, ImGui.GetTextLineHeightWithSpacing() * 10), true);
ImGui.BeginTable("##QuestTable", 3, ImGuiTableFlags.Borders | ImGuiTableFlags.Resizable | ImGuiTableFlags.SizingFixedFit, new Vector2(0, -ImGui.GetTextLineHeightWithSpacing()));
ImGui.TableSetupColumn("Sync", ImGuiTableColumnFlags.WidthFixed, 50);
ImGui.TableSetupColumn("Active", ImGuiTableColumnFlags.WidthFixed, 50);
ImGui.TableSetupColumn("Quest", ImGuiTableColumnFlags.WidthStretch);
ImGui.TableSetupScrollFreeze(0, 1);
ImGui.TableHeadersRow();
foreach (var quest in GameQuestManager.GameQuests)
{
ImGui.TableNextRow();
ImGui.TableNextColumn();
var isSynced = quest.IsSynced;
ImGui.BeginDisabled(quest.IsActive);
if (ImGui.Checkbox($"##{quest.QuestId}_Sync", ref isSynced))
{
GameQuestManager.SetSyncFlag(quest.QuestId, isSynced);
unsavedChanges = true;
}
ImGui.EndDisabled();
ImGui.TableNextColumn();
var isActive = quest.IsActive;
ImGui.BeginDisabled(!isSynced);
if (ImGui.Checkbox($"##{quest.QuestId}_Active", ref isActive))
{
GameQuestManager.SetActiveFlag(quest.QuestId, isActive);
unsavedChanges = true;
}
ImGui.EndDisabled();
ImGui.TableNextColumn();
ImGui.TextColored(isActive ? ImGuiColors.HealerGreen : ImGuiColors.DalamudGrey, quest.QuestData.Name.ExtractText());
if (isActive)
{
activeQuestId = quest.QuestId;
activeQuestStep = quest.CurrentStep;
}
}
ImGui.EndTable();
ImGui.EndDisabled();
ImGui.EndChild();
ImGui.BeginDisabled(!unsavedChanges);
if (ImGui.Button("Save"))
{
SocketClientService.DispatchUpdate(false);
unsavedChanges = false;
}
ImGui.EndDisabled();
}
else
{
ImGui.TextUnformatted("Click Register to host a share session, or enter a share code to join.");
}
if (ShareService.IsGrouped || ShareService.IsHost)
{
ImGui.Separator();
ImGui.TextUnformatted("Members:");
ImGui.BeginChild("##Members", new Vector2(0, ImGui.GetTextLineHeightWithSpacing() * 5), true);
foreach (var member in ShareService.SharedMembers)
{
ImGui.TextUnformatted(member.CharacterName);
}
ImGui.EndChild();
}
ImGui.TextUnformatted("Current Active Quest Steps:");
if (activeQuestId != 0)
{
ImGui.TextUnformatted($"Quest: {GameQuestManager.GameQuests.FirstOrDefault(q => q.QuestId == activeQuestId)?.QuestData.Name.ExtractText()}");
ImGui.TextUnformatted($"Step: {activeQuestStep}");
ImGui.TextUnformatted("Steps:");
ImGui.BeginChild("##QuestSteps", new Vector2(0, ImGui.GetTextLineHeightWithSpacing()*5), true);
var steps = GameQuestManager.GameQuests.FirstOrDefault(q => q.QuestId == activeQuestId)?.QuestSteps;
var counter = 0;
if (steps != null)
{
foreach (var step in steps)
{
if (counter+1 == activeQuestStep || (activeQuestStep == 0xFF && steps.Count == counter+1))
{
ImGui.TextColored(ImGuiColors.HealerGreen, step);
}
else
{
ImGui.TextUnformatted(step);
}
counter++;
}
} else
{
ImGui.TextUnformatted("No steps found.");
}
ImGui.EndChild();
}
else
{
ImGui.TextUnformatted("No active quest.");
}
}
}