179 lines
6.7 KiB
Plaintext
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.");
|
|
}
|
|
}
|
|
}
|