diff --git a/PropUndoButton/Main.cs b/PropUndoButton/Main.cs index 8a98e48..34dc00f 100644 --- a/PropUndoButton/Main.cs +++ b/PropUndoButton/Main.cs @@ -191,9 +191,9 @@ public class PropUndoButton : MelonMod for (int i = propsList.Length - 1; i >= 0; i--) { CVRSyncHelper.PropData propData = propsList[i]; - SafeDeleteProp(propData); + DeleteProp(propData); } - + return false; } @@ -229,10 +229,15 @@ public class PropUndoButton : MelonMod if (Time.time - deletedProp.timeDeleted <= redoTimeoutLimit) { SendRedoProp(deletedProp.propGuid, deletedProp.position, deletedProp.rotation); + deletedProps.RemoveAt(index); PlayAudioModule(sfx_redo); } - - deletedProps.RemoveAt(index); + else + { + // if latest prop is too old, same with rest + deletedProps.Clear(); + PlayAudioModule(sfx_warn); + } } // original spawn prop method does not let you specify rotation @@ -266,6 +271,20 @@ public class PropUndoButton : MelonMod } } + private static void DeleteProp(CVRSyncHelper.PropData propData) + { + if (propData.Spawnable != null) + { + propData.Spawnable.Delete(); + } + else + { + if (propData.Wrapper != null) + UnityEngine.Object.DestroyImmediate(propData.Wrapper); + propData.Recycle(); + } + } + private static void SafeDeleteProp(CVRSyncHelper.PropData propData) { //fixes getting props stuck in limbo state if spawn & delete fast