Questionable/Questionable/QuestionablePlugin.cs

114 lines
4.6 KiB
C#
Raw Normal View History

2024-05-26 21:45:26 +02:00
using System;
using System.Linq;
2024-05-26 21:45:26 +02:00
using System.Numerics;
2024-05-25 23:51:37 +02:00
using Dalamud.Game;
using Dalamud.Game.ClientState.Objects;
using Dalamud.Game.Command;
2024-05-25 23:51:37 +02:00
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;
2024-06-01 22:01:50 +02:00
using Questionable.Model;
2024-05-25 23:51:37 +02:00
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 ICommandManager _commandManager;
2024-05-25 23:51:37 +02:00
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;
private readonly GameUiController _gameUiController;
2024-06-08 11:30:26 +02:00
private readonly Configuration _configuration;
2024-05-25 23:51:37 +02:00
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, IAddonLifecycle addonLifecycle)
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;
_commandManager = commandManager;
2024-06-01 01:26:46 +02:00
_gameFunctions = new GameFunctions(dataManager, objectTable, sigScanner, targetManager, condition, clientState,
pluginLog);
2024-06-08 11:30:26 +02:00
_configuration = (Configuration?)_pluginInterface.GetPluginConfig() ?? new Configuration();
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,
_movementController, pluginLog, condition, chatGui, framework, aetheryteData, lifestreamIpc);
_gameUiController =
2024-06-08 11:30:26 +02:00
new GameUiController(addonLifecycle, dataManager, _gameFunctions, _questController, gameGui, pluginLog);
2024-06-08 11:30:26 +02:00
_windowSystem.AddWindow(new DebugWindow(pluginInterface, _movementController, _questController, _gameFunctions,
clientState, framework, targetManager, _gameUiController, _configuration));
2024-05-25 23:51:37 +02:00
_pluginInterface.UiBuilder.Draw += _windowSystem.Draw;
_framework.Update += FrameworkUpdate;
_commandManager.AddHandler("/qst", new CommandInfo(ProcessCommand));
2024-06-06 18:49:49 +02:00
_framework.RunOnTick(() => _gameUiController.HandleCurrentDialogueChoices(), TimeSpan.FromMilliseconds(200));
2024-05-25 23:51:37 +02:00
}
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 void ProcessCommand(string command, string arguments)
{
_windowSystem.Windows.Single(x => x is DebugWindow).Toggle();
}
2024-05-25 23:51:37 +02:00
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))
{
_movementController.NavigateTo(EMovementType.Shortcut, null, worldPos,
2024-06-01 18:46:57 +02:00
_gameFunctions.IsFlyingUnlocked(_clientState.TerritoryType), true);
2024-05-25 23:51:37 +02:00
}
}
public void Dispose()
{
_commandManager.RemoveHandler("/qst");
2024-05-25 23:51:37 +02:00
_framework.Update -= FrameworkUpdate;
_pluginInterface.UiBuilder.Draw -= _windowSystem.Draw;
_gameUiController.Dispose();
2024-05-25 23:51:37 +02:00
_movementController.Dispose();
}
}