@@ -13,33 +13,36 @@ public class V2Mapper : ImappingStategy
1313 "EyeY" ,
1414 "EyeLid"
1515 } ;
16-
16+
1717 private Dictionary < string , float > _parameterValues = new ( )
1818 {
1919 { "EyeX" , 0f } ,
2020 { "EyeY" , 0f } ,
2121 { "EyeLid" , 1f } ,
22-
22+
2323 { "EyeLeftX" , 0f } ,
2424 { "EyeLeftY" , 0f } ,
2525 { "EyeRightX" , 0f } ,
2626 { "EyeRightY" , 0f } ,
2727 { "EyeLidLeft" , 1f } ,
2828 { "EyeLidRight" , 1f } ,
2929 } ;
30-
30+
3131 private ILogger _logger ;
32+ private readonly Config _config ;
3233
33- public V2Mapper ( ILogger logger )
34+ public V2Mapper ( ILogger logger , ref Config config )
3435 {
36+ _config = config ;
3537 _logger = logger ;
3638 }
39+
3740 public void handleOSCMessage ( OSCMessage message )
3841 {
3942 string paramToMap = ImappingStategy . GetParamToMap ( message . address ) ;
4043 if ( ! _parameterValues . ContainsKey ( paramToMap ) )
4144 return ;
42-
45+
4346 _parameterValues [ paramToMap ] = message . value ;
4447 var singleEyeMode = _singleEyeParamNames . Contains ( paramToMap ) ;
4548 UpdateVRCFTEyeData ( ref UnifiedTracking . Data . Eye , ref UnifiedTracking . Data . Shapes , singleEyeMode ) ;
@@ -50,7 +53,7 @@ private void UpdateVRCFTEyeData(ref UnifiedEyeData eyeData, ref UnifiedExpressio
5053 HandleEyeGaze ( ref eyeData , isSingleEyeMode ) ;
5154 HandleEyeOpenness ( ref eyeData , ref eyeShapes , isSingleEyeMode ) ;
5255 }
53-
56+
5457 private void HandleEyeGaze ( ref UnifiedEyeData eyeData , bool isSingleEyeMode )
5558 {
5659 if ( isSingleEyeMode )
@@ -65,18 +68,48 @@ private void HandleEyeGaze(ref UnifiedEyeData eyeData, bool isSingleEyeMode)
6568 eyeData . Right . Gaze = new Vector2 ( _parameterValues [ "EyeRightX" ] , _parameterValues [ "EyeRightY" ] ) ;
6669 }
6770
68- private void HandleEyeOpenness ( ref UnifiedEyeData eyeData , ref UnifiedExpressionShape [ ] eyeShapes , bool isSingleEyeMode = false )
71+ private void HandleEyeOpenness ( ref UnifiedEyeData eyeData , ref UnifiedExpressionShape [ ] eyeShapes ,
72+ bool isSingleEyeMode = false )
6973 {
7074 if ( isSingleEyeMode )
7175 {
7276 var eyeOpenness = _parameterValues [ "EyeLid" ] ;
73-
74- eyeData . Left . Openness = eyeOpenness ;
75- eyeData . Right . Openness = eyeOpenness ;
77+
78+ HandleSingleEyeOpenness ( ref eyeData . Left , eyeOpenness , _config . WidenThreshold , _config . SqueezeThreshold ) ;
79+ HandleSingleEyeOpenness ( ref eyeData . Right , eyeOpenness , _config . WidenThreshold , _config . SqueezeThreshold ) ;
7680 return ;
7781 }
78-
79- eyeData . Left . Openness = _parameterValues [ "EyeLidLeft" ] ;
80- eyeData . Right . Openness = _parameterValues [ "EyeLidRight" ] ;
82+
83+ HandleSingleEyeOpenness ( ref eyeData . Left , _parameterValues [ "EyeLidLeft" ] , _config . WidenThreshold ,
84+ _config . SqueezeThreshold ) ;
85+ HandleSingleEyeOpenness ( ref eyeData . Right , _parameterValues [ "EyeLidRight" ] , _config . WidenThreshold ,
86+ _config . SqueezeThreshold ) ;
87+ }
88+
89+ private void HandleSingleEyeOpenness (
90+ ref UnifiedSingleEyeData eyeData ,
91+ float baseOpenness ,
92+ float widenThreshold ,
93+ float squeezeThreshold
94+ )
95+ {
96+ eyeData . Openness = baseOpenness ;
97+ if ( _config . ShouldEmulateEyeWiden && baseOpenness >= widenThreshold )
98+ {
99+ eyeData . Openness = Utils . SmoothStep (
100+ widenThreshold ,
101+ 1.4f ,
102+ baseOpenness
103+ ) ;
104+ }
105+
106+ if ( _config . ShouldEmulateEyeSquint && baseOpenness <= squeezeThreshold )
107+ {
108+ eyeData . Openness = Utils . SmoothStep (
109+ squeezeThreshold ,
110+ - 1.4f ,
111+ baseOpenness
112+ ) ;
113+ }
81114 }
82115}
0 commit comments