Patch DeleteAllProps, reverse order

This commit is contained in:
NotAKidoS 2023-04-13 18:48:58 -05:00
parent 57024e6bab
commit df51d421aa

View file

@ -37,10 +37,14 @@ public class PropUndoButton : MelonMod
public override void OnInitializeMelon()
{
HarmonyInstance.Patch( // delete all props in reverse order for redo
HarmonyInstance.Patch( // delete my props in reverse order for redo
typeof(CVRSyncHelper).GetMethod(nameof(CVRSyncHelper.DeleteMyProps)),
prefix: new HarmonyLib.HarmonyMethod(typeof(PropUndoButton).GetMethod(nameof(OnDeleteMyProps), BindingFlags.NonPublic | BindingFlags.Static))
);
HarmonyInstance.Patch( // delete all props in reverse order for redo
typeof(CVRSyncHelper).GetMethod(nameof(CVRSyncHelper.DeleteAllProps)),
prefix: new HarmonyLib.HarmonyMethod(typeof(PropUndoButton).GetMethod(nameof(OnDeleteAllProps), BindingFlags.NonPublic | BindingFlags.Static))
);
HarmonyInstance.Patch( // prop spawn sfx
typeof(CVRSyncHelper).GetMethod(nameof(CVRSyncHelper.SpawnProp)),
postfix: new HarmonyLib.HarmonyMethod(typeof(PropUndoButton).GetMethod(nameof(OnSpawnProp), BindingFlags.NonPublic | BindingFlags.Static))
@ -172,6 +176,27 @@ public class PropUndoButton : MelonMod
return false;
}
// delete in reverse order for undo to work as expected
private static bool OnDeleteAllProps()
{
if (!EntryEnabled.Value) return true;
CVRSyncHelper.PropData[] propsList = CVRSyncHelper.Props.ToArray();
if (propsList.Length == 0)
{
PlayAudioModule(sfx_warn);
return false;
}
for (int i = propsList.Length - 1; i >= 0; i--)
{
CVRSyncHelper.PropData propData = propsList[i];
SafeDeleteProp(propData);
}
return false;
}
private static void UndoProp()
{
var propData = GetLatestPropByOwnerId();