22using System . Collections ;
33
44using System . Collections . Generic ;
5+ using System . Linq ;
6+ using ScriptableObjects ;
7+ using ScriptableObjects . Variables ;
58using UnityEngine ;
69using UXF ;
710using UnityEngine . UI ;
11+ using UnityEngine . Windows . WebCam ;
812
913[ ExecuteInEditMode ]
1014public class CalibrationAssessment : MonoBehaviour
@@ -27,20 +31,22 @@ public class CalibrationAssessment : MonoBehaviour
2731 [ NonSerialized ] public Transform CurrentTargetTransform ;
2832
2933 private bool _presentingTarget ;
30- private float _gazeToTargetDist ;
34+ public float gazeToTargetDist ;
3135
3236 private readonly List < int > _remainingTargets = new List < int > ( ) { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 } ;
3337 private int _targetIdx ;
3438
3539 public Text gazeErrorText ;
36-
37- private Block _practiceBlock ;
40+
3841 private MeshRenderer [ ] _targetRenderers ;
3942 private static readonly int ColorProperty = Shader . PropertyToID ( "_Color" ) ;
4043
4144 [ SerializeField ] private SelectEyeTracker eyeTracker ;
4245 [ SerializeField ] private Camera vrCamera ;
4346 [ SerializeField ] private GameObject [ ] targets ;
47+ [ SerializeField ] private Tracker assessmentTracker ;
48+ [ SerializeField ] private SessionSettings settings ;
49+ [ SerializeField ] private IntVariable trialCount ;
4450 private GameObject [ ] [ ] _targets2D ;
4551
4652 public void OnValidate ( ) {
@@ -54,22 +60,23 @@ public void OnEnable()
5460 _targets2D [ 1 ] = new [ ] { targets [ 3 ] , targets [ 4 ] , targets [ 5 ] } ;
5561 _targets2D [ 2 ] = new [ ] { targets [ 6 ] , targets [ 7 ] , targets [ 8 ] } ;
5662 _targetRenderers = new MeshRenderer [ targets . Length ] ;
57- // _practiceBlock = Session.instance.CreateBlock();
63+ for ( var i = 0 ; i < targets . Length ; i ++ )
64+ {
65+ _targetRenderers [ i ] = targets [ i ] . GetComponent < MeshRenderer > ( ) ;
66+ _targetRenderers [ i ] . enabled = false ;
67+ }
68+ _targetRenderers [ 0 ] . enabled = true ;
69+ _targetIdx = 0 ;
70+ targetDistance = settings . stimulusDepth ;
71+ CurrentTargetTransform = GETTargTransformByIndex ( 0 ) ;
72+
5873 RepositionTargets ( ) ;
5974
6075 if ( randomizeTargetOrder ) {
6176 ShuffleTargetList ( ) ;
6277 }
6378 }
64-
65- public void Start ( )
66- {
67- for ( var i = 0 ; i < targets . Length ; i ++ )
68- {
69- _targetRenderers [ i ] = targets [ i ] . GetComponent < MeshRenderer > ( ) ;
70- }
71- }
72-
79+
7380 private void RepositionTargets ( ) {
7481 var halfAzRad = ( azimuthWidth / 2.0f ) * Mathf . Deg2Rad ;
7582 var halfElRad = ( elevationHeight / 2.0f ) * Mathf . Deg2Rad ;
@@ -96,6 +103,9 @@ private void RepositionTargets(){
96103 }
97104
98105 var targetBacking = transform . Find ( "backing" ) ;
106+ targetBacking . GetComponent < MeshFilter > ( ) . mesh . triangles =
107+ targetBacking . GetComponent < MeshFilter > ( ) . mesh . triangles . Reverse ( ) . ToArray ( ) ;
108+ targetBacking . gameObject . AddComponent < MeshCollider > ( ) ;
99109 targetBacking . localScale = new Vector3 ( targetDistance * 2.0f , targetDistance * 2.0f , targetDistance * 2.0f ) ;
100110 }
101111
@@ -150,7 +160,6 @@ private Transform GETTargTransformByIndex(int targetIdx){
150160
151161
152162 private void RecordFixation ( ) {
153- var aTrial = _practiceBlock . CreateTrial ( ) ;
154163 var mr = CurrentTargetTransform . gameObject . GetComponent < MeshRenderer > ( ) ;
155164
156165 StartCoroutine ( PresentTarget ( ) ) ;
@@ -161,13 +170,14 @@ IEnumerator PresentTarget()
161170 mr . material . SetColor ( ColorProperty , Color . yellow ) ;
162171 _presentingTarget = true ;
163172
164- aTrial . Begin ( ) ;
165-
173+
174+ assessmentTracker . StartRecording ( ) ;
166175 yield return new WaitForSeconds ( fixationTime ) ;
176+ assessmentTracker . StopRecording ( ) ;
167177
168- aTrial . End ( ) ;
169- aTrial . result [ "trialType" ] = "CalibrationAssessment" ;
170-
178+ mr . material . SetColor ( ColorProperty , Color . black ) ;
179+ Session . instance . SaveDataTable ( assessmentTracker . data , "EyeTrackerAssessmentTrial" + trialCount . value ) ;
180+ Debug . Log ( "Data recorded for target" ) ;
171181 _presentingTarget = false ;
172182 }
173183 }
@@ -224,12 +234,15 @@ private void ToggleHeadFixed(){
224234 }
225235 }
226236
227- public void Update ( )
237+ public void LateUpdate ( )
228238 {
229- //var gazeInHead = Camera.main.transform.InverseTransformPoint(eyeInHeadTransform.position);
230- //_gazeToTargetDist = Vector3.Angle(CurrentTargetTransform.localPosition, gazeInHead);
231- _gazeToTargetDist = 0.0f ;
232- gazeErrorText . text = _gazeToTargetDist . ToString ( "0.#" ) ;
239+ if ( Physics . Raycast ( vrCamera . transform . position ,
240+ vrCamera . transform . TransformDirection ( eyeTracker . ChosenTracker . GetLocalGazeDirection ( ) ) , out var hit ) )
241+ {
242+ gazeToTargetDist = Vector3 . Angle ( CurrentTargetTransform . localPosition , vrCamera . transform . InverseTransformPoint ( hit . point ) ) ;
243+ }
244+
245+ gazeErrorText . text = "Current Error: " + gazeToTargetDist . ToString ( "0.#" ) + " degrees" ;
233246 }
234247}
235248
0 commit comments