Add call-on-services-ready attribute for service methods, and fix scene nullability (#900)

This commit is contained in:
kizer 2022-06-27 01:49:34 +09:00 committed by GitHub
parent 5809accf5d
commit 3369f569fb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
52 changed files with 274 additions and 273 deletions

View file

@ -15,7 +15,7 @@ namespace Dalamud.Game.Gui.Toast
[PluginInterface]
[InterfaceVersion("1.0")]
[ServiceManager.BlockingEarlyLoadedService]
public sealed partial class ToastGui : IDisposable
public sealed partial class ToastGui : IDisposable, IServiceType
{
private const uint QuestToastCheckmarkMagic = 60081;
@ -100,16 +100,6 @@ namespace Dalamud.Game.Gui.Toast
#endregion
/// <summary>
/// Enables this module.
/// </summary>
public void Enable()
{
this.showNormalToastHook.Enable();
this.showQuestToastHook.Enable();
this.showErrorToastHook.Enable();
}
/// <summary>
/// Disposes of managed and unmanaged resources.
/// </summary>
@ -153,6 +143,14 @@ namespace Dalamud.Game.Gui.Toast
return terminated;
}
[ServiceManager.CallWhenServicesReady]
private void ContinueConstruction(GameGui gameGui)
{
this.showNormalToastHook.Enable();
this.showQuestToastHook.Enable();
this.showErrorToastHook.Enable();
}
private SeString ParseString(IntPtr text)
{
var bytes = new List<byte>();
@ -202,7 +200,9 @@ namespace Dalamud.Game.Gui.Toast
{
options ??= new ToastOptions();
var manager = Service<GameGui>.Get().GetUIModule();
var manager = Service<GameGui>.GetNullable()?.GetUIModule();
if (manager == null)
return;
// terminate the string
var terminated = Terminate(bytes);
@ -211,7 +211,7 @@ namespace Dalamud.Game.Gui.Toast
{
fixed (byte* ptr = terminated)
{
this.HandleNormalToastDetour(manager, (IntPtr)ptr, 5, (byte)options.Position, (byte)options.Speed, 0);
this.HandleNormalToastDetour(manager!.Value, (IntPtr)ptr, 5, (byte)options.Position, (byte)options.Speed, 0);
}
}
}
@ -283,7 +283,9 @@ namespace Dalamud.Game.Gui.Toast
{
options ??= new QuestToastOptions();
var manager = Service<GameGui>.Get().GetUIModule();
var manager = Service<GameGui>.GetNullable()?.GetUIModule();
if (manager == null)
return;
// terminate the string
var terminated = Terminate(bytes);
@ -295,7 +297,7 @@ namespace Dalamud.Game.Gui.Toast
fixed (byte* ptr = terminated)
{
this.HandleQuestToastDetour(
manager,
manager!.Value,
(int)options.Position,
(IntPtr)ptr,
ioc1,
@ -385,7 +387,9 @@ namespace Dalamud.Game.Gui.Toast
private void ShowError(byte[] bytes)
{
var manager = Service<GameGui>.Get().GetUIModule();
var manager = Service<GameGui>.GetNullable()?.GetUIModule();
if (manager == null)
return;
// terminate the string
var terminated = Terminate(bytes);
@ -394,7 +398,7 @@ namespace Dalamud.Game.Gui.Toast
{
fixed (byte* ptr = terminated)
{
this.HandleErrorToastDetour(manager, (IntPtr)ptr, 0);
this.HandleErrorToastDetour(manager!.Value, (IntPtr)ptr, 0);
}
}
}