blob: bb4aa59f955b00285da544218f2cb09fa5c2aa2e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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;
}
}
|