Updated to latest Penumbra.GameData, updated ObjectManager

This commit is contained in:
RisaDev
2024-02-03 03:07:50 +03:00
parent 24aaa30e9c
commit dc7fb73d84
16 changed files with 313 additions and 246 deletions

View File

@@ -28,16 +28,22 @@ using CustomizePlus.Game.Services.GPose;
using CustomizePlus.Game.Services.GPose.ExternalTools;
using CustomizePlus.GameData.Services;
using CustomizePlus.Configuration.Services.Temporary;
using OtterGui.Services;
using Penumbra.GameData.Actors;
using Penumbra.GameData.Enums;
using Penumbra.GameData.Structs;
using OtterGui;
namespace CustomizePlus.Core;
public static class ServiceManager
public static class ServiceManagerBuilder
{
public static ServiceProvider CreateProvider(DalamudPluginInterface pi, Logger logger)
public static ServiceManager CreateProvider(DalamudPluginInterface pi, Logger logger)
{
var services = new ServiceCollection()
.AddSingleton(logger)
.AddDalamud(pi)
EventWrapperBase.ChangeLogger(logger);
var services = new ServiceManager(logger)
.AddExistingService(logger)
.AddCore()
.AddEvents()
.AddGPoseServices()
@@ -49,16 +55,20 @@ public static class ServiceManager
.AddGameServices()
.AddConfigServices()
.AddRestOfServices();
return services.BuildServiceProvider(new ServiceProviderOptions { ValidateOnBuild = true });
}
private static IServiceCollection AddDalamud(this IServiceCollection services, DalamudPluginInterface pluginInterface)
{
new DalamudServices(pluginInterface).AddServices(services);
DalamudServices.AddServices(services, pi);
services.AddIServices(typeof(EquipItem).Assembly);
services.AddIServices(typeof(Plugin).Assembly);
services.AddIServices(typeof(ObjectManager).Assembly);
services.AddIServices(typeof(ImGuiUtil).Assembly);
services.CreateProvider();
return services;
}
private static IServiceCollection AddGPoseServices(this IServiceCollection services)
private static ServiceManager AddGPoseServices(this ServiceManager services)
{
services
.AddSingleton<PosingModeDetectService>()
@@ -67,14 +77,14 @@ public static class ServiceManager
return services;
}
private static IServiceCollection AddArmatureServices(this IServiceCollection services)
private static ServiceManager AddArmatureServices(this ServiceManager services)
{
services
.AddSingleton<ArmatureManager>();
return services;
}
private static IServiceCollection AddUI(this IServiceCollection services)
private static ServiceManager AddUI(this ServiceManager services)
{
services
.AddSingleton<TemplateCombo>()
@@ -107,7 +117,7 @@ public static class ServiceManager
return services;
}
private static IServiceCollection AddEvents(this IServiceCollection services)
private static ServiceManager AddEvents(this ServiceManager services)
{
services
.AddSingleton<ProfileChanged>()
@@ -118,7 +128,7 @@ public static class ServiceManager
return services;
}
private static IServiceCollection AddCore(this IServiceCollection services)
private static ServiceManager AddCore(this ServiceManager services)
{
services
.AddSingleton<HookingService>()
@@ -133,7 +143,7 @@ public static class ServiceManager
return services;
}
private static IServiceCollection AddRestOfServices(this IServiceCollection services) //temp
private static ServiceManager AddRestOfServices(this ServiceManager services) //temp
{
services
.AddSingleton<PoseFileBoneLoader>()
@@ -142,7 +152,7 @@ public static class ServiceManager
return services;
}
private static IServiceCollection AddConfigServices(this IServiceCollection services)
private static ServiceManager AddConfigServices(this ServiceManager services)
{
services
.AddSingleton<PluginConfiguration>()
@@ -153,7 +163,7 @@ public static class ServiceManager
return services;
}
private static IServiceCollection AddGameServices(this IServiceCollection services)
private static ServiceManager AddGameServices(this ServiceManager services)
{
services
.AddSingleton<GameObjectService>()
@@ -162,7 +172,7 @@ public static class ServiceManager
return services;
}
private static IServiceCollection AddProfileServices(this IServiceCollection services)
private static ServiceManager AddProfileServices(this ServiceManager services)
{
services
.AddSingleton<ProfileManager>()
@@ -172,7 +182,7 @@ public static class ServiceManager
return services;
}
private static IServiceCollection AddTemplateServices(this IServiceCollection services)
private static ServiceManager AddTemplateServices(this ServiceManager services)
{
services
.AddSingleton<TemplateManager>()
@@ -182,12 +192,13 @@ public static class ServiceManager
return services;
}
private static IServiceCollection AddGameDataServices(this IServiceCollection services)
private static ServiceManager AddGameDataServices(this ServiceManager services)
{
services
.AddSingleton<ActorManager>()
.AddSingleton<CutsceneService>()
.AddSingleton<GameEventManager>()
.AddSingleton<ActorService>()
.AddSingleton(p => new CutsceneResolver(idx => (short)p.GetRequiredService<CutsceneService>().GetParentIndex(idx)))
.AddSingleton<ObjectManager>();
return services;

View File

@@ -4,90 +4,27 @@ using Dalamud.IoC;
using Dalamud.Plugin;
using Dalamud.Plugin.Services;
using Microsoft.Extensions.DependencyInjection;
using OtterGui.Services;
namespace CustomizePlus.Core.Services;
public class DalamudServices
{
[PluginService]
[RequiredVersion("1.0")]
public DalamudPluginInterface PluginInterface { get; private set; } = null!;
[PluginService]
[RequiredVersion("1.0")]
public ISigScanner SigScanner { get; private set; } = null!;
[PluginService]
public IFramework Framework { get; private set; } = null!;
[PluginService]
[RequiredVersion("1.0")]
public IObjectTable ObjectTable { get; private set; } = null!;
[PluginService]
[RequiredVersion("1.0")]
public ICommandManager CommandManager { get; private set; } = null!;
[PluginService]
[RequiredVersion("1.0")]
public IChatGui ChatGui { get; private set; } = null!;
[PluginService]
[RequiredVersion("1.0")]
public IClientState ClientState { get; private set; } = null!;
[PluginService]
[RequiredVersion("1.0")]
public IGameGui GameGui { get; private set; } = null!;
[PluginService]
[RequiredVersion("1.0")]
internal IGameInteropProvider Hooker { get; private set; } = null!;
[PluginService]
[RequiredVersion("1.0")]
public IKeyState KeyState { get; private set; } = null!;
//GameData
[PluginService]
[RequiredVersion("1.0")]
public IDataManager DataManager { get; private set; } = null!;
[PluginService]
[RequiredVersion("1.0")]
public IPluginLog PluginLog { get; private set; } = null!;
/*[PluginService]
[RequiredVersion("1.0")]
public ICondition Condition { get; private set; } = null!;*/
[PluginService]
[RequiredVersion("1.0")]
public ITargetManager TargetManager { get; private set; } = null!;
public DalamudServices(DalamudPluginInterface pluginInterface)
public static void AddServices(ServiceManager services, DalamudPluginInterface pi)
{
pluginInterface.Inject(this);
}
public void AddServices(IServiceCollection services)
{
services
.AddSingleton(PluginInterface)
.AddSingleton(SigScanner)
.AddSingleton(Framework)
.AddSingleton(ObjectTable)
.AddSingleton(CommandManager)
.AddSingleton(ChatGui)
.AddSingleton(ClientState)
.AddSingleton(GameGui)
.AddSingleton(Hooker)
.AddSingleton(KeyState)
.AddSingleton(this)
.AddSingleton(PluginInterface.UiBuilder)
.AddSingleton(DataManager)
.AddSingleton(PluginLog)
//.AddSingleton(Condition)
.AddSingleton(TargetManager);
services.AddExistingService(pi)
.AddExistingService(pi.UiBuilder)
.AddDalamudService<ISigScanner>(pi)
.AddDalamudService<IFramework>(pi)
.AddDalamudService<IObjectTable>(pi)
.AddDalamudService<ICommandManager>(pi)
.AddDalamudService<IChatGui>(pi)
.AddDalamudService<IClientState>(pi)
.AddDalamudService<IGameGui>(pi)
.AddDalamudService<IGameInteropProvider>(pi)
.AddDalamudService<IKeyState>(pi)
.AddDalamudService<IDataManager>(pi)
.AddDalamudService<IPluginLog>(pi)
.AddDalamudService<ITargetManager>(pi);
}
}

View File

@@ -140,9 +140,17 @@ public class HookingService : IDisposable
return;
}
var actor = (Actor)gameObjectPtr;
if (actor.Valid)
_armatureManager.OnGameObjectMove((Actor)gameObjectPtr);
try
{
var actor = (Actor)gameObjectPtr;
if (actor.Valid)
_armatureManager.OnGameObjectMove((Actor)gameObjectPtr);
}
catch (Exception ex)
{
_logger.Error($"Exception in Customize+ movement hook: {ex}");
_gameObjectMovementHook?.Disable();
}
}
public void Dispose()