mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-13 20:24:17 +01:00
Fix potential threading issue on launch.
This commit is contained in:
parent
70281c576e
commit
9d128a4d83
1 changed files with 6 additions and 4 deletions
|
|
@ -1,3 +1,4 @@
|
||||||
|
using Dalamud.Plugin.Services;
|
||||||
using FFXIVClientStructs.FFXIV.Client.Game.Character;
|
using FFXIVClientStructs.FFXIV.Client.Game.Character;
|
||||||
using FFXIVClientStructs.FFXIV.Client.Graphics.Scene;
|
using FFXIVClientStructs.FFXIV.Client.Graphics.Scene;
|
||||||
using OtterGui.Services;
|
using OtterGui.Services;
|
||||||
|
|
@ -22,18 +23,19 @@ public sealed class DrawObjectState : IDisposable, IReadOnlyDictionary<nint, (ni
|
||||||
=> _gameState.LastGameObject;
|
=> _gameState.LastGameObject;
|
||||||
|
|
||||||
public unsafe DrawObjectState(ObjectManager objects, CreateCharacterBase createCharacterBase, WeaponReload weaponReload,
|
public unsafe DrawObjectState(ObjectManager objects, CreateCharacterBase createCharacterBase, WeaponReload weaponReload,
|
||||||
CharacterBaseDestructor characterBaseDestructor, GameState gameState)
|
CharacterBaseDestructor characterBaseDestructor, GameState gameState, IFramework framework)
|
||||||
{
|
{
|
||||||
_objects = objects;
|
_objects = objects;
|
||||||
_createCharacterBase = createCharacterBase;
|
_createCharacterBase = createCharacterBase;
|
||||||
_weaponReload = weaponReload;
|
_weaponReload = weaponReload;
|
||||||
_characterBaseDestructor = characterBaseDestructor;
|
_characterBaseDestructor = characterBaseDestructor;
|
||||||
_gameState = gameState;
|
_gameState = gameState;
|
||||||
|
framework.RunOnFrameworkThread(InitializeDrawObjects);
|
||||||
|
|
||||||
_weaponReload.Subscribe(OnWeaponReloading, WeaponReload.Priority.DrawObjectState);
|
_weaponReload.Subscribe(OnWeaponReloading, WeaponReload.Priority.DrawObjectState);
|
||||||
_weaponReload.Subscribe(OnWeaponReloaded, WeaponReload.PostEvent.Priority.DrawObjectState);
|
_weaponReload.Subscribe(OnWeaponReloaded, WeaponReload.PostEvent.Priority.DrawObjectState);
|
||||||
_createCharacterBase.Subscribe(OnCharacterBaseCreated, CreateCharacterBase.PostEvent.Priority.DrawObjectState);
|
_createCharacterBase.Subscribe(OnCharacterBaseCreated, CreateCharacterBase.PostEvent.Priority.DrawObjectState);
|
||||||
_characterBaseDestructor.Subscribe(OnCharacterBaseDestructor, CharacterBaseDestructor.Priority.DrawObjectState);
|
_characterBaseDestructor.Subscribe(OnCharacterBaseDestructor, CharacterBaseDestructor.Priority.DrawObjectState);
|
||||||
InitializeDrawObjects();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool ContainsKey(nint key)
|
public bool ContainsKey(nint key)
|
||||||
|
|
@ -94,7 +96,7 @@ public sealed class DrawObjectState : IDisposable, IReadOnlyDictionary<nint, (ni
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private unsafe void InitializeDrawObjects()
|
private unsafe void InitializeDrawObjects()
|
||||||
{
|
{
|
||||||
foreach(var actor in _objects)
|
foreach (var actor in _objects)
|
||||||
{
|
{
|
||||||
if (actor is { IsCharacter: true, Model.Valid: true })
|
if (actor is { IsCharacter: true, Model.Valid: true })
|
||||||
IterateDrawObjectTree((Object*)actor.Model.Address, actor, false, false);
|
IterateDrawObjectTree((Object*)actor.Model.Address, actor, false, false);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue