namespace Auspex.Lighting.Internal; internal static class LightNativeBridge { public unsafe delegate GameLightData* SpawnDelegate(GameLightData* light); public unsafe delegate void CreateDelegate(GameLightData* light); public unsafe delegate void FinalizeDelegate(GameLightData* light); public unsafe delegate void UpdateCullingDelegate(GameLightData* light); public unsafe delegate void UpdateMaterialDelegate(GameLightData* light); public unsafe delegate void UpdateRangeDelegate(LightRenderData* renderData); public const string SpawnSig = "E8 ?? ?? ?? ?? 48 89 84 ?? ?? ?? ?? ?? 48 85 C0 0F ?? ?? ?? ?? ?? 48 8B C8"; public static SpawnDelegate Spawn; public const string CreateSig = "E8 ?? ?? ?? ?? 48 8B 0D ?? ?? ?? ?? 48 8B D3 E8 ?? ?? ?? ?? 48 8B CB E8 ?? ?? ?? ?? 48 8B ?? ?? ?? ?? ?? 40 0F"; public static CreateDelegate Create; public const string FinalizeSig = "F6 41 38 01 ?? ?? 48 8B ?? ?? ?? ?? ?? 48"; public new static FinalizeDelegate Finalize; public const string UpdateCullingSig = "48 89 5C 24 ?? 57 48 83 EC 40 48 8B B9 ?? ?? ?? ??"; public static UpdateCullingDelegate UpdateCulling; public const string UpdateMaterialSig = "40 53 48 83 EC 20 0F B6 81 ?? ?? ?? ?? 48 8B D9 A8 04 75 45 0C 04 B2 05"; public static UpdateMaterialDelegate UpdateMaterial; public const string UpdateRangeSig = "E8 ?? ?? ?? ?? 48 8D 8F ?? ?? ?? ?? FF 15 ?? ?? ?? ?? 48 8D 8F ?? ?? ?? ?? 48 8D 55"; public static UpdateRangeDelegate UpdateRange; internal static void Initialize() { SpawnDelegate spawn = SigScanHelper.Scan("E8 ?? ?? ?? ?? 48 89 84 ?? ?? ?? ?? ?? 48 85 C0 0F ?? ?? ?? ?? ?? 48 8B C8", "Spawn"); CreateDelegate create = SigScanHelper.Scan("E8 ?? ?? ?? ?? 48 8B 0D ?? ?? ?? ?? 48 8B D3 E8 ?? ?? ?? ?? 48 8B CB E8 ?? ?? ?? ?? 48 8B ?? ?? ?? ?? ?? 40 0F", "Create"); FinalizeDelegate finalize = SigScanHelper.Scan("F6 41 38 01 ?? ?? 48 8B ?? ?? ?? ?? ?? 48", "Finalize"); UpdateCullingDelegate updateCulling = SigScanHelper.Scan("48 89 5C 24 ?? 57 48 83 EC 40 48 8B B9 ?? ?? ?? ??", "UpdateCulling"); UpdateMaterialDelegate updateMaterial = SigScanHelper.Scan("40 53 48 83 EC 20 0F B6 81 ?? ?? ?? ?? 48 8B D9 A8 04 75 45 0C 04 B2 05", "UpdateMaterial"); UpdateRangeDelegate updateRange = SigScanHelper.Scan("E8 ?? ?? ?? ?? 48 8D 8F ?? ?? ?? ?? FF 15 ?? ?? ?? ?? 48 8D 8F ?? ?? ?? ?? 48 8D 55", "UpdateRange"); Spawn = spawn; Create = create; Finalize = finalize; UpdateCulling = updateCulling; UpdateMaterial = updateMaterial; UpdateRange = updateRange; } }