summaryrefslogtreecommitdiff
path: root/VRCSDK3Avatars/Assets/Resources/GestureManager/Scripts/Extra/ModuleBase.cs
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2024-12-27 00:56:58 -0500
committerFreya Murphy <freya@freyacat.org>2024-12-27 00:58:02 -0500
commit799e6680d40119dc9c2a9e0b320054a40324bebe (patch)
treedbcd308d59eb6e4f937a5547dd77d9f91d4fec20 /VRCSDK3Avatars/Assets/Resources/GestureManager/Scripts/Extra/ModuleBase.cs
parentmove to self host (diff)
downloadunityprojects-799e6680d40119dc9c2a9e0b320054a40324bebe.tar.gz
unityprojects-799e6680d40119dc9c2a9e0b320054a40324bebe.tar.bz2
unityprojects-799e6680d40119dc9c2a9e0b320054a40324bebe.zip
VRCSDK3Avatars found!
Diffstat (limited to 'VRCSDK3Avatars/Assets/Resources/GestureManager/Scripts/Extra/ModuleBase.cs')
-rw-r--r--VRCSDK3Avatars/Assets/Resources/GestureManager/Scripts/Extra/ModuleBase.cs83
1 files changed, 83 insertions, 0 deletions
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<string> _errorList = new List<string>();
+ private List<string> _warningList = new List<string>();
+
+ 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<Animator>();
+ }
+
+ 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<string> CheckWarnings() => new List<string>();
+
+ protected virtual List<string> CheckErrors()
+ {
+ var errors = new List<string>();
+ 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<string> GetErrors() => _errorList;
+
+ public IEnumerable<string> GetWarnings() => _warningList;
+ }
+} \ No newline at end of file