예제 #1
0
    //Method used to read in all the trials of the game
    private List<EventStats> ReadSpatialEvents(CsvReader csv)
    {
        List<EventStats> events = new List<EventStats>();

        int fieldCount = csv.FieldCount;

        string[] headers = csv.GetFieldHeaders();

        int i =2;

        while (csv.ReadNextRecord()){

            List<int> dots = new List<int>();
            float delay=.1f;

            for(int j = 0;j<fieldCount;j++){

                if(headers[j].ToLower() == "dots"){
                    int num;

                    string[] d = csv[j].Split(';');
                    for(int k =0;k<d.Length;k++){
                        if(int.TryParse(d[k],out num)){
                            if(num<1 || num>9){
                                NeuroLog.Error("Invalid Value for '"+ d[k] +"' value for 'dots' of line #" + i.ToString() + ". Needs to be between 1 and 9.");
                            }
                            else{
                                dots.Add(num);
                            }
                        }
                        else{
                            NeuroLog.Error("Invalid ValueType for '"+ d[k] +"' value for 'dots' of line #" + i.ToString() + ". Needs to be a float.");
                        }
                    }
                }
                //Delay
                else if(headers[j].ToLower() == "delay"){

                    if(float.TryParse(csv[j],out delay)){
                        if(delay!= .1f && delay != 3){
                            NeuroLog.Log("Invalid value for 'delay' at line #" + i.ToString() + ". Needs to be either .1 or 3.");
                            delay = .1f;
                        }
                    }
                    else NeuroLog.Log("Invalid value for 'delay' at line #" + i.ToString() + ". Needs to be a float.");
                }
                else{
                    NeuroLog.Log(headers[j].ToLower());
                }
            }

            if(dots.Count!=0){
                SpatialEvent sE = new SpatialEvent(dots);
                sE.Delay = delay;

                //Add the newly compiled event to the event list
                events.Add(sE);
            }

            i++;
        }

        //Set the event list
        return events;
    }
예제 #2
0
    //Method used to read in all the trials of the game
    private List<EventStats> ReadSpatialEvents(XmlNode eventsNode)
    {
        List<EventStats> events = new List<EventStats>();

        //For all the trials
        for (int i=0; i<eventsNode.ChildNodes.Count; i++){
            //Make sure were trying to deal with trial
            if(eventsNode.ChildNodes[i].Name =="event"){

                List<int> dots = new List<int>();
                float delay=.1f;

                //For each attribute in the trial
                foreach(XmlAttribute attri in eventsNode.ChildNodes[i].Attributes){
                    //StartRotation
                    if(attri.Name.ToLower() == "dots"){
                        int num;

                        string[] d = attri.Value.Split(';');
                        for(int j =0;j<d.Length;j++){
                            if(int.TryParse(d[j],out num)){
                                if(num<1 || num>9){
                                    Debug.LogError("Invalid Value for '"+ d[j] +"' value for 'dots' of trial #" + (j+1).ToString() + ". Needs to be between 1 and 9.");
                                }
                                else{
                                    dots.Add(num);
                                }
                            }
                            else{
                                Debug.LogError("Invalid ValueType for '"+ d[j] +"' value for 'dots' of trial #" + (j+1).ToString() + ". Needs to be a float.");
                            }
                        }
                    }
                    //Delay
                    else if(attri.Name.ToLower() == "delay"){
                        if(float.TryParse(attri.Value,out delay)){
                            if(delay!= .1f && delay != 3){
                                NeuroLog.Error("Invalid value for 'delay' at trial #" + (i+1).ToString() + ". Needs to be either .1 or 3.");
                                delay = .1f;
                            }
                        }
                        else NeuroLog.Error("Invalid value for 'delay' at trial #" + (i+1).ToString() + ". Needs to be a float.");
                    }
                    //Other attributes that don't have cases
                    else NeuroLog.Error("Unknown attribute '" + attri.Name + "' at trial #" + (i+1).ToString() + ".");
                }

                SpatialEvent sE = new SpatialEvent(dots);
                sE.Delay = delay;

                //Add the newly compiled event to the event list
                events.Add(sE);
            }
        }

        //Set the event list
        return events;
    }
예제 #3
0
    //Generate the basic group of events within a Spatial game
    protected override void generateEvents()
    {
        int i=0;

        System.Random rand = new System.Random();

        //Generate the 1 dots
        for(i=0;i<20;i++){

            List<int> d =new List<int>();

            d.Add(rand.Next(1,10));

            SpatialEvent e = new SpatialEvent(d);

            //First 10 has a delay of .1, the others have 3 seconds
            if(i<10)
                e.Delay = .1f;
            else
                e.Delay = 3f;

            events.Add(e);
        }

        //Generate 2 dots
        for(i=0;i<20;i++){

            List<int> d =new List<int>();

            while(d.Count<2){
                int num = rand.Next(1,10);
                if(!d.Contains(num)){
                    d.Add(num);
                }
            }

            SpatialEvent e = new SpatialEvent(d);

            //First 10 has a delay of .1, the others have 3 seconds
            if(i<10)
                e.Delay = .1f;
            else
                e.Delay = 3f;

            events.Add(e);
        }

        //Generate 3 dots
        for(i=0;i<20;i++){

            List<int> d =new List<int>();

            while(d.Count<3){
                int num = rand.Next(1,10);
                if(!d.Contains(num)){
                    d.Add(num);
                }
            }

            SpatialEvent e = new SpatialEvent(d);

            //First 10 has a delay of .1, the others have 3 seconds
            if(i<10)
                e.Delay = .1f;
            else
                e.Delay = 3f;

            events.Add(e);
        }
    }
예제 #4
0
    //Generate practice pitches
    protected override void generatePractice()
    {
        System.Random rand = new System.Random();

        border.renderer.enabled = true;

        List<EventStats> newPractice = new List<EventStats>();

        SpatialEvent eS;

        //Create a event for every combination of events
        for(int j = 0;j<6;j++){

            List<int> a1 =new List<int>();

            if(j<2){
                a1.Add(rand.Next(1,10));
            }
            else if(j<4){
                while(a1.Count<2){
                    int num = rand.Next(1,10);
                    if(!a1.Contains(num)) a1.Add(num);
                }
            }
            else{
                while(a1.Count<3){
                    int num = rand.Next(1,10);
                    if(!a1.Contains(num)) a1.Add(num);
                }
            }
            eS = new SpatialEvent(a1);

            if(j%2==0) eS.Delay = 3;
            else eS.Delay = .1f;

            newPractice.Add(eS);
        }

        //Just do a base randomization
        for(int i=0; i<newPractice.Count-1;i++){
            SpatialEvent originalStats = (SpatialEvent)newPractice[i];

            int spotToMove = rand.Next(i,newPractice.Count);

            newPractice[i] = newPractice[spotToMove];

            newPractice[spotToMove] = originalStats;
        }

        practice.AddRange(newPractice);
    }
예제 #5
0
    //Generate the basic group of events within a Spatial game
    protected override void generateEvents()
    {
        int i = 0;

        System.Random rand = new System.Random();

        //Generate the 1 dots
        for (i = 0; i < 20; i++)
        {
            List <int> d = new List <int>();

            d.Add(rand.Next(1, 10));

            SpatialEvent e = new SpatialEvent(d);

            //First 10 has a delay of .1, the others have 3 seconds
            if (i < 10)
            {
                e.Delay = .1f;
            }
            else
            {
                e.Delay = 3f;
            }

            events.Add(e);
        }

        //Generate 2 dots
        for (i = 0; i < 20; i++)
        {
            List <int> d = new List <int>();

            while (d.Count < 2)
            {
                int num = rand.Next(1, 10);
                if (!d.Contains(num))
                {
                    d.Add(num);
                }
            }

            SpatialEvent e = new SpatialEvent(d);

            //First 10 has a delay of .1, the others have 3 seconds
            if (i < 10)
            {
                e.Delay = .1f;
            }
            else
            {
                e.Delay = 3f;
            }

            events.Add(e);
        }

        //Generate 3 dots
        for (i = 0; i < 20; i++)
        {
            List <int> d = new List <int>();

            while (d.Count < 3)
            {
                int num = rand.Next(1, 10);
                if (!d.Contains(num))
                {
                    d.Add(num);
                }
            }

            SpatialEvent e = new SpatialEvent(d);

            //First 10 has a delay of .1, the others have 3 seconds
            if (i < 10)
            {
                e.Delay = .1f;
            }
            else
            {
                e.Delay = 3f;
            }

            events.Add(e);
        }
    }
예제 #6
0
    //Generate practice pitches
    protected override void generatePractice()
    {
        System.Random rand = new System.Random();

        border.renderer.enabled = true;

        List <EventStats> newPractice = new List <EventStats>();

        SpatialEvent eS;

        //Create a event for every combination of events
        for (int j = 0; j < 6; j++)
        {
            List <int> a1 = new List <int>();

            if (j < 2)
            {
                a1.Add(rand.Next(1, 10));
            }
            else if (j < 4)
            {
                while (a1.Count < 2)
                {
                    int num = rand.Next(1, 10);
                    if (!a1.Contains(num))
                    {
                        a1.Add(num);
                    }
                }
            }
            else
            {
                while (a1.Count < 3)
                {
                    int num = rand.Next(1, 10);
                    if (!a1.Contains(num))
                    {
                        a1.Add(num);
                    }
                }
            }
            eS = new SpatialEvent(a1);

            if (j % 2 == 0)
            {
                eS.Delay = 3;
            }
            else
            {
                eS.Delay = .1f;
            }

            newPractice.Add(eS);
        }

        //Just do a base randomization
        for (int i = 0; i < newPractice.Count - 1; i++)
        {
            SpatialEvent originalStats = (SpatialEvent)newPractice[i];

            int spotToMove = rand.Next(i, newPractice.Count);

            newPractice[i] = newPractice[spotToMove];

            newPractice[spotToMove] = originalStats;
        }

        practice.AddRange(newPractice);
    }
예제 #7
0
    //Method used to randomize the order of the list of events
    protected override void randomizeEvents()
    {
        System.Random rand = new System.Random();

        //Apply a base randomization
        for (int i = 0; i < 41; i++)
        {
            SpatialEvent originalStats = (SpatialEvent)events[i];

            int spotToMove = rand.Next(i, 42);

            events[i] = events[spotToMove];

            events[spotToMove] = originalStats;
        }

        bool ok = true;
        bool eventGood;

        int cycleCount = 0;

        //Loop to make sure there are no strings of 3 same number of dots or delays
        do
        {
            ok = true;

            for (int i = 2; i < 42; i++)
            {
                eventGood = true;

                if (((SpatialEvent)events[i]).Dots.Count == ((SpatialEvent)events[i - 1]).Dots.Count &&
                    ((SpatialEvent)events[i]).Dots.Count == ((SpatialEvent)events[i - 2]).Dots.Count)
                {
                    eventGood = false;
                }

                if (((SpatialEvent)events[i]).Delay == ((SpatialEvent)events[i - 1]).Delay &&
                    ((SpatialEvent)events[i]).Delay == ((SpatialEvent)events[i - 2]).Delay)
                {
                    eventGood = false;
                }

                if (!eventGood)
                {
                    ok = false;

                    int start = i + 1;
                    if (start >= 42)
                    {
                        start = 0;
                    }

                    for (int j = i + 1; j < 42; j++)
                    {
                        eventGood = true;
                        if (((SpatialEvent)events[j]).Dots.Count == ((SpatialEvent)events[i - 1]).Dots.Count &&
                            ((SpatialEvent)events[j]).Dots.Count == ((SpatialEvent)events[i - 2]).Dots.Count)
                        {
                            eventGood = false;
                        }

                        if (((SpatialEvent)events[j]).Delay == ((SpatialEvent)events[i - 1]).Delay &&
                            ((SpatialEvent)events[j]).Delay == ((SpatialEvent)events[i - 2]).Delay)
                        {
                            eventGood = false;
                        }

                        if (eventGood)
                        {
                            SpatialEvent originalStats = (SpatialEvent)events[i];

                            events[i] = events[j];

                            events[j] = originalStats;

                            break;
                        }
                        else if (j == 41)
                        {
                            j = 0;
                        }
                    }
                }
            }
            cycleCount++;
            //Attempt 5 loops to fix any bad instances, after 5th proceed anyway
            if (cycleCount > 5)
            {
                ok = true;
            }
        }while(!ok);
    }