add click to target in ui
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
using Dalamud.ContextMenu;
|
using Dalamud.ContextMenu;
|
||||||
|
using Dalamud.Game.ClientState.Objects;
|
||||||
using Dalamud.Interface.ImGuiFileDialog;
|
using Dalamud.Interface.ImGuiFileDialog;
|
||||||
using Dalamud.Interface.Windowing;
|
using Dalamud.Interface.Windowing;
|
||||||
using Dalamud.Plugin;
|
using Dalamud.Plugin;
|
||||||
@@ -33,7 +34,7 @@ public sealed class Plugin : IDalamudPlugin
|
|||||||
|
|
||||||
public Plugin(DalamudPluginInterface pluginInterface, ICommandManager commandManager, IDataManager gameData,
|
public Plugin(DalamudPluginInterface pluginInterface, ICommandManager commandManager, IDataManager gameData,
|
||||||
IFramework framework, IObjectTable objectTable, IClientState clientState, ICondition condition, IChatGui chatGui,
|
IFramework framework, IObjectTable objectTable, IClientState clientState, ICondition condition, IChatGui chatGui,
|
||||||
IGameGui gameGui, IDtrBar dtrBar, IPluginLog pluginLog)
|
IGameGui gameGui, IDtrBar dtrBar, IPluginLog pluginLog, ITargetManager targetManager)
|
||||||
{
|
{
|
||||||
_hostBuilderRunTask = new HostBuilder()
|
_hostBuilderRunTask = new HostBuilder()
|
||||||
.UseContentRoot(pluginInterface.ConfigDirectory.FullName)
|
.UseContentRoot(pluginInterface.ConfigDirectory.FullName)
|
||||||
@@ -77,7 +78,7 @@ public sealed class Plugin : IDalamudPlugin
|
|||||||
collection.AddSingleton<SelectTagForPairUi>();
|
collection.AddSingleton<SelectTagForPairUi>();
|
||||||
collection.AddSingleton((s) => new DalamudContextMenu(pluginInterface));
|
collection.AddSingleton((s) => new DalamudContextMenu(pluginInterface));
|
||||||
collection.AddSingleton((s) => new DalamudUtilService(s.GetRequiredService<ILogger<DalamudUtilService>>(),
|
collection.AddSingleton((s) => new DalamudUtilService(s.GetRequiredService<ILogger<DalamudUtilService>>(),
|
||||||
clientState, objectTable, framework, gameGui, condition, gameData,
|
clientState, objectTable, framework, gameGui, condition, gameData, targetManager,
|
||||||
s.GetRequiredService<MareMediator>(), s.GetRequiredService<PerformanceCollectorService>()));
|
s.GetRequiredService<MareMediator>(), s.GetRequiredService<PerformanceCollectorService>()));
|
||||||
collection.AddSingleton((s) => new DtrEntry(s.GetRequiredService<ILogger<DtrEntry>>(), dtrBar, s.GetRequiredService<MareConfigService>(),
|
collection.AddSingleton((s) => new DtrEntry(s.GetRequiredService<ILogger<DtrEntry>>(), dtrBar, s.GetRequiredService<MareConfigService>(),
|
||||||
s.GetRequiredService<MareMediator>(), s.GetRequiredService<PairManager>(), s.GetRequiredService<ApiController>()));
|
s.GetRequiredService<MareMediator>(), s.GetRequiredService<PairManager>(), s.GetRequiredService<ApiController>()));
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using Dalamud.Game.ClientState.Conditions;
|
using Dalamud.Game.ClientState.Conditions;
|
||||||
|
using Dalamud.Game.ClientState.Objects;
|
||||||
using Dalamud.Game.ClientState.Objects.SubKinds;
|
using Dalamud.Game.ClientState.Objects.SubKinds;
|
||||||
using Dalamud.Plugin.Services;
|
using Dalamud.Plugin.Services;
|
||||||
using FFXIVClientStructs.FFXIV.Client.Game.Character;
|
using FFXIVClientStructs.FFXIV.Client.Game.Character;
|
||||||
@@ -15,7 +16,7 @@ using GameObject = FFXIVClientStructs.FFXIV.Client.Game.Object.GameObject;
|
|||||||
|
|
||||||
namespace MareSynchronos.Services;
|
namespace MareSynchronos.Services;
|
||||||
|
|
||||||
public class DalamudUtilService : IHostedService
|
public class DalamudUtilService : IHostedService, IMediatorSubscriber
|
||||||
{
|
{
|
||||||
private readonly List<uint> _classJobIdsIgnoredForPets = [30];
|
private readonly List<uint> _classJobIdsIgnoredForPets = [30];
|
||||||
private readonly IClientState _clientState;
|
private readonly IClientState _clientState;
|
||||||
@@ -23,7 +24,6 @@ public class DalamudUtilService : IHostedService
|
|||||||
private readonly IFramework _framework;
|
private readonly IFramework _framework;
|
||||||
private readonly IGameGui _gameGui;
|
private readonly IGameGui _gameGui;
|
||||||
private readonly ILogger<DalamudUtilService> _logger;
|
private readonly ILogger<DalamudUtilService> _logger;
|
||||||
private readonly MareMediator _mediator;
|
|
||||||
private readonly IObjectTable _objectTable;
|
private readonly IObjectTable _objectTable;
|
||||||
private readonly PerformanceCollectorService _performanceCollector;
|
private readonly PerformanceCollectorService _performanceCollector;
|
||||||
private uint? _classJobId = 0;
|
private uint? _classJobId = 0;
|
||||||
@@ -35,7 +35,7 @@ public class DalamudUtilService : IHostedService
|
|||||||
private bool _sentBetweenAreas = false;
|
private bool _sentBetweenAreas = false;
|
||||||
|
|
||||||
public DalamudUtilService(ILogger<DalamudUtilService> logger, IClientState clientState, IObjectTable objectTable, IFramework framework,
|
public DalamudUtilService(ILogger<DalamudUtilService> logger, IClientState clientState, IObjectTable objectTable, IFramework framework,
|
||||||
IGameGui gameGui, ICondition condition, IDataManager gameData, MareMediator mediator, PerformanceCollectorService performanceCollector)
|
IGameGui gameGui, ICondition condition, IDataManager gameData, ITargetManager targetManager, MareMediator mediator, PerformanceCollectorService performanceCollector)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_clientState = clientState;
|
_clientState = clientState;
|
||||||
@@ -43,7 +43,7 @@ public class DalamudUtilService : IHostedService
|
|||||||
_framework = framework;
|
_framework = framework;
|
||||||
_gameGui = gameGui;
|
_gameGui = gameGui;
|
||||||
_condition = condition;
|
_condition = condition;
|
||||||
_mediator = mediator;
|
Mediator = mediator;
|
||||||
_performanceCollector = performanceCollector;
|
_performanceCollector = performanceCollector;
|
||||||
WorldData = new(() =>
|
WorldData = new(() =>
|
||||||
{
|
{
|
||||||
@@ -51,6 +51,17 @@ public class DalamudUtilService : IHostedService
|
|||||||
.Where(w => w.IsPublic && !w.Name.RawData.IsEmpty)
|
.Where(w => w.IsPublic && !w.Name.RawData.IsEmpty)
|
||||||
.ToDictionary(w => (ushort)w.RowId, w => w.Name.ToString());
|
.ToDictionary(w => (ushort)w.RowId, w => w.Name.ToString());
|
||||||
});
|
});
|
||||||
|
mediator.Subscribe<TargetPairMessage>(this, async (msg) =>
|
||||||
|
{
|
||||||
|
var name = msg.Pair.PlayerName;
|
||||||
|
if (string.IsNullOrEmpty(name)) return;
|
||||||
|
var addr = _playerCharas.FirstOrDefault(f => string.Equals(f.Value.Name, name, StringComparison.Ordinal)).Value.Address;
|
||||||
|
if (addr == nint.Zero) return;
|
||||||
|
await RunOnFrameworkThread(() =>
|
||||||
|
{
|
||||||
|
targetManager.Target = CreateGameObject(addr);
|
||||||
|
}).ConfigureAwait(false);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public unsafe GameObject* GposeTarget => TargetSystem.Instance()->GPoseTarget;
|
public unsafe GameObject* GposeTarget => TargetSystem.Instance()->GPoseTarget;
|
||||||
@@ -64,6 +75,8 @@ public class DalamudUtilService : IHostedService
|
|||||||
|
|
||||||
public Lazy<Dictionary<ushort, string>> WorldData { get; private set; }
|
public Lazy<Dictionary<ushort, string>> WorldData { get; private set; }
|
||||||
|
|
||||||
|
public MareMediator Mediator { get; }
|
||||||
|
|
||||||
public Dalamud.Game.ClientState.Objects.Types.GameObject? CreateGameObject(IntPtr reference)
|
public Dalamud.Game.ClientState.Objects.Types.GameObject? CreateGameObject(IntPtr reference)
|
||||||
{
|
{
|
||||||
EnsureIsOnFramework();
|
EnsureIsOnFramework();
|
||||||
@@ -279,6 +292,7 @@ public class DalamudUtilService : IHostedService
|
|||||||
{
|
{
|
||||||
_logger.LogTrace("Stopping {type}", GetType());
|
_logger.LogTrace("Stopping {type}", GetType());
|
||||||
|
|
||||||
|
Mediator.UnsubscribeAll(this);
|
||||||
_framework.Update -= FrameworkOnUpdate;
|
_framework.Update -= FrameworkOnUpdate;
|
||||||
return Task.CompletedTask;
|
return Task.CompletedTask;
|
||||||
}
|
}
|
||||||
@@ -433,31 +447,31 @@ public class DalamudUtilService : IHostedService
|
|||||||
{
|
{
|
||||||
_logger.LogDebug("Gpose start");
|
_logger.LogDebug("Gpose start");
|
||||||
IsInGpose = true;
|
IsInGpose = true;
|
||||||
_mediator.Publish(new GposeStartMessage());
|
Mediator.Publish(new GposeStartMessage());
|
||||||
}
|
}
|
||||||
else if (GposeTarget == null && IsInGpose)
|
else if (GposeTarget == null && IsInGpose)
|
||||||
{
|
{
|
||||||
_logger.LogDebug("Gpose end");
|
_logger.LogDebug("Gpose end");
|
||||||
IsInGpose = false;
|
IsInGpose = false;
|
||||||
_mediator.Publish(new GposeEndMessage());
|
Mediator.Publish(new GposeEndMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_condition[ConditionFlag.WatchingCutscene] && !IsInCutscene)
|
if (_condition[ConditionFlag.WatchingCutscene] && !IsInCutscene)
|
||||||
{
|
{
|
||||||
_logger.LogDebug("Cutscene start");
|
_logger.LogDebug("Cutscene start");
|
||||||
IsInCutscene = true;
|
IsInCutscene = true;
|
||||||
_mediator.Publish(new CutsceneStartMessage());
|
Mediator.Publish(new CutsceneStartMessage());
|
||||||
_mediator.Publish(new HaltScanMessage("Cutscene"));
|
Mediator.Publish(new HaltScanMessage("Cutscene"));
|
||||||
}
|
}
|
||||||
else if (!_condition[ConditionFlag.WatchingCutscene] && IsInCutscene)
|
else if (!_condition[ConditionFlag.WatchingCutscene] && IsInCutscene)
|
||||||
{
|
{
|
||||||
_logger.LogDebug("Cutscene end");
|
_logger.LogDebug("Cutscene end");
|
||||||
IsInCutscene = false;
|
IsInCutscene = false;
|
||||||
_mediator.Publish(new CutsceneEndMessage());
|
Mediator.Publish(new CutsceneEndMessage());
|
||||||
_mediator.Publish(new ResumeScanMessage("Cutscene"));
|
Mediator.Publish(new ResumeScanMessage("Cutscene"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (IsInCutscene) { _mediator.Publish(new CutsceneFrameworkUpdateMessage()); return; }
|
if (IsInCutscene) { Mediator.Publish(new CutsceneFrameworkUpdateMessage()); return; }
|
||||||
|
|
||||||
if (_condition[ConditionFlag.BetweenAreas] || _condition[ConditionFlag.BetweenAreas51])
|
if (_condition[ConditionFlag.BetweenAreas] || _condition[ConditionFlag.BetweenAreas51])
|
||||||
{
|
{
|
||||||
@@ -469,8 +483,8 @@ public class DalamudUtilService : IHostedService
|
|||||||
{
|
{
|
||||||
_logger.LogDebug("Zone switch/Gpose start");
|
_logger.LogDebug("Zone switch/Gpose start");
|
||||||
_sentBetweenAreas = true;
|
_sentBetweenAreas = true;
|
||||||
_mediator.Publish(new ZoneSwitchStartMessage());
|
Mediator.Publish(new ZoneSwitchStartMessage());
|
||||||
_mediator.Publish(new HaltScanMessage("Zone switch"));
|
Mediator.Publish(new HaltScanMessage("Zone switch"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -481,11 +495,11 @@ public class DalamudUtilService : IHostedService
|
|||||||
{
|
{
|
||||||
_logger.LogDebug("Zone switch/Gpose end");
|
_logger.LogDebug("Zone switch/Gpose end");
|
||||||
_sentBetweenAreas = false;
|
_sentBetweenAreas = false;
|
||||||
_mediator.Publish(new ZoneSwitchEndMessage());
|
Mediator.Publish(new ZoneSwitchEndMessage());
|
||||||
_mediator.Publish(new ResumeScanMessage("Zone switch"));
|
Mediator.Publish(new ResumeScanMessage("Zone switch"));
|
||||||
}
|
}
|
||||||
|
|
||||||
_mediator.Publish(new FrameworkUpdateMessage());
|
Mediator.Publish(new FrameworkUpdateMessage());
|
||||||
|
|
||||||
if (DateTime.Now < _delayedFrameworkUpdateCheck.AddSeconds(1)) return;
|
if (DateTime.Now < _delayedFrameworkUpdateCheck.AddSeconds(1)) return;
|
||||||
|
|
||||||
@@ -496,16 +510,16 @@ public class DalamudUtilService : IHostedService
|
|||||||
_logger.LogDebug("Logged in");
|
_logger.LogDebug("Logged in");
|
||||||
IsLoggedIn = true;
|
IsLoggedIn = true;
|
||||||
_lastZone = _clientState.TerritoryType;
|
_lastZone = _clientState.TerritoryType;
|
||||||
_mediator.Publish(new DalamudLoginMessage());
|
Mediator.Publish(new DalamudLoginMessage());
|
||||||
}
|
}
|
||||||
else if (localPlayer == null && IsLoggedIn)
|
else if (localPlayer == null && IsLoggedIn)
|
||||||
{
|
{
|
||||||
_logger.LogDebug("Logged out");
|
_logger.LogDebug("Logged out");
|
||||||
IsLoggedIn = false;
|
IsLoggedIn = false;
|
||||||
_mediator.Publish(new DalamudLogoutMessage());
|
Mediator.Publish(new DalamudLogoutMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
_mediator.Publish(new DelayedFrameworkUpdateMessage());
|
Mediator.Publish(new DelayedFrameworkUpdateMessage());
|
||||||
|
|
||||||
_delayedFrameworkUpdateCheck = DateTime.Now;
|
_delayedFrameworkUpdateCheck = DateTime.Now;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ public record OpenSyncshellAdminPanel(GroupFullInfoDto GroupInfo) : MessageBase;
|
|||||||
public record OpenPermissionWindow(Pair Pair) : MessageBase;
|
public record OpenPermissionWindow(Pair Pair) : MessageBase;
|
||||||
public record DownloadLimitChangedMessage() : SameThreadMessage;
|
public record DownloadLimitChangedMessage() : SameThreadMessage;
|
||||||
public record CensusUpdateMessage(byte Gender, byte RaceId, byte TribeId) : MessageBase;
|
public record CensusUpdateMessage(byte Gender, byte RaceId, byte TribeId) : MessageBase;
|
||||||
|
public record TargetPairMessage(Pair Pair) : MessageBase;
|
||||||
|
|
||||||
#pragma warning restore S2094
|
#pragma warning restore S2094
|
||||||
#pragma warning restore MA0048 // File name must match type name
|
#pragma warning restore MA0048 // File name must match type name
|
||||||
@@ -208,7 +208,11 @@ public class DrawUserPair
|
|||||||
else if (_pair.IsVisible)
|
else if (_pair.IsVisible)
|
||||||
{
|
{
|
||||||
UiSharedService.NormalizedIcon(FontAwesomeIcon.Eye, ImGuiColors.ParsedGreen);
|
UiSharedService.NormalizedIcon(FontAwesomeIcon.Eye, ImGuiColors.ParsedGreen);
|
||||||
userPairText = _pair.UserData.AliasOrUID + " is visible: " + _pair.PlayerName;
|
userPairText = _pair.UserData.AliasOrUID + " is visible: " + _pair.PlayerName + Environment.NewLine + "Click to target this player";
|
||||||
|
if (ImGui.IsItemClicked())
|
||||||
|
{
|
||||||
|
_mediator.Publish(new TargetPairMessage(_pair));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -243,6 +247,7 @@ public class DrawUserPair
|
|||||||
return "Paired through " + groupString;
|
return "Paired through " + groupString;
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
UiSharedService.AttachToolTip(userPairText);
|
UiSharedService.AttachToolTip(userPairText);
|
||||||
|
|
||||||
ImGui.SameLine();
|
ImGui.SameLine();
|
||||||
|
|||||||
Reference in New Issue
Block a user