diff --git a/Packages/net.fushizen.modular-avatar/Editor/BoneProxyHook.cs b/Packages/net.fushizen.modular-avatar/Editor/BoneProxyHook.cs index a6fed0cb..ca6a910f 100644 --- a/Packages/net.fushizen.modular-avatar/Editor/BoneProxyHook.cs +++ b/Packages/net.fushizen.modular-avatar/Editor/BoneProxyHook.cs @@ -27,11 +27,11 @@ using VRC.SDKBase.Editor.BuildPipeline; namespace net.fushizen.modular_avatar.core.editor { - public class BoneProxyHook : IVRCSDKPreprocessAvatarCallback + public class BoneProxyHook : HookBase { - public int callbackOrder => HookSequence.SEQ_BONE_PROXY; + public override int callbackOrder => HookSequence.SEQ_BONE_PROXY; - public bool OnPreprocessAvatar(GameObject avatarGameObject) + protected override bool OnPreprocessAvatarWrapped(GameObject avatarGameObject) { var boneProxies = avatarGameObject.GetComponentsInChildren(true); diff --git a/Packages/net.fushizen.modular-avatar/Editor/HookBase.cs b/Packages/net.fushizen.modular-avatar/Editor/HookBase.cs new file mode 100644 index 00000000..a464886c --- /dev/null +++ b/Packages/net.fushizen.modular-avatar/Editor/HookBase.cs @@ -0,0 +1,25 @@ +using System; +using UnityEngine; +using VRC.SDKBase.Editor.BuildPipeline; + +namespace net.fushizen.modular_avatar.core.editor +{ + public abstract class HookBase : IVRCSDKPreprocessAvatarCallback + { + public bool OnPreprocessAvatar(GameObject avatarGameObject) + { + try + { + return OnPreprocessAvatarWrapped(avatarGameObject); + } + catch (Exception e) + { + Debug.LogError(e); + return false; + } + } + + protected abstract bool OnPreprocessAvatarWrapped(GameObject avatarGameObject); + public abstract int callbackOrder { get; } + } +} \ No newline at end of file diff --git a/Packages/net.fushizen.modular-avatar/Editor/HookBase.cs.meta b/Packages/net.fushizen.modular-avatar/Editor/HookBase.cs.meta new file mode 100644 index 00000000..d87eaf01 --- /dev/null +++ b/Packages/net.fushizen.modular-avatar/Editor/HookBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d65a87d13d234177b18f1b0fbbf12360 +timeCreated: 1662780435 \ No newline at end of file diff --git a/Packages/net.fushizen.modular-avatar/Editor/LastResortTagComponentCleaner.cs b/Packages/net.fushizen.modular-avatar/Editor/LastResortTagComponentCleaner.cs index 8a8d6aa1..d87723aa 100644 --- a/Packages/net.fushizen.modular-avatar/Editor/LastResortTagComponentCleaner.cs +++ b/Packages/net.fushizen.modular-avatar/Editor/LastResortTagComponentCleaner.cs @@ -30,11 +30,11 @@ namespace net.fushizen.modular_avatar.core.editor /** * Ensure that any AvatarTagComponents are purged just before upload. */ - public class LastResortTagComponentCleaner : IVRCSDKPreprocessAvatarCallback + public class LastResortTagComponentCleaner : HookBase { - public int callbackOrder => 0; + public override int callbackOrder => 0; - public bool OnPreprocessAvatar(GameObject avatarGameObject) + protected override bool OnPreprocessAvatarWrapped(GameObject avatarGameObject) { foreach (var component in avatarGameObject.GetComponentsInChildren(true)) { diff --git a/Packages/net.fushizen.modular-avatar/Editor/MergeAnimatorHook.cs b/Packages/net.fushizen.modular-avatar/Editor/MergeAnimatorHook.cs index 9db84717..384f0393 100644 --- a/Packages/net.fushizen.modular-avatar/Editor/MergeAnimatorHook.cs +++ b/Packages/net.fushizen.modular-avatar/Editor/MergeAnimatorHook.cs @@ -31,12 +31,12 @@ using VRC.SDKBase.Editor.BuildPipeline; namespace net.fushizen.modular_avatar.core.editor { - public class MergeAnimatorHook : IVRCSDKPreprocessAvatarCallback + public class MergeAnimatorHook : HookBase { private const string SAMPLE_PATH_PACKAGE = "Packages/com.vrchat.avatars/Samples/AV3 Demo Assets/Animation/Controllers"; private const string SAMPLE_PATH_LEGACY = "Assets/VRCSDK/Examples3/Animation/Controllers"; - public int callbackOrder => HookSequence.SEQ_MERGE_ANIMATORS; + public override int callbackOrder => HookSequence.SEQ_MERGE_ANIMATORS; private Dictionary defaultControllers_ = new Dictionary(); @@ -44,7 +44,7 @@ namespace net.fushizen.modular_avatar.core.editor Dictionary mergeSessions = new Dictionary(); - public bool OnPreprocessAvatar(GameObject avatarGameObject) + protected override bool OnPreprocessAvatarWrapped(GameObject avatarGameObject) { var descriptor = avatarGameObject.GetComponent(); diff --git a/Packages/net.fushizen.modular-avatar/Editor/MergeArmatureHook.cs b/Packages/net.fushizen.modular-avatar/Editor/MergeArmatureHook.cs index ae295103..7c9fb157 100644 --- a/Packages/net.fushizen.modular-avatar/Editor/MergeArmatureHook.cs +++ b/Packages/net.fushizen.modular-avatar/Editor/MergeArmatureHook.cs @@ -34,14 +34,14 @@ using Vector3 = UnityEngine.Vector3; namespace net.fushizen.modular_avatar.core.editor { - public class MergeArmatureHook : IVRCSDKPreprocessAvatarCallback + public class MergeArmatureHook : HookBase { - public int callbackOrder => HookSequence.SEQ_MERGE_ARMATURE; + public override int callbackOrder => HookSequence.SEQ_MERGE_ARMATURE; private Dictionary BoneRemappings = new Dictionary(); private List ToDelete = new List(); - public bool OnPreprocessAvatar(GameObject avatarGameObject) + protected override bool OnPreprocessAvatarWrapped(GameObject avatarGameObject) { var mergeArmatures = avatarGameObject.transform.GetComponentsInChildren(true); diff --git a/Packages/net.fushizen.modular-avatar/Editor/MeshRetargeter.cs b/Packages/net.fushizen.modular-avatar/Editor/MeshRetargeter.cs index 6a585999..1dc6281e 100644 --- a/Packages/net.fushizen.modular-avatar/Editor/MeshRetargeter.cs +++ b/Packages/net.fushizen.modular-avatar/Editor/MeshRetargeter.cs @@ -30,10 +30,10 @@ using VRC.SDKBase.Editor.BuildPipeline; namespace net.fushizen.modular_avatar.core.editor { - internal class MeshRetargeterResetHook : IVRCSDKPreprocessAvatarCallback + internal class MeshRetargeterResetHook : HookBase { - public int callbackOrder => HookSequence.SEQ_RESETTERS; - public bool OnPreprocessAvatar(GameObject avatarGameObject) + public override int callbackOrder => HookSequence.SEQ_RESETTERS; + protected override bool OnPreprocessAvatarWrapped(GameObject avatarGameObject) { BoneDatabase.ResetBones(); return true; @@ -84,10 +84,10 @@ namespace net.fushizen.modular_avatar.core.editor } } - internal class RetargetMeshes : IVRCSDKPreprocessAvatarCallback + internal class RetargetMeshes : HookBase { - public int callbackOrder => HookSequence.SEQ_RETARGET_MESH; - public bool OnPreprocessAvatar(GameObject avatarGameObject) + public override int callbackOrder => HookSequence.SEQ_RETARGET_MESH; + protected override bool OnPreprocessAvatarWrapped(GameObject avatarGameObject) { foreach (var renderer in avatarGameObject.GetComponentsInChildren(true)) { diff --git a/Packages/net.fushizen.modular-avatar/Editor/PathMappings.cs b/Packages/net.fushizen.modular-avatar/Editor/PathMappings.cs index 29109aed..5875cfeb 100644 --- a/Packages/net.fushizen.modular-avatar/Editor/PathMappings.cs +++ b/Packages/net.fushizen.modular-avatar/Editor/PathMappings.cs @@ -74,10 +74,10 @@ namespace net.fushizen.modular_avatar.core.editor } } - internal class ClearPathMappings : IVRCSDKPreprocessAvatarCallback + internal class ClearPathMappings : HookBase { - public int callbackOrder => HookSequence.SEQ_RESETTERS; - public bool OnPreprocessAvatar(GameObject avatarGameObject) + public override int callbackOrder => HookSequence.SEQ_RESETTERS; + protected override bool OnPreprocessAvatarWrapped(GameObject avatarGameObject) { PathMappings.Clear(); return true;