2018-11-28 19:09:50 -05:00
|
|
|
|
using Assets.Scripts;
|
|
|
|
|
using System;
|
2018-10-14 23:33:23 -04:00
|
|
|
|
using System.Collections.Generic;
|
2018-10-30 19:07:29 -04:00
|
|
|
|
using System.Diagnostics;
|
2018-11-29 13:14:03 -05:00
|
|
|
|
using System.Net;
|
2018-10-14 19:55:46 -04:00
|
|
|
|
using System.Text;
|
|
|
|
|
using UnityEngine;
|
2018-10-30 19:07:29 -04:00
|
|
|
|
using UnityEngine.EventSystems;
|
2018-10-14 19:55:46 -04:00
|
|
|
|
|
|
|
|
|
public class ExperimentController : MonoBehaviour {
|
|
|
|
|
|
|
|
|
|
GameObject startDot;
|
|
|
|
|
GameObject nextDot;
|
|
|
|
|
int trialIndex;
|
|
|
|
|
int trialDotIndex;
|
|
|
|
|
Participant participant;
|
2018-10-14 23:33:23 -04:00
|
|
|
|
List<GameObject> dots = new List<GameObject>();
|
2018-10-30 19:07:29 -04:00
|
|
|
|
Stopwatch stopwatch = new Stopwatch();
|
|
|
|
|
GameObject playerCamera;
|
2018-11-28 19:09:50 -05:00
|
|
|
|
DataSet dataSet = new DataSet();
|
|
|
|
|
string platform;
|
2018-10-14 19:55:46 -04:00
|
|
|
|
// Use this for initialization
|
|
|
|
|
void Start () {
|
2018-11-28 19:09:50 -05:00
|
|
|
|
#if UNITY_ANDROID
|
|
|
|
|
platform = "cardboard";
|
|
|
|
|
#endif
|
|
|
|
|
#if UNITY_EDITOR
|
|
|
|
|
platform = "mouse";
|
|
|
|
|
#endif
|
|
|
|
|
#if UNITY_STANDALONE_WIN
|
2018-11-29 13:14:03 -05:00
|
|
|
|
platform = "oculus";
|
2018-11-28 19:09:50 -05:00
|
|
|
|
#endif
|
2018-11-29 13:14:03 -05:00
|
|
|
|
string response = "";
|
|
|
|
|
using (WebClient client = new WebClient())
|
|
|
|
|
{
|
|
|
|
|
string endpoint = "http://do.superpichu.org:5000/" + platform;
|
|
|
|
|
response = client.DownloadString(endpoint);
|
|
|
|
|
UnityEngine.Debug.Log("Received Response: " + response);
|
|
|
|
|
}
|
|
|
|
|
participant = new Participant(response);
|
2018-10-14 19:55:46 -04:00
|
|
|
|
startDot = GameObject.Find("StartButton");
|
2018-10-30 19:07:29 -04:00
|
|
|
|
playerCamera = GameObject.FindGameObjectsWithTag("MainCamera")[0];
|
2018-10-14 19:55:46 -04:00
|
|
|
|
trialIndex = 0;
|
|
|
|
|
trialDotIndex = 0;
|
|
|
|
|
foreach (GameObject go in GameObject.FindGameObjectsWithTag("Dot"))
|
|
|
|
|
{
|
2018-10-14 23:33:23 -04:00
|
|
|
|
dots.Add(go);
|
2018-10-14 19:55:46 -04:00
|
|
|
|
Hide(go);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Hide(GameObject dot)
|
|
|
|
|
{
|
2018-10-14 23:33:23 -04:00
|
|
|
|
dot.SetActive(false);
|
2018-10-14 19:55:46 -04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Show(GameObject dot)
|
|
|
|
|
{
|
2018-10-14 23:33:23 -04:00
|
|
|
|
dot.SetActive(true);
|
2018-10-14 19:55:46 -04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void NextDot()
|
|
|
|
|
{
|
2018-10-30 19:07:29 -04:00
|
|
|
|
if (stopwatch.IsRunning)
|
|
|
|
|
{
|
|
|
|
|
stopwatch.Stop();
|
|
|
|
|
double time = stopwatch.Elapsed.TotalSeconds;
|
|
|
|
|
stopwatch.Reset();
|
2018-11-28 19:09:50 -05:00
|
|
|
|
double angle = Vector3.Angle(nextDot.transform.position, playerCamera.transform.position);
|
|
|
|
|
double distance = Vector3.Distance(nextDot.transform.position, startDot.transform.position);
|
|
|
|
|
SaveSample(angle, distance, time, false);
|
|
|
|
|
}
|
|
|
|
|
if (trialDotIndex < participant.trials[trialIndex].Length)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
nextDot = FindDot(participant.trials[trialIndex][trialDotIndex]);
|
|
|
|
|
trialDotIndex++;
|
|
|
|
|
Show(nextDot);
|
|
|
|
|
Hide(startDot);
|
|
|
|
|
}
|
|
|
|
|
else if(trialIndex < participant.trials.Length)
|
|
|
|
|
{
|
|
|
|
|
// NEXT TRIAL SHIT
|
|
|
|
|
trialIndex++;
|
|
|
|
|
trialDotIndex = 0;
|
|
|
|
|
dataSet.SaveDataSet();
|
|
|
|
|
dataSet.Samples.Clear();
|
|
|
|
|
nextDot = FindDot(participant.trials[trialIndex][trialDotIndex]);
|
|
|
|
|
Show(nextDot);
|
|
|
|
|
Hide(startDot);
|
2018-10-30 19:07:29 -04:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2018-11-28 19:09:50 -05:00
|
|
|
|
dataSet.SaveDataSet();
|
2018-10-30 19:07:29 -04:00
|
|
|
|
}
|
2018-11-28 19:09:50 -05:00
|
|
|
|
stopwatch.Start();
|
2018-10-14 19:55:46 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void BackToStart()
|
|
|
|
|
{
|
2018-10-30 19:07:29 -04:00
|
|
|
|
stopwatch.Stop();
|
|
|
|
|
double time = stopwatch.Elapsed.TotalSeconds;
|
|
|
|
|
stopwatch.Reset();
|
|
|
|
|
double angle = Vector3.Angle(nextDot.transform.position, playerCamera.transform.position);
|
2018-11-28 19:09:50 -05:00
|
|
|
|
double distance = Vector3.Distance(nextDot.transform.position, startDot.transform.position);
|
|
|
|
|
SaveSample(angle, distance, time, true);
|
2018-10-14 19:55:46 -04:00
|
|
|
|
Hide(nextDot);
|
|
|
|
|
Show(startDot);
|
2018-11-28 19:09:50 -05:00
|
|
|
|
stopwatch.Start();
|
2018-10-30 19:07:29 -04:00
|
|
|
|
|
2018-10-14 19:55:46 -04:00
|
|
|
|
|
2018-10-30 19:07:29 -04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void CardboardWrapper(GameObject go, PointerEventData eventData)
|
|
|
|
|
{
|
|
|
|
|
UnityEngine.Debug.Log(eventData.pointerPressRaycast.worldPosition);
|
|
|
|
|
if (go != null)
|
|
|
|
|
{
|
|
|
|
|
UnityEngine.Debug.Log(go.name);
|
|
|
|
|
if (go.name == "StartButton")
|
|
|
|
|
{
|
|
|
|
|
NextDot();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
BackToStart();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
UnityEngine.Debug.Log("Missed");
|
|
|
|
|
}
|
2018-10-14 19:55:46 -04:00
|
|
|
|
}
|
|
|
|
|
|
2018-11-28 19:09:50 -05:00
|
|
|
|
void SaveSample(double angle, double distance, double time, bool direction)
|
|
|
|
|
{
|
|
|
|
|
Sample sample = new Sample();
|
|
|
|
|
sample.Angle = angle;
|
|
|
|
|
sample.Distance = distance;
|
|
|
|
|
sample.Time = time;
|
|
|
|
|
sample.Direction = direction;
|
|
|
|
|
sample.DotName = nextDot.name;
|
|
|
|
|
sample.DotIndex = trialDotIndex;
|
|
|
|
|
sample.TrialIndex = trialIndex + 1;
|
|
|
|
|
sample.ParticipantID = participant.participantId;
|
|
|
|
|
sample.Platform = platform;
|
|
|
|
|
TimeSpan t = DateTime.UtcNow - new DateTime(1970, 1, 1);
|
|
|
|
|
sample.Timestamp = (long)t.TotalMilliseconds;
|
|
|
|
|
dataSet.Samples.Add(sample);
|
|
|
|
|
}
|
2018-10-14 23:33:23 -04:00
|
|
|
|
|
|
|
|
|
GameObject FindDot(string name)
|
|
|
|
|
{
|
2018-11-28 19:09:50 -05:00
|
|
|
|
foreach (GameObject dot in dots)
|
2018-10-14 23:33:23 -04:00
|
|
|
|
{
|
|
|
|
|
if (dot.name == name) return dot;
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
2018-11-28 19:09:50 -05:00
|
|
|
|
|
|
|
|
|
// Update is called once per frame
|
|
|
|
|
void Update () {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2018-10-14 19:55:46 -04:00
|
|
|
|
}
|