PalacePal/Pal.Client/Plugin.cs

88 lines
2.8 KiB
C#
Raw Normal View History

2023-02-15 22:17:19 +00:00
using Dalamud.Game.ClientState.Objects.Types;
using Dalamud.Interface.Windowing;
using Dalamud.Plugin;
2023-02-08 15:06:43 +00:00
using Pal.Client.Rendering;
using Pal.Client.Scheduled;
2022-10-26 18:43:24 +00:00
using Pal.Client.Windows;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
2023-02-10 19:48:14 +00:00
using System.Globalization;
using System.Linq;
using System.Runtime.InteropServices;
2023-02-15 22:17:19 +00:00
using Dalamud.Logging;
2023-02-10 19:48:14 +00:00
using Pal.Client.Extensions;
using Pal.Client.Properties;
using ECommons;
2023-02-15 22:17:19 +00:00
using Microsoft.Extensions.DependencyInjection;
2023-02-15 01:38:04 +00:00
using Pal.Client.Configuration;
namespace Pal.Client
{
2023-02-15 22:17:19 +00:00
internal sealed class Plugin : IDisposable
{
2023-02-15 22:17:19 +00:00
private readonly IServiceProvider _serviceProvider;
private readonly DalamudPluginInterface _pluginInterface;
private readonly IPalacePalConfiguration _configuration;
private readonly RenderAdapter _renderAdapter;
2023-02-15 22:17:19 +00:00
public Plugin(
IServiceProvider serviceProvider,
DalamudPluginInterface pluginInterface,
IPalacePalConfiguration configuration,
RenderAdapter renderAdapter)
{
2023-02-15 22:17:19 +00:00
PluginLog.Information("Initializing Palace Pal");
2023-02-15 13:35:11 +00:00
2023-02-15 22:17:19 +00:00
_serviceProvider = serviceProvider;
_pluginInterface = pluginInterface;
_configuration = configuration;
_renderAdapter = renderAdapter;
2022-11-30 21:15:26 +00:00
2023-02-15 22:17:19 +00:00
// initialize legacy services
pluginInterface.Create<Service>();
2023-02-15 22:17:19 +00:00
Service.Configuration = configuration;
2023-02-08 15:06:43 +00:00
2023-02-15 22:17:19 +00:00
LanguageChanged(pluginInterface.UiLanguage);
2022-10-26 18:43:24 +00:00
2023-02-08 15:06:43 +00:00
pluginInterface.UiBuilder.Draw += Draw;
2023-02-11 20:10:45 +00:00
pluginInterface.UiBuilder.OpenConfigUi += OpenConfigUi;
2023-02-10 19:48:14 +00:00
pluginInterface.LanguageChanged += LanguageChanged;
}
2023-02-11 20:10:45 +00:00
private void OpenConfigUi()
{
2023-02-15 22:17:19 +00:00
Window configWindow;
if (_configuration.FirstUse)
configWindow = _serviceProvider.GetRequiredService<AgreementWindow>();
else
2023-02-15 22:17:19 +00:00
configWindow = _serviceProvider.GetRequiredService<ConfigWindow>();
2023-02-02 16:16:03 +00:00
2023-02-15 22:17:19 +00:00
configWindow.IsOpen = true;
}
#region IDisposable Support
public void Dispose()
{
2023-02-15 22:17:19 +00:00
_pluginInterface.UiBuilder.Draw -= Draw;
_pluginInterface.UiBuilder.OpenConfigUi -= OpenConfigUi;
_pluginInterface.LanguageChanged -= LanguageChanged;
}
#endregion
2023-02-15 22:17:19 +00:00
private void LanguageChanged(string languageCode)
{
2023-02-15 22:17:19 +00:00
Localization.Culture = new CultureInfo(languageCode);
_serviceProvider.GetRequiredService<WindowSystem>().Windows.OfType<ILanguageChanged>().Each(w => w.LanguageChanged());
2023-02-08 15:06:43 +00:00
}
private void Draw()
{
2023-02-15 22:17:19 +00:00
if (_renderAdapter.Implementation is SimpleRenderer sr)
2023-02-08 15:06:43 +00:00
sr.DrawLayers();
2023-02-15 22:17:19 +00:00
_serviceProvider.GetRequiredService<WindowSystem>().Draw();
}
}
}