mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-12 18:27:24 +01:00
Rewrote the Redraw function according to Aers' comment.
This commit is contained in:
parent
bea196e4b6
commit
7130848fe2
1 changed files with 13 additions and 21 deletions
|
|
@ -7,40 +7,32 @@ namespace Penumbra
|
|||
{
|
||||
public static class RefreshActors
|
||||
{
|
||||
private const int ObjectKindOffset = 0x008C;
|
||||
private const int RenderModeOffset = 0x0104;
|
||||
private const int RenderTaskDelay = 75;
|
||||
|
||||
private enum RenderMode : int
|
||||
{
|
||||
Draw = 0,
|
||||
Unload = 2
|
||||
}
|
||||
private const int RenderModeOffset = 0x0104;
|
||||
private const int RenderTaskPlayerDelay = 75;
|
||||
private const int RenderTaskOtherDelay = 25;
|
||||
private const int ModelInvisibilityFlag = 0b10;
|
||||
|
||||
private static async void Redraw(Actor actor)
|
||||
{
|
||||
var ptr = actor.Address;
|
||||
var objectKindPtr = ptr + ObjectKindOffset;
|
||||
var renderModePtr = ptr + RenderModeOffset;
|
||||
var renderStatus = Marshal.ReadInt32(renderModePtr);
|
||||
|
||||
async void DrawObject()
|
||||
async void DrawObject(int delay)
|
||||
{
|
||||
Marshal.WriteInt32(renderModePtr, (int) RenderMode.Unload);
|
||||
await Task.Delay(RenderTaskDelay);
|
||||
Marshal.WriteInt32(renderModePtr, (int) RenderMode.Draw);
|
||||
Marshal.WriteInt32(renderModePtr, renderStatus | ModelInvisibilityFlag);
|
||||
await Task.Delay(delay);
|
||||
Marshal.WriteInt32(renderModePtr, renderStatus & ~ModelInvisibilityFlag);
|
||||
}
|
||||
|
||||
if (actor.ObjectKind == Dalamud.Game.ClientState.Actors.ObjectKind.Player)
|
||||
{
|
||||
Marshal.WriteByte(objectKindPtr, (byte) Dalamud.Game.ClientState.Actors.ObjectKind.BattleNpc);
|
||||
DrawObject();
|
||||
await Task.Delay(RenderTaskDelay);
|
||||
Marshal.WriteByte(objectKindPtr, (byte) Dalamud.Game.ClientState.Actors.ObjectKind.Player);
|
||||
Marshal.WriteInt32(renderModePtr, (int) RenderMode.Draw);
|
||||
DrawObject(RenderTaskPlayerDelay);
|
||||
await Task.Delay(RenderTaskPlayerDelay);
|
||||
}
|
||||
else
|
||||
DrawObject();
|
||||
await Task.Delay(RenderTaskDelay);
|
||||
DrawObject(RenderTaskOtherDelay);
|
||||
|
||||
}
|
||||
|
||||
public static void RedrawSpecific(ActorTable actors, string name)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue