-
-
Notifications
You must be signed in to change notification settings - Fork 21
/
CgeLayerForBlinkingOverrideView.cs
63 lines (55 loc) · 2.94 KB
/
CgeLayerForBlinkingOverrideView.cs
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
using System.Collections.Generic;
using System.Linq;
using Hai.ComboGesture.Scripts.Editor.Internal.CgeAac;
using UnityEditor;
using UnityEditor.Animations;
using UnityEngine;
using VRC.SDKBase;
namespace Hai.ComboGesture.Scripts.Editor.Internal
{
internal class CgeLayerForBlinkingOverrideView
{
private readonly float _analogBlinkingUpperThreshold;
private readonly AvatarMask _logicalAvatarMask;
private readonly AnimatorController _animatorController;
private readonly CgeAssetContainer _assetContainer;
private readonly List<CgeManifestBinding> _manifestBindings;
private readonly bool _writeDefaultsForLogicalStates;
public CgeLayerForBlinkingOverrideView(float analogBlinkingUpperThreshold, AvatarMask logicalAvatarMask, AnimatorController animatorController, CgeAssetContainer assetContainer, List<CgeManifestBinding> manifestBindings, bool writeDefaults)
{
_analogBlinkingUpperThreshold = analogBlinkingUpperThreshold;
_logicalAvatarMask = logicalAvatarMask;
_animatorController = animatorController;
_assetContainer = assetContainer;
_manifestBindings = manifestBindings;
_writeDefaultsForLogicalStates = writeDefaults;
}
public void Create()
{
EditorUtility.DisplayProgressBar("ComboGestureExpressions", "Clearing eyes blinking override layer", 0f);
var layer = ReinitializeLayer();
if (!_manifestBindings.Any(manifest => manifest.Manifest.RequiresBlinking()))
{
return;
}
var enableBlinking = CreateBlinkingState(layer, VRC_AnimatorTrackingControl.TrackingType.Tracking);
var disableBlinking = CreateBlinkingState(layer, VRC_AnimatorTrackingControl.TrackingType.Animation);
enableBlinking.TransitionsTo(disableBlinking)
.When(layer.FloatParameter("_Hai_GestureAnimBlink").IsGreaterThan(_analogBlinkingUpperThreshold));
disableBlinking.TransitionsTo(enableBlinking)
.When(layer.FloatParameter("_Hai_GestureAnimBlink").IsLessThan(_analogBlinkingUpperThreshold));
}
private CgeAacFlState CreateBlinkingState(CgeAacFlLayer layer, VRC_AnimatorTrackingControl.TrackingType type)
{
return layer.NewState(type == VRC_AnimatorTrackingControl.TrackingType.Tracking ? "EnableBlinking" : "DisableBlinking", type == VRC_AnimatorTrackingControl.TrackingType.Tracking ? 0 : 2, 3)
.WithWriteDefaultsSetTo(_writeDefaultsForLogicalStates)
.TrackingSets(CgeAacFlState.TrackingElement.Eyes, type);
}
private CgeAacFlLayer ReinitializeLayer()
{
return _assetContainer.ExposeCgeAac().CreateSupportingArbitraryControllerLayer(_animatorController, "Hai_GestureBlinking")
.WithAvatarMask(_logicalAvatarMask)
.CGE_WithLayerWeight(0f);
}
}
}