diff --git a/Packages/net.fushizen.modular-avatar/Editor/BoneProxyHook.cs b/Packages/net.fushizen.modular-avatar/Editor/BoneProxyHook.cs deleted file mode 100644 index c2954878..00000000 --- a/Packages/net.fushizen.modular-avatar/Editor/BoneProxyHook.cs +++ /dev/null @@ -1,35 +0,0 @@ -using UnityEngine; -using VRC.SDKBase.Editor.BuildPipeline; - -namespace net.fushizen.modular_avatar.core.editor -{ - public class BoneProxyHook : IVRCSDKPreprocessAvatarCallback - { - public int callbackOrder => HookSequence.SEQ_BONE_PROXY; - - public bool OnPreprocessAvatar(GameObject avatarGameObject) - { - var boneProxies = avatarGameObject.GetComponentsInChildren(true); - - foreach (var proxy in boneProxies) - { - if (proxy.constraint != null) UnityEngine.Object.DestroyImmediate(proxy.constraint); - if (proxy.target != null) - { - var oldPath = RuntimeUtil.AvatarRootPath(proxy.gameObject); - Transform transform = proxy.transform; - transform.SetParent(proxy.target, false); - transform.localPosition = Vector3.zero; - transform.localRotation = Quaternion.identity; - PathMappings.Remap(oldPath, new PathMappings.MappingEntry() { - path = RuntimeUtil.AvatarRootPath(proxy.gameObject), - transformPath = RuntimeUtil.AvatarRootPath(proxy.gameObject) - }); - } - Object.DestroyImmediate(proxy); - } - - return true; - } - } -} \ No newline at end of file diff --git a/Packages/net.fushizen.modular-avatar/Editor/BoneProxyHook.cs.meta b/Packages/net.fushizen.modular-avatar/Editor/BoneProxyHook.cs.meta deleted file mode 100644 index 649c6bb2..00000000 --- a/Packages/net.fushizen.modular-avatar/Editor/BoneProxyHook.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 21339639c2ce435e97773a969d21f43a -timeCreated: 1661649405 \ No newline at end of file diff --git a/Packages/net.fushizen.modular-avatar/Runtime/ModularAvatarBoneProxy.cs b/Packages/net.fushizen.modular-avatar/Runtime/ModularAvatarBoneProxy.cs deleted file mode 100644 index 0545c8d1..00000000 --- a/Packages/net.fushizen.modular-avatar/Runtime/ModularAvatarBoneProxy.cs +++ /dev/null @@ -1,135 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Animations; -using Object = System.Object; - -namespace net.fushizen.modular_avatar.core -{ - public class ModularAvatarBoneProxy : AvatarTagComponent - { - public Transform target; - - public HumanBodyBones boneReference = HumanBodyBones.LastBone; - public string subPath; - - [SerializeField] [HideInInspector] public ParentConstraint constraint; - -#if UNITY_EDITOR - void OnValidate() - { - UnityEditor.EditorApplication.delayCall += CheckReferences; - } - - void CheckReferences() { - if (this == null) return; // post-destroy - - if (target == null && (boneReference != HumanBodyBones.LastBone || !string.IsNullOrWhiteSpace(subPath))) - { - UpdateDynamicMapping(); - if (target != null) - { - RuntimeUtil.MarkDirty(this); - } - } else if (target != null) - { - var origBoneReference = boneReference; - var origSubpath = subPath; - UpdateStaticMapping(); - if (origSubpath != subPath || origBoneReference != boneReference) - { - RuntimeUtil.MarkDirty(this); - } - } - - CheckConstraint(); - } - - private void CheckConstraint() - { - if (constraint != null) - { - if (!UnityEditor.PrefabUtility.IsPartOfPrefabAsset(constraint)) - { - UnityEngine.Object.DestroyImmediate(constraint); - } - } - } - - private void OnDestroy() - { - if (constraint != null) DestroyImmediate(constraint); - } - - private void UpdateDynamicMapping() - { - var avatar = RuntimeUtil.FindAvatarInParents(transform); - if (avatar == null) return; - - if (subPath == "$$AVATAR") - { - target = avatar.transform; - return; - } - - if (boneReference == HumanBodyBones.LastBone) - { - target = avatar.transform.Find(subPath); - return; - } - - var animator = avatar.GetComponent(); - if (animator == null) return; - var bone = animator.GetBoneTransform(boneReference); - if (bone == null) return; - if (string.IsNullOrWhiteSpace(subPath)) target = bone; - else target = bone.Find(subPath); - } - - private void UpdateStaticMapping() - { - var avatar = RuntimeUtil.FindAvatarInParents(transform); - var humanBones = new Dictionary(); - var animator = avatar.GetComponent(); - if (animator == null) - { - return; - } - - foreach (var boneTypeObj in Enum.GetValues(typeof(HumanBodyBones))) - { - var boneType = (HumanBodyBones) boneTypeObj; - if (boneType == HumanBodyBones.LastBone) continue; - var bone = animator.GetBoneTransform(boneType); - if (bone != null) humanBones[bone] = boneType; - } - - Transform iter = target; - Transform avatarTransform = avatar.transform; - - if (target == avatarTransform) - { - boneReference = HumanBodyBones.LastBone; - subPath = "$$AVATAR"; - return; - } - - while (iter != avatarTransform && !humanBones.ContainsKey(iter)) - { - iter = iter.parent; - } - - if (iter == avatarTransform) - { - boneReference = HumanBodyBones.LastBone; - } - else - { - boneReference = humanBones[iter]; - } - - subPath = RuntimeUtil.RelativePath(iter.gameObject, target.gameObject); - } -#endif - } -} \ No newline at end of file diff --git a/Packages/net.fushizen.modular-avatar/Runtime/ModularAvatarBoneProxy.cs.meta b/Packages/net.fushizen.modular-avatar/Runtime/ModularAvatarBoneProxy.cs.meta deleted file mode 100644 index 3f37902f..00000000 --- a/Packages/net.fushizen.modular-avatar/Runtime/ModularAvatarBoneProxy.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 42581d8044b64899834d3d515ab3a144 -timeCreated: 1661648057 \ No newline at end of file