Questionable/Questionable/QuestionablePlugin.cs

93 lines
3.5 KiB
C#
Raw Normal View History

2024-05-26 21:45:26 +02:00
using System;
using System.Numerics;
2024-05-25 23:51:37 +02:00
using Dalamud.Game;
using Dalamud.Game.ClientState.Objects;
using Dalamud.Interface.Windowing;
using Dalamud.Plugin;
using Dalamud.Plugin.Services;
using FFXIVClientStructs.FFXIV.Client.UI;
using Questionable.Controller;
2024-05-27 21:54:34 +02:00
using Questionable.Data;
2024-05-25 23:51:37 +02:00
using Questionable.External;
using Questionable.Windows;
namespace Questionable;
2024-05-27 21:54:34 +02:00
public sealed class QuestionablePlugin : IDalamudPlugin
2024-05-25 23:51:37 +02:00
{
private readonly WindowSystem _windowSystem = new(nameof(Questionable));
private readonly DalamudPluginInterface _pluginInterface;
private readonly IClientState _clientState;
private readonly IFramework _framework;
private readonly IGameGui _gameGui;
private readonly GameFunctions _gameFunctions;
2024-05-26 21:45:26 +02:00
private readonly QuestController _questController;
2024-05-25 23:51:37 +02:00
private readonly MovementController _movementController;
2024-05-27 21:54:34 +02:00
public QuestionablePlugin(DalamudPluginInterface pluginInterface, IClientState clientState,
ITargetManager targetManager, IFramework framework, IGameGui gameGui, IDataManager dataManager,
ISigScanner sigScanner, IObjectTable objectTable, IPluginLog pluginLog, ICondition condition, IChatGui chatGui,
ICommandManager commandManager)
2024-05-25 23:51:37 +02:00
{
2024-05-26 21:45:26 +02:00
ArgumentNullException.ThrowIfNull(pluginInterface);
ArgumentNullException.ThrowIfNull(sigScanner);
ArgumentNullException.ThrowIfNull(dataManager);
ArgumentNullException.ThrowIfNull(objectTable);
2024-05-25 23:51:37 +02:00
_pluginInterface = pluginInterface;
_clientState = clientState;
_framework = framework;
_gameGui = gameGui;
2024-05-27 21:54:34 +02:00
_gameFunctions = new GameFunctions(dataManager, objectTable, sigScanner, targetManager, condition, pluginLog);
2024-05-26 21:45:26 +02:00
2024-05-27 21:54:34 +02:00
AetheryteData aetheryteData = new AetheryteData(dataManager);
2024-05-26 21:45:26 +02:00
NavmeshIpc navmeshIpc = new NavmeshIpc(pluginInterface);
2024-05-27 21:54:34 +02:00
LifestreamIpc lifestreamIpc = new LifestreamIpc(pluginInterface, aetheryteData);
2024-05-26 15:43:33 +02:00
_movementController =
2024-05-27 21:54:34 +02:00
new MovementController(navmeshIpc, clientState, _gameFunctions, condition, pluginLog);
2024-05-26 21:45:26 +02:00
_questController = new QuestController(pluginInterface, dataManager, _clientState, _gameFunctions,
2024-05-27 21:54:34 +02:00
_movementController, pluginLog, condition, chatGui, aetheryteData, lifestreamIpc);
2024-05-26 21:45:26 +02:00
_windowSystem.AddWindow(new DebugWindow(_movementController, _questController, _gameFunctions, clientState,
targetManager));
2024-05-25 23:51:37 +02:00
_pluginInterface.UiBuilder.Draw += _windowSystem.Draw;
_framework.Update += FrameworkUpdate;
}
private void FrameworkUpdate(IFramework framework)
{
2024-05-26 21:45:26 +02:00
_questController.Update();
2024-05-25 23:51:37 +02:00
2024-05-26 21:45:26 +02:00
HandleNavigationShortcut();
2024-05-25 23:51:37 +02:00
_movementController.Update();
}
private unsafe void HandleNavigationShortcut()
{
var inputData = UIInputData.Instance();
if (inputData == null)
return;
if (inputData->IsGameWindowFocused &&
inputData->UIFilteredMouseButtonReleasedFlags.HasFlag(MouseButtonFlags.LBUTTON) &&
inputData->GetKeyState(SeVirtualKey.MENU).HasFlag(KeyStateFlags.Down) &&
_gameGui.ScreenToWorld(new Vector2(inputData->CursorXPosition, inputData->CursorYPosition),
out Vector3 worldPos))
{
2024-05-26 15:43:33 +02:00
_movementController.NavigateTo(EMovementType.Shortcut, worldPos,
_gameFunctions.IsFlyingUnlocked(_clientState.TerritoryType));
2024-05-25 23:51:37 +02:00
}
}
public void Dispose()
{
_framework.Update -= FrameworkUpdate;
_pluginInterface.UiBuilder.Draw -= _windowSystem.Draw;
_movementController.Dispose();
}
}