mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-14 04:34:19 +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
|
public static class RefreshActors
|
||||||
{
|
{
|
||||||
private const int ObjectKindOffset = 0x008C;
|
|
||||||
private const int RenderModeOffset = 0x0104;
|
private const int RenderModeOffset = 0x0104;
|
||||||
private const int RenderTaskDelay = 75;
|
private const int RenderTaskPlayerDelay = 75;
|
||||||
|
private const int RenderTaskOtherDelay = 25;
|
||||||
private enum RenderMode : int
|
private const int ModelInvisibilityFlag = 0b10;
|
||||||
{
|
|
||||||
Draw = 0,
|
|
||||||
Unload = 2
|
|
||||||
}
|
|
||||||
|
|
||||||
private static async void Redraw(Actor actor)
|
private static async void Redraw(Actor actor)
|
||||||
{
|
{
|
||||||
var ptr = actor.Address;
|
var ptr = actor.Address;
|
||||||
var objectKindPtr = ptr + ObjectKindOffset;
|
|
||||||
var renderModePtr = ptr + RenderModeOffset;
|
var renderModePtr = ptr + RenderModeOffset;
|
||||||
|
var renderStatus = Marshal.ReadInt32(renderModePtr);
|
||||||
|
|
||||||
async void DrawObject()
|
async void DrawObject(int delay)
|
||||||
{
|
{
|
||||||
Marshal.WriteInt32(renderModePtr, (int) RenderMode.Unload);
|
Marshal.WriteInt32(renderModePtr, renderStatus | ModelInvisibilityFlag);
|
||||||
await Task.Delay(RenderTaskDelay);
|
await Task.Delay(delay);
|
||||||
Marshal.WriteInt32(renderModePtr, (int) RenderMode.Draw);
|
Marshal.WriteInt32(renderModePtr, renderStatus & ~ModelInvisibilityFlag);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (actor.ObjectKind == Dalamud.Game.ClientState.Actors.ObjectKind.Player)
|
if (actor.ObjectKind == Dalamud.Game.ClientState.Actors.ObjectKind.Player)
|
||||||
{
|
{
|
||||||
Marshal.WriteByte(objectKindPtr, (byte) Dalamud.Game.ClientState.Actors.ObjectKind.BattleNpc);
|
DrawObject(RenderTaskPlayerDelay);
|
||||||
DrawObject();
|
await Task.Delay(RenderTaskPlayerDelay);
|
||||||
await Task.Delay(RenderTaskDelay);
|
|
||||||
Marshal.WriteByte(objectKindPtr, (byte) Dalamud.Game.ClientState.Actors.ObjectKind.Player);
|
|
||||||
Marshal.WriteInt32(renderModePtr, (int) RenderMode.Draw);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
DrawObject();
|
DrawObject(RenderTaskOtherDelay);
|
||||||
await Task.Delay(RenderTaskDelay);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void RedrawSpecific(ActorTable actors, string name)
|
public static void RedrawSpecific(ActorTable actors, string name)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue