e97fe36ba0
* Remove unused dalamud packager overrides * Use category tags, add actual description * Use .net7 * Update DalamudPackager, update for Api8 * Remove hardcoded images, we'll use lumina to get these dynamically * Add KamiLib * Refactor Currency Alert * Add LocalizationManager.cs * remove trailing comma * Add No Decoration flag * More touchups and features * Increase Version Number 0.5.0.0 * Move Chat Notifications to its own category * Hide overlay if not logged in or there are no warnings to show * Increase update frequency to 4x per second
163 lines
4.5 KiB
C#
163 lines
4.5 KiB
C#
using System.Linq;
|
|
using System.Numerics;
|
|
using CurrencyAlert.Commands;
|
|
using CurrencyAlert.DataModels;
|
|
using CurrencyAlert.Localization;
|
|
using Dalamud.Interface.Windowing;
|
|
using ImGuiNET;
|
|
using KamiLib;
|
|
using KamiLib.Configuration;
|
|
using KamiLib.GameState;
|
|
using KamiLib.Windows;
|
|
|
|
namespace CurrencyAlert.Windows;
|
|
|
|
public class OverlaySettings
|
|
{
|
|
public Setting<bool> LockPosition = new(false);
|
|
public Setting<float> Opacity = new(1.0f);
|
|
public Setting<bool> MinimalDisplay = new(false);
|
|
public Setting<bool> Show = new(true);
|
|
public Setting<bool> AscendingDescending = new(false);
|
|
}
|
|
|
|
public class OverlayWindow : Window
|
|
{
|
|
private static OverlaySettings OverlaySettings => Service.Configuration.OverlaySettings;
|
|
private static DisplaySettings DisplaySettings => Service.Configuration.DisplaySettings;
|
|
|
|
private Vector2 lastWindowSize = Vector2.Zero;
|
|
|
|
public OverlayWindow() : base("Currency Alert Overlay")
|
|
{
|
|
KamiCommon.CommandManager.AddCommand(new OverlayCommands());
|
|
|
|
Flags |= ImGuiWindowFlags.NoDecoration;
|
|
Flags |= ImGuiWindowFlags.NoBringToFrontOnFocus;
|
|
Flags |= ImGuiWindowFlags.NoFocusOnAppearing;
|
|
Flags |= ImGuiWindowFlags.NoNavFocus;
|
|
Flags |= ImGuiWindowFlags.AlwaysAutoResize;
|
|
}
|
|
|
|
public override void PreOpenCheck()
|
|
{
|
|
IsOpen = OverlaySettings.Show;
|
|
|
|
if (Condition.IsBoundByDuty()) IsOpen = false;
|
|
if (Condition.IsInCutsceneOrQuestEvent()) IsOpen = false;
|
|
if (!Service.CurrencyTracker.ActiveWarnings.Any()) IsOpen = false;
|
|
if (!Service.ClientState.IsLoggedIn) IsOpen = false;
|
|
}
|
|
|
|
public override void PreDraw()
|
|
{
|
|
var bgColor = ImGui.GetStyle().Colors[(int)ImGuiCol.WindowBg];
|
|
ImGui.PushStyleColor(ImGuiCol.WindowBg, bgColor with {W = OverlaySettings.Opacity.Value});
|
|
|
|
var borderColor = ImGui.GetStyle().Colors[(int)ImGuiCol.Border];
|
|
ImGui.PushStyleColor(ImGuiCol.Border, borderColor with {W = OverlaySettings.Opacity.Value});
|
|
|
|
if (OverlaySettings.LockPosition)
|
|
{
|
|
Flags |= DrawFlags.LockPosition;
|
|
}
|
|
else
|
|
{
|
|
Flags &= ~DrawFlags.LockPosition;
|
|
}
|
|
}
|
|
|
|
public override void Draw()
|
|
{
|
|
ResizeWindow();
|
|
|
|
if (OverlaySettings.MinimalDisplay)
|
|
{
|
|
DrawMinimalDisplay();
|
|
}
|
|
else
|
|
{
|
|
DrawNormalDisplay();
|
|
}
|
|
}
|
|
|
|
public override void PostDraw()
|
|
{
|
|
ImGui.PopStyleColor();
|
|
ImGui.PopStyleColor();
|
|
}
|
|
|
|
private void ResizeWindow()
|
|
{
|
|
if(OverlaySettings.AscendingDescending)
|
|
{
|
|
var size = ImGui.GetWindowSize();
|
|
|
|
if(lastWindowSize != Vector2.Zero)
|
|
{
|
|
var offset = lastWindowSize - size;
|
|
offset.X = 0;
|
|
|
|
if (offset != Vector2.Zero)
|
|
{
|
|
ImGui.SetWindowPos(ImGui.GetWindowPos() + offset);
|
|
}
|
|
}
|
|
|
|
lastWindowSize = size;
|
|
}
|
|
}
|
|
|
|
private static void DrawMinimalDisplay()
|
|
{
|
|
if (DisplaySettings.ShowWarningText)
|
|
{
|
|
ImGui.TextColored(DisplaySettings.TextColor.Value, Strings.OverlayWarningText);
|
|
ImGui.SameLine();
|
|
}
|
|
|
|
foreach (var currency in Service.CurrencyTracker.ActiveWarnings)
|
|
{
|
|
if (DisplaySettings.ShowIcon)
|
|
{
|
|
currency.DrawIcon();
|
|
|
|
if (DisplaySettings.ShowName)
|
|
{
|
|
ImGui.SameLine();
|
|
currency.DrawName(DisplaySettings.TextColor.Value);
|
|
ImGui.SameLine();
|
|
}
|
|
}
|
|
else if (DisplaySettings.ShowName)
|
|
{
|
|
currency.DrawName(DisplaySettings.TextColor.Value);
|
|
ImGui.SameLine();
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void DrawNormalDisplay()
|
|
{
|
|
foreach (var currency in Service.CurrencyTracker.ActiveWarnings)
|
|
{
|
|
if (DisplaySettings.ShowWarningText)
|
|
{
|
|
ImGui.TextColored(DisplaySettings.TextColor.Value, Strings.OverlayWarningText);
|
|
ImGui.SameLine();
|
|
}
|
|
|
|
if (DisplaySettings.ShowIcon)
|
|
{
|
|
currency.DrawIcon();
|
|
ImGui.SameLine();
|
|
}
|
|
|
|
if (DisplaySettings.ShowName)
|
|
{
|
|
currency.DrawName(DisplaySettings.TextColor.Value);
|
|
}
|
|
}
|
|
}
|
|
}
|