From 799e6680d40119dc9c2a9e0b320054a40324bebe Mon Sep 17 00:00:00 2001 From: Freya Murphy Date: Fri, 27 Dec 2024 00:56:58 -0500 Subject: VRCSDK3Avatars found! --- .../GestureManager/Scripts/Extra/ModuleBase.cs | 83 ++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 VRCSDK3Avatars/Assets/Resources/GestureManager/Scripts/Extra/ModuleBase.cs (limited to 'VRCSDK3Avatars/Assets/Resources/GestureManager/Scripts/Extra/ModuleBase.cs') diff --git a/VRCSDK3Avatars/Assets/Resources/GestureManager/Scripts/Extra/ModuleBase.cs b/VRCSDK3Avatars/Assets/Resources/GestureManager/Scripts/Extra/ModuleBase.cs new file mode 100644 index 00000000..bb4aa59f --- /dev/null +++ b/VRCSDK3Avatars/Assets/Resources/GestureManager/Scripts/Extra/ModuleBase.cs @@ -0,0 +1,83 @@ +using System.Collections.Generic; +using GmgAvatarDescriptor = +#if VRC_SDK_VRCSDK2 || VRC_SDK_VRCSDK3 + VRC.SDKBase.VRC_AvatarDescriptor; +#else + UnityEngine.Component; +#endif +using UnityEngine; +using UnityEngine.UIElements; + +namespace GestureManager.Scripts.Extra +{ + public abstract class ModuleBase + { + private readonly GmgAvatarDescriptor _avatarDescriptor; + + private List _errorList = new List(); + private List _warningList = new List(); + + public readonly GameObject Avatar; + public readonly Animator AvatarAnimator; + public readonly GestureManager Manager; + + protected int Right, Left; + protected bool GestureDrag; + + protected ModuleBase(GestureManager manager, GmgAvatarDescriptor avatarDescriptor) + { + _avatarDescriptor = avatarDescriptor; + + Manager = manager; + Avatar = avatarDescriptor.gameObject; + AvatarAnimator = Avatar.GetComponent(); + } + + public abstract void Update(); + public abstract void LateUpdate(); + public abstract void InitForAvatar(); + public abstract void Unlink(); + public abstract void EditorHeader(); + public abstract void EditorContent(object editor, VisualElement element); + protected abstract void OnNewLeft(int left); + protected abstract void OnNewRight(int right); + public abstract AnimationClip GetFinalGestureByIndex(int gestureIndex); + public abstract Animator OnCustomAnimationPlay(AnimationClip clip); + public abstract bool HasGestureBeenOverridden(int gesture); + public abstract void AddGestureToOverrideController(int gestureIndex, AnimationClip newAnimation); + + public virtual bool IsInvalid() => !Avatar || !AvatarAnimator || !_avatarDescriptor; + + protected virtual List CheckWarnings() => new List(); + + protected virtual List CheckErrors() + { + var errors = new List(); + if (GestureManager.ControlledAvatars.ContainsKey(Avatar)) errors.Add("- The avatar is already controlled by another Gesture Manager!"); + if (!Avatar) errors.Add("- The GameObject has been deleted!"); + else if (!Avatar.activeInHierarchy) errors.Add("- The GameObject is disabled!"); + if (!AvatarAnimator) errors.Add("- The model doesn't have any animator!"); + if (!_avatarDescriptor) errors.Add("- The VRC_AvatarDescriptor has been deleted!"); + return errors; + } + + public bool IsValidDesc() + { + _errorList = CheckErrors(); + _warningList = CheckWarnings(); + return _errorList.Count == 0; + } + + public void OnNewHand(GestureHand hand, int i) + { + if (hand == GestureHand.Left) OnNewLeft(i); + else OnNewRight(i); + } + + public bool IsPerfectDesc() => IsValidDesc() && _warningList.Count == 0; + + public IEnumerable GetErrors() => _errorList; + + public IEnumerable GetWarnings() => _warningList; + } +} \ No newline at end of file -- cgit v1.2.3-freya