mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-12 10:17:22 +01:00
Merge branch 'deduplicate' of https://github.com/Ottermandias/Penumbra into deduplicate
This commit is contained in:
commit
d6266b7f02
6 changed files with 26 additions and 24 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 RenderTaskPlayerDelay = 75;
|
||||||
private const int RenderTaskDelay = 75;
|
private const int RenderTaskOtherDelay = 25;
|
||||||
|
private const int ModelInvisibilityFlag = 0b10;
|
||||||
private enum RenderMode : int
|
|
||||||
{
|
|
||||||
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)
|
||||||
|
|
|
||||||
|
|
@ -99,6 +99,7 @@ namespace Penumbra.Models
|
||||||
inOption = true;
|
inOption = true;
|
||||||
foreach (var value in values)
|
foreach (var value in values)
|
||||||
option.AddFile(relName1, value);
|
option.AddFile(relName1, value);
|
||||||
|
option.OptionFiles.Remove(relName2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -179,13 +179,17 @@ namespace Penumbra.Mods
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SelectType.Multi:
|
case SelectType.Multi:
|
||||||
for(var i = 0; i < group.Options.Count; ++i)
|
for(var i = 0; i < group.Options.Count; ++i)
|
||||||
{
|
{
|
||||||
if ((setting & (1 << i)) != 0)
|
if ((setting & (1 << i)) != 0)
|
||||||
|
{
|
||||||
if (group.Options[i].OptionFiles.TryGetValue(relativeFilePath, out paths))
|
if (group.Options[i].OptionFiles.TryGetValue(relativeFilePath, out paths))
|
||||||
AddFiles(paths);
|
AddFiles(paths);
|
||||||
|
}
|
||||||
|
else if (group.Options[i].OptionFiles.ContainsKey(relativeFilePath))
|
||||||
|
doNotAdd = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,8 @@ namespace Penumbra.Mods
|
||||||
PluginLog.LogError( "no basepath has been set on {ResourceModName}", Meta.Name );
|
PluginLog.LogError( "no basepath has been set on {ResourceModName}", Meta.Name );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ModFiles.Clear();
|
||||||
// we don't care about any _files_ in the root dir, but any folders should be a game folder/file combo
|
// we don't care about any _files_ in the root dir, but any folders should be a game folder/file combo
|
||||||
foreach( var dir in ModBasePath.EnumerateDirectories() )
|
foreach( var dir in ModBasePath.EnumerateDirectories() )
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -227,7 +227,9 @@ namespace Penumbra.UI
|
||||||
if( ImGui.Button( ButtonDeduplicate ) )
|
if( ImGui.Button( ButtonDeduplicate ) )
|
||||||
{
|
{
|
||||||
new Deduplicator(Mod.Mod.ModBasePath, Meta).Run();
|
new Deduplicator(Mod.Mod.ModBasePath, Meta).Run();
|
||||||
_selector.SaveCurrentMod();
|
_selector.SaveCurrentMod();
|
||||||
|
Mod.Mod.RefreshModFiles();
|
||||||
|
_base._plugin.ModManager.CalculateEffectiveFileList();
|
||||||
_base._menu._effectiveTab.RebuildFileList(_base._plugin.Configuration.ShowAdvanced);
|
_base._menu._effectiveTab.RebuildFileList(_base._plugin.Configuration.ShowAdvanced);
|
||||||
}
|
}
|
||||||
if( ImGui.IsItemHovered() )
|
if( ImGui.IsItemHovered() )
|
||||||
|
|
|
||||||
|
|
@ -260,6 +260,8 @@ namespace Penumbra.UI
|
||||||
_mod.Mod.Meta = ModMeta.LoadFromFile(metaPath) ?? _mod.Mod.Meta;
|
_mod.Mod.Meta = ModMeta.LoadFromFile(metaPath) ?? _mod.Mod.Meta;
|
||||||
_base._menu._installedTab._modPanel._details.ResetState();
|
_base._menu._installedTab._modPanel._details.ResetState();
|
||||||
}
|
}
|
||||||
|
_mod.Mod.RefreshModFiles();
|
||||||
|
_base._plugin.ModManager.CalculateEffectiveFileList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public string SaveCurrentMod()
|
public string SaveCurrentMod()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue